久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8096|回復: 17
打印 上一主題 下一主題
收起左側

protues仿真單片機+DS12C887實時時鐘,時間不隨秒增加?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:190344 發表于 2017-4-18 18:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit lcden=P3^4; //液晶使能端
  5. sbit rs=P3^5; //液晶數據命令選擇端
  6. sbit led=P2^5; //控制LED的鎖存器
  7. sbit dula=P2^6;  //控制LCD的段鎖存器
  8. sbit wela=P2^7;  //控制LCD的位鎖存器
  9. sbit dsirq=P3^2;  //DS12887的中斷請求端
  10. sbit dsds=P1^7;  //DS12887的讀允許輸入端
  11. sbit dsrw=P1^6; //DS12887的寫允許輸入端
  12. sbit dsas=P1^5;  //DS12887的地址選通端
  13. sbit dscs=P1^4;  //DS12887的芯片片選端
  14. sbit a=P3^0;  //設置鍵盤用的
  15. sbit b=P3^1;  //設置鍵盤用的
  16. sbit c=P3^6;  //設置鍵盤用的
  17. sbit d=P3^7;  //設置鍵盤用的
  18. sbit e=P3^3;  //設置鍵盤用的
  19. uchar code table1[]=" 2000-00-00     ";
  20. uchar code table2[]=" 00:00:00       ";
  21. uchar flag1,flag2,temp,temp1;
  22. /*
  23.   falg1標志位是用來判斷是否執行從DS12C887中讀取數據并送去液晶顯示;
  24.   flag2標志位是用來判斷LCD上顯示的年數是否是閏年;
  25.   temp與temp1都時當月的天數值,用來判斷DS12C887中的天數值是否大
  26.   于當月應有的天數,如大于則將天數值置1,如有需要請重新設置天數值。
  27. */  
  28. char miao,fen,nian,yue,ri,xingqi;  
  29. int shi;  //小時的數值大于128,所以不能選擇char型數據
  30. /*------------
  31.   延時子程序
  32. */
  33. void delayms(uchar a)
  34. {
  35. uchar x,y;
  36. for(x=a;x>0;x--)
  37.   for(y=110;y>0;y--);
  38. }
  39. /*----------------
  40.   往液晶中寫指令
  41. ----------------*/
  42. void write_com(uchar com)
  43. {
  44. rs=0;      //選擇寫命令模式
  45. lcden=0;  //將lcden置為零
  46. P0=com;   //將要寫的命令字送到數據總線上
  47. delayms(5);  //稍做延時以待數據穩定
  48. lcden=1;  //使能端給一個高脈沖
  49. delayms(5);  //稍做延時
  50. lcden=0;  //將使能端置0以完成高脈沖
  51. }
  52. /*----------------
  53.   往液晶中寫數據
  54. ----------------*/
  55. void write_date(uchar date)
  56. {
  57. rs=1;   //選擇寫數據模式
  58. lcden=0;  //將lcden置為零
  59. P0=date;  //將要寫的數據送到數據總線上
  60. delayms(5);  //稍做延時以待數據穩定
  61. lcden=1;  //使能端給一個高脈沖
  62. delayms(5);  //稍做延時
  63. lcden=0;  //將使能端置0以完成高脈沖
  64. }
  65. /*--------------------
  66.   向DS12C887內寫數據
  67. --------------------*/
  68. void write_ds(uchar add,uchar date)
  69. {
  70. dscs=0;
  71. dsas=1;
  72. dsds=1;
  73. dsrw=1;
  74. P0=add;   //先寫地址
  75. dsas=0;
  76. dsrw=0;
  77. P0=date;  //再寫數據
  78. dsrw=1;
  79. dsas=1;
  80. dscs=1;
  81. }
  82. /*--------------------
  83.   從DS12C887中讀數據
  84. --------------------*/
  85. uchar read_ds(uchar add)
  86. {
  87. uchar temp;
  88. dscs=0;
  89. dsas=1;
  90. dsds=1;
  91. dsrw=1;
  92. P0=add;   //先寫地址
  93. dsas=0;
  94. dsds=0;
  95. P0=0xff;  //讀數據之前先將P0口置一
  96. temp=P0;  //再讀數據
  97. dsds=1;
  98. dsas=1;
  99. dscs=1;  
  100. return temp;
  101. }
  102. /*----------------------------------------------------------------------
  103.   24小時制在液晶的指定位置寫入時分秒,12小時制在液晶的指定位置寫入分秒
  104. ----------------------------------------------------------------------*/
  105. void write_sfm(uchar add,uchar date)
  106. {
  107. uchar shi,ge;
  108. shi=date/10;  //分解一個2位數的十位和個位
  109. ge=date%10;
  110. write_com(0x80+0x40+add);  //設置顯示位置
  111. write_date(shi+0x30);    //送去液晶顯示十位
  112. write_date(ge+0x30);    //送去液晶顯示個位
  113. }
  114. /*----------------------------
  115.   在液晶的指定位置寫入年月日
  116. ----------------------------*/
  117. void write_nyr(uchar add,uchar date)
  118. {
  119. uchar shi,ge;
  120. shi=date/10;  //分解一個2位數的十位和個位
  121. ge=date%10;
  122. write_com(0x80+add);   //設置顯示位置
  123. write_date(shi+0x30);  //送去液晶顯示十位
  124. write_date(ge+0x30);   //送去液晶顯示個位
  125. }
  126. /*----------------------------
  127.   在液晶的指定位置寫入星期
  128. ----------------------------*/
  129. void write_xq(uchar date)
  130. {
  131. uchar i;
  132. i=date;
  133. write_com(0x80+12);
  134. switch(i)    //switch-case語句判斷i的值及執行相應的操作
  135. {
  136.   case 1:     //當i等于1時,送去液晶顯示MON(星期一)
  137.    write_date('M');
  138.    write_date('O');
  139.    write_date('N');
  140.    break;
  141.   case 2:     //當i等于2時,送去液晶顯示TUE(星期二)
  142.    write_date('T');
  143.    write_date('U');
  144.    write_date('E');
  145.    break;
  146.   case 3:     //當i等于3時,送去液晶顯示WED(星期三)
  147.    write_date('W');
  148.    write_date('E');
  149.    write_date('D');
  150.    break;
  151.   case 4:     //當i等于4時,送去液晶顯示THU(星期四)
  152.    write_date('T');
  153.    write_date('H');
  154.    write_date('U');
  155.   break;
  156.   case 5:       //當i等于5時,送去液晶顯示FRI(星期五)
  157.    write_date('F');
  158.    write_date('R');
  159.    write_date('I');
  160.    break;
  161.   case 6:     //當i等于6時,送去液晶顯示SAT(星期六)
  162.    write_date('S');
  163.    write_date('A');
  164.    write_date('T');
  165.    break;
  166.   case 7:     //當i等于7時,送去液晶顯示SUN(星期日)
  167.    write_date('S');
  168.    write_date('U');
  169.    write_date('N');
  170.    break;
  171. }
  172. }
  173. /*----------------
  174.   判斷天數的函數
  175. ----------------*/
  176. char day_num(char nian,char yue)
  177. {
  178. char num;
  179. if(((nian%4==0)&&(nian%100!=0))||((nian%100==0)&&(nian%400==0)))  //閏年判斷
  180.   flag2=1;
  181. else
  182.   flag2=0;
  183. if(flag2==1)  //是閏年時,將第二月的天數設為29
  184. {
  185.   switch(yue)
  186.   {
  187.    case 1:
  188.     num=31;  //1月的天數
  189.     break;
  190.    case 2:
  191.     num=29;  //2月的天數
  192.     break;
  193.    case 3:
  194.     num=31;  //3月的天數
  195.     break;
  196.    case 4:
  197.     num=30;  //4月的天數
  198.     break;
  199.    case 5:
  200.     num=31;  //5月的天數
  201.     break;
  202.    case 6:
  203.     num=30;  //6月的天數
  204.     break;
  205.    case 7:
  206.     num=31;  //7月的天數
  207.     break;
  208.    case 8:
  209.     num=31;  //8月的天數
  210.     break;
  211.    case 9:
  212.     num=30;  //9月的天數
  213.     break;
  214.    case 10:
  215.     num=31;  //10月的天數
  216.     break;
  217.    case 11:  
  218.     num=30;  //11月的天數
  219.     break;
  220.    case 12:
  221.    num=31;  //12月的天數
  222.     break;
  223.   }
  224. }
  225. if(flag2==0)  //不是閏年時,將第二月的天數設為28
  226. {
  227.   switch(yue)
  228.   {
  229.    case 1:
  230.     num=31;  //1月的天數
  231.     break;
  232.    case 2:
  233.     num=28;  //2月的天數
  234.     break;
  235.    case 3:
  236.     num=31;  //3月的天數
  237.     break;
  238.    case 4:
  239.     num=30;  //4月的天數
  240.     break;
  241.    case 5:
  242.     num=31;  //5月的天數
  243.     break;
  244.    case 6:
  245.     num=30;  //6月的天數
  246.     break;
  247.    case 7:
  248.     num=31;  //7月的天數
  249.     break;
  250.    case 8:
  251.     num=31; //8月的天數
  252.     break;
  253.    case 9:
  254.     num=30;  //9月的天數
  255.     break;
  256.    case 10:
  257.     num=31;  //10月的天數
  258.     break;
  259.    case 11:
  260.     num=30;  //11月的天數
  261.     break;
  262.    case 12:
  263.     num=31;  //12月的天數
  264.     break;
  265.   }
  266. }
  267. return num;  //函數的返回值時當月的天數
  268. }
  269. /*--------------
  270.   鍵盤掃描程序
  271. --------------*/
  272. void keyscan()
  273. {
  274. uchar num;
  275. a=0;  //設置矩陣鍵盤S1低電平
  276. b=1;  //設置矩陣鍵盤S2高電平
  277. if(c==0)   //判斷S3有沒有被按下
  278. {
  279.   delayms(5);  //去抖延時
  280.   if(c==0)  //判斷S3有沒有被按下
  281.   {
  282.    while(!c);  //判斷按鍵S3有沒有釋放
  283.    num++;     //按下鍵的次數
  284.    flag1=1;    //標志位flag1置一
  285.    if(num==1)  //當num等于1時,光標在秒鐘處閃爍
  286.    {
  287.     write_com(0x80+0x40+8);
  288.     write_com(0x0f);
  289.    }
  290.    if(num==2)  //當num等于2時,光標在分鐘處閃爍
  291.    {
  292.     write_com(0x80+0x40+5);
  293.     write_com(0x0f);
  294.    }
  295.    if(num==3) //當num等于3時,光標在時鐘處閃爍
  296.    {
  297.     write_com(0x80+0x40+2);
  298.     write_com(0x0f);
  299.    }
  300.    if(num==4) //當num等于4時,光標在年處閃爍
  301.    {
  302.    write_com(0x80+4);
  303.     write_com(0x0f);
  304.    }
  305.    if(num==5)  //當num等于5時,光標在月處閃爍
  306.    {
  307.     write_com(0x80+7);
  308.     write_com(0x0f);
  309.    }
  310.    if(num==6)  //當num等于6時,光標在日處閃爍
  311.    {
  312.     write_com(0x80+10);
  313.     write_com(0x0f);
  314.    }
  315.    if(num==7)  //當num等于7時,光標在星期處閃爍
  316.    {
  317.     write_com(0x80+14);
  318.     write_com(0x0f);
  319.    }
  320.    if(num==8)
  321.    {
  322.     num=0;  //num清0
  323.     write_ds(0x00,miao);    //將秒寫入DS12C887
  324.     write_ds(0x02,fen);     //將分寫入DS12C887
  325.     write_ds(0x04,shi);     //將時寫入DS12C887
  326.     write_ds(0x06,xingqi);  //將星期寫入DS12C887
  327.     write_ds(0x07,ri);     //將日寫入DS12C887
  328.     write_ds(0x08,yue);     //將月寫入DS12C887
  329.     write_ds(0x09,nian);    //將年寫入DS12C887
  330.     flag1=0;  //標志位flag1清0
  331.    }
  332.   }
  333. }
  334. if(num!=0)  //當功能鍵S3按下后,數值增大鍵S4才有用
  335. {
  336.   a=0;  //設置矩陣鍵盤第一排位低電平
  337.   b=1;  //設置矩陣鍵盤第二排位高電平
  338.   if(d==0)  //判斷S4有沒有被按下
  339.   {
  340.    delayms(5);  //去抖延時
  341.    if(d==0)  //判斷S4有沒有被按下
  342.    {
  343.     while(!d);  //判斷按鍵S4有沒有釋放
  344.     if(num==1)
  345.     {
  346.      miao++;  //當num=1時,秒值加一
  347.      if(miao>59)  //當秒值大于59時,將秒值置0
  348.       miao=0;
  349.      write_sfm(7,miao);  //將秒值寫入液晶顯示
  350.      write_com(0x80+0x40+8);  //光標在秒值的個位閃爍
  351.      write_com(0x0f);
  352.     }
  353.     if(num==2)
  354.     {
  355.      fen++;  //當num=2時,分值加一??
  356.      if(fen>59)  //當分值大于59時,將分值置0
  357.       fen=0;
  358.      write_sfm(4,fen);  //將分值寫入液晶顯示
  359.      write_com(0x80+0x40+5);  //光標在分值的個位閃爍
  360.      write_com(0x0f);
  361.     }
  362.     if(num==3)
  363.     {
  364.     shi++;  //當num=3時,時鐘加一?
  365.     if(shi>23)  //當時鐘大于23時,將時鐘置0
  366.       shi=0;
  367.      write_sfm(1,shi);  //將時鐘寫入液晶顯示
  368.      write_com(0x80+0x40+2);  //光標在時鐘的個位閃爍
  369.      write_com(0x0f);
  370.     }
  371.     if(num==4)
  372.     {
  373.      nian++;  //當num=4時,年加一
  374.      if(nian>99)  //當年大于99時,將年置0
  375.       nian=0;
  376.      write_nyr(3,nian);  //將年寫入液晶顯示
  377.      write_com(0x80+4);  //光標在年的個位閃爍
  378.      write_com(0x0f);
  379.     }
  380.     if(num==5)
  381.     {
  382.      yue++;  //當num=5時,月加一
  383.      if(yue>12)  //當月大于12時,將月置1
  384.       yue=1;
  385.      write_nyr(6,yue);   //將月寫入液晶顯示
  386.      write_com(0x80+7);  //光標在月的個位閃爍
  387.      write_com(0x0f);
  388.     }
  389.     if(num==6)
  390.     {
  391.      ri++;  //當num=6時,日加一
  392.      temp=day_num(nian,yue);
  393.      if(ri>temp)  //當日大于當月的天數時,將日置1
  394.       ri=1;
  395.     write_nyr(9,ri);  //將日寫入液晶顯示
  396.     write_com(0x80+10);  //光標在月的個位閃爍
  397.      write_com(0x0f);
  398.     }
  399.     if(num==7)
  400.     {
  401.      xingqi++;  //當num=7時,星期加一
  402.      if(xingqi>7)  //當星期大于7時,將星期置1
  403.       xingqi=1;
  404.      write_xq(xingqi);  //將星期寫入液晶顯示
  405.      write_com(0x80+14);  //光標在星期的個位閃爍
  406.      write_com(0x0f);
  407.     }
  408.    }
  409.   }
  410. }
  411. if(num!=0)  //當功能鍵S3按下后,數值減小鍵S5才有用
  412. {
  413.   a=1;  //設置矩陣鍵盤第一排位高電平
  414.   b=0;  //設置矩陣鍵盤第二排位低電平
  415.   if(e==0)  //判斷S5有沒有被按下
  416.   {
  417.    delayms(5);  //去抖延時
  418.    if(e==0)  //判斷S5有沒有被按下
  419.    {
  420.     while(!e);  //判斷按鍵S5有沒有釋放
  421.     if(num==1)
  422.     {
  423.      miao--;  //當num=1時,秒值減一
  424.      if(miao<0)  //當秒值小于0時,將秒值置59
  425.       miao=59;
  426.      write_sfm(7,miao);  //將秒值寫入液晶顯示
  427.      write_com(0x80+0x40+8);  //光標在秒值的個位閃爍
  428.      write_com(0x0f);
  429.     }
  430.     if(num==2)
  431.     {
  432.      fen--;  //當num=2時,分值減一
  433.      if(fen<0)  //當分值小于0時,將分值置59
  434.       fen=59;
  435.      write_sfm(4,fen);  //將分值寫入液晶顯示
  436.      write_com(0x80+0x40+5);  //光標在分值的個位閃爍
  437.      write_com(0x0f);
  438.     }
  439.     if(num==3)
  440.     {
  441.      shi--;  //當num=3時,時鐘減一
  442.      if(shi<0) //當時鐘小于0時,將時鐘置23
  443.       shi=23;
  444.      write_sfm(1,shi);  //將時鐘寫入液晶顯示
  445.      write_com(0x80+0x40+2);  //光標在時鐘的個位閃爍
  446.      write_com(0x0f);
  447.         }
  448.     if(num==4)
  449.     {
  450.      nian--;  //當num=4時,年減一
  451.      if(nian<0)  //當年小于0時,將年置99
  452.       nian=99;
  453.      write_nyr(3,nian);  //將年寫入液晶顯示
  454.      write_com(0x80+4);  //光標在年的個位閃爍
  455.      write_com(0x0f);
  456.     }
  457.     if(num==5)
  458.     {
  459.      yue--;  //當num=5時,月減一
  460.      if(yue<1)  //當月小于1時,將月置12
  461.       yue=12;
  462.      write_nyr(6,yue);   //將月寫入液晶顯示
  463.      write_com(0x80+7);  //光標在月的個位閃爍
  464.      write_com(0x0f);
  465.     }
  466.     if(num==6)
  467.     {
  468.      ri--;  //當num=6時,日減一
  469.      temp=day_num(nian,yue);
  470.     if(ri>temp)
  471.      ri=temp;
  472.      if(ri<1)  //當日小于1時,將日置為當月的天數
  473.       ri=temp;
  474.      write_nyr(9,ri);  //將日寫入液晶顯示
  475.      write_com(0x80+10);  //光標在月的個位閃爍
  476.      write_com(0x0f);
  477.     }
  478.     if(num==7)
  479.     {
  480.      xingqi--;  //當num=7時,星期加一
  481.      if(xingqi<1)  //當星期小于1時,將星期置7
  482.       xingqi=7;
  483.      write_xq(xingqi);  //將星期寫入液晶顯示
  484.      write_com(0x80+14);  //光標在星期的個位閃爍
  485.      write_com(0x0f);
  486.     }
  487.    }
  488.   }
  489. }
  490. }
  491. /*--------------
  492. ? 初始化時鐘函數
  493. --------------*/
  494. void set_time()
  495. {
  496. write_ds(0,0);  //初始化時鐘秒鐘的數值為0
  497. write_ds(2,0); //初始化時鐘分鐘的數值為0
  498. write_ds(4,1); //初始化時鐘小時的數值為1
  499. write_ds(6,1); //初始化時鐘星期的數值為1
  500. write_ds(7,1); //初始化時鐘日的數值為1
  501. write_ds(8,1); //初始化時鐘月的數值為1
  502. write_ds(9,0); //初始化時鐘年的數值為0
  503. }
  504. /*------------
  505. ? 初始化程序
  506. ------------*/
  507. void init()
  508. {
  509. uchar i;
  510. dula=0;         //關段鎖存器(不讓數碼管顯示)
  511. wela=0;    //關位鎖存器
  512. lcden=0;
  513. write_com(0x38); //設置16*2顯示,5*7點陣,8位數據接口(LCD初始化設置)
  514. write_com(0x0c);  //設置開顯示,不顯示光標(LCD初始化設置)
  515. write_com(0x06);  //寫一個字符后地址指針自動加一(LCD初始化設置)
  516. write_com(0x01);  //顯示清零,數據指針清零(LCD初始化設置)
  517. write_com(0x80);  //將數據指針定位到第一行第一字處
  518. for(i=0;i<16;i++)
  519. {
  520.   write_date(table1[i]);  //將字符串1寫入液晶
  521. }  
  522. write_com(0x80+0x40);  //將數據指針定位到第2行第1字處
  523. for(i=0;i<16;i++)
  524. {
  525.    write_date(table2[i]);  //將字符串2寫入液晶
  526. }
  527. set_time();  //初始化時鐘
  528. }
  529. void main()
  530. {
  531. init();  //調用初始化子程序
  532. while(1)
  533. {
  534.   keyscan();
  535.   if(flag1==0)  //當標志位flag1等于0時,才從DS12C887中讀取數據并送去液晶顯示
  536.   {
  537.    miao=read_ds(0);  //從DS12C887中讀取秒的值
  538.    write_sfm(7,miao);  //將秒值送去液晶顯示
  539.    fen=read_ds(0x02);  //從DS12C887中讀取分的值
  540.    write_sfm(4,fen);  //將分值送去液晶顯示
  541.    shi=read_ds(0x04);  //從DS12C887中讀取小時的值
  542.    write_sfm(1,shi);  //將小時送去液晶顯示
  543.    nian=read_ds(0x09);  //從DS12C887中讀取年的值
  544.    write_nyr(3,nian);  //將年值送去液晶顯示
  545.    yue=read_ds(0x08);  //從DS12C887中讀取月份的值
  546.    write_nyr(6,yue);  //將月份送去液晶顯示
  547.    ri=read_ds(0x07);  //從DS12C887中讀取日的值
  548.    temp1=day_num(nian,yue);  //讀取當月的天數值
  549.    if(ri>temp1)  //判斷DS12C887中的天數值是否大于當月應有的天數,如大于則將天數值置1,如有需要請重新設置
  550.     ri=1;
  551.    write_nyr(9,ri);  //將日值送去液晶顯示
  552.    xingqi=read_ds(0x06);  //從DS12C887中讀取星期的值
  553.    write_xq(xingqi);  //將星期送去液晶顯示
  554.   }
  555. }
  556. }
復制代碼


protues仿真文件.zip

17.25 KB, 下載次數: 50

評分

參與人數 5黑幣 +30 收起 理由
JACKLI + 8 淡定
yy6133312 + 5 很給力!
heyanrog + 10 贊一個!
2017_fpga + 2 絕世好帖!
4651516 + 5 絕世好帖!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂2 踩
回復

使用道具 舉報

來自 2#
ID:195496 發表于 2022-11-9 19:56 | 只看該作者
今天無聊,把這個文件下載看了一下,也沒有什么問題啊,就是時間秒不走,唉,PDF文檔,也沒有找到原因,DS1302有下個控制位,可以控制啟停,這個芯片上沒有啊。找個一樣的仿真文件對比,沒有什么明確原因,程序比對也是一模一樣的,折騰到最后,發現是仿真圖上的總線沒有加上標號,只標了AD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7,在時鐘芯片一端沒有標上總線標識,放置網絡標簽AD[0..7],奇跡出現了,秒開始走了,哈哈哈哈,今天這一天真是掉進一個大坑了

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:190344 發表于 2017-4-18 18:25 | 只看該作者
這是仿真圖,仿真時時間不隨秒增加

1.png (22.84 KB, 下載次數: 149)

1.png
回復

使用道具 舉報

地板
ID:190959 發表于 2017-4-18 19:51 | 只看該作者
可能是程序出錯
回復

使用道具 舉報

5#
ID:190344 發表于 2017-4-18 21:00 | 只看該作者
4651516 發表于 2017-4-18 19:51
可能是程序出錯

那具體是哪里出錯了呢
回復

使用道具 舉報

6#
ID:111634 發表于 2017-4-18 23:26 | 只看該作者
本帖最后由 zl2168 于 2017-4-18 23:46 編輯

這么長的程序,不會有人看的。不懂的人,看了等于白看;懂的人,有看的時間,自己已經編好了一個。
實例91 具有校正功能的時鐘1302LCD1602顯示)
Proteus仿真,確認有效。
實例91 帶校正時鐘1302(LCD1602顯示).rar (52.68 KB, 下載次數: 36)
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1,書中電路和程序設計有詳細說明,程序語句條條有注解。






回復

使用道具 舉報

7#
ID:190344 發表于 2017-4-19 10:31 | 只看該作者
zl2168 發表于 2017-4-18 23:26
這么長的程序,不會有人看的。不懂的人,看了等于白看;懂的人,有看的時間,自己已經編好了一個。
實例91 ...

我下載過這個,沒有C語言主程序,想在里面加點其他程序就沒法加了
回復

使用道具 舉報

8#
ID:189227 發表于 2017-4-21 10:33 | 只看該作者
適當修改參數,可能是晶振的問題
回復

使用道具 舉報

9#
ID:111634 發表于 2017-4-21 17:20 | 只看該作者
ly1509608456 發表于 2017-4-19 10:31
我下載過這個,沒有C語言主程序,想在里面加點其他程序就沒法加了

仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
回復

使用道具 舉報

10#
ID:206309 發表于 2017-5-31 11:55 | 只看該作者
看下晶振
回復

使用道具 舉報

11#
ID:140489 發表于 2017-9-20 12:09 | 只看該作者
DS12C887數據總線上要添加網絡標號AD[0..7],仿真才行,不加網絡標號就等于沒和單片機連接,仿真肯定不行的
回復

使用道具 舉報

12#
ID:139284 發表于 2018-3-23 18:29 | 只看該作者
求一個HEX文件
回復

使用道具 舉報

13#
ID:111634 發表于 2018-3-23 21:47 | 只看該作者

上例的HEX文件免費下載
回復

使用道具 舉報

14#
ID:82765 發表于 2018-3-23 23:26 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

15#
ID:296177 發表于 2018-3-23 23:41 | 只看該作者
厲害了
回復

使用道具 舉報

16#
ID:434205 發表于 2018-11-27 14:58 | 只看該作者
小姐姐,謝謝你的程序和仿真文件,就是為何壓縮包里不附上源程序的hex文件呢?
回復

使用道具 舉報

17#
ID:434205 發表于 2018-11-27 15:05 | 只看該作者
ly1509608456 發表于 2017-4-19 10:31
我下載過這個,沒有C語言主程序,想在里面加點其他程序就沒法加了

小姐姐,你學習單片機有多久了啊,我有很多問題想向你請教啊!
回復

使用道具 舉報

18#
ID:434205 發表于 2018-11-27 15:09 | 只看該作者
zl2168 發表于 2017-4-18 23:26
這么長的程序,不會有人看的。不懂的人,看了等于白看;懂的人,有看的時間,自己已經編好了一個。
實例91 ...

這本書好像我有唉,是書上實例91對吧
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美性猛交 | 欧美成年黄网站色视频 | 小川阿佐美pgd-606在线 | 欧美一区二区在线 | 精久久久 | 国产xxxx在线 | 日本在线综合 | 中文在线一区二区 | 免费久久99精品国产婷婷六月 | 国产激情在线看 | 久草在线中文888 | 在线国产中文字幕 | 日本中出视频 | 亚洲视频中文字幕 | 天天射天天干 | 97精品久久 | 国产成人免费网站 | 99精品电影 | 91在线视频观看免费 | 国产人免费人成免费视频 | 日韩爱爱网 | 久久久精品一区二区三区 | 亚洲成人福利视频 | 国产精品爱久久久久久久 | 国产福利在线 | 日韩三级免费观看 | 午夜在线视频一区二区三区 | 羞羞视频免费观看 | 国产一区二区影院 | 国产成人精品免费 | 91视频在线看 | 91精品国产综合久久久动漫日韩 | 成人av播放| 欧美二区在线 | 国产成人久久精品一区二区三区 | 天天躁日日躁狠狠躁2018小说 | 亚洲高清视频一区 | 亚洲天堂精品一区 | 欧美一区二区三区四区五区无卡码 | 亚洲精品在线91 | 777zyz色资源站在线观看 |