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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2800|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

用1602LCD設(shè)計的可調(diào)式單片機(jī)電子鐘顯示不正確

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:250133 發(fā)表于 2017-11-16 19:19 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit rs=P2^0; //定義液晶顯示器控制端口
  5. sbit rw=P2^1;
  6. sbit en=P2^2;
  7. sbit s1=P1^0; //定義按鍵控制
  8. sbit s2=P1^1;
  9. sbit s3=P1^2;
  10. sbit s4=P1^3;
  11. uchar shi,fen,miao,ri,yue,nin;
  12. uchar code table[]={"   dianzizhong"};
  13. uchar code table1[]={"    00:00:57"};
  14. uchar num,num1,count;
  15. uint i,sh,ge,s,g;
  16. void delay(uchar time)   //延時
  17. {
  18.    uint j;
  19.    for(;time>0;time--)
  20.    for(j=0;j<125;j++);
  21.   }

  22. void write_com(uchar com)    //寫指令函數(shù)
  23. {
  24.   en=0;
  25.   rs=0;
  26.   delay(5);
  27.   P0=com;
  28.   delay(5);
  29.    en=1;
  30.   delay(5);
  31.   en=0;
  32. }
  33. void write_data(uchar dat)   //寫數(shù)據(jù)函數(shù)
  34. {
  35.    en=0;
  36.   rs=1;
  37.   delay(5);
  38.    P0=dat;
  39.   delay(5);
  40.    en=1;
  41.   delay(5);
  42.   en=0;
  43. }
  44. void init()   //初始化
  45. {
  46.      en=0;
  47.      rw=0;
  48.     write_com(0x38);//設(shè)置16X2顯示,5X7點(diǎn)陣,8位數(shù)據(jù)接口
  49.     write_com(0x0c);//設(shè)置開顯示,不顯示光標(biāo)
  50.     write_com(0x06);//寫一個字符后地址指針加1
  51.     write_com(0x01);//顯示清零,數(shù)據(jù)指針清零

  52. for(i=0;i<(sizeof(table)-1);i++)   //第一行寫
  53. {
  54.     write_com(0x80+i);
  55.     write_data(table[i]);
  56. }


  57. for(i=0;i<(sizeof(table1)-1);i++) //第二行寫
  58. {
  59.        write_com(0x80+0x40+i);
  60.     write_data(table1[i]);
  61. }
  62. miao=56;
  63. fen=59;
  64. shi=23;
  65. TMOD=0x01;    //time0作為定時器工作在模式1下
  66. TH0=(65536-50000)/256;
  67. TL0=(65536-50000)%6;
  68. EA=1;  //開啟總中斷
  69. ET0=1;   //開啟time0中斷
  70. TR0=1;   //啟動time0
  71. }
  72. void write_sfm(uchar add,uchar num)  //時分秒函數(shù)
  73. {
  74.     sh=num/10;   //分離出十位
  75.     ge=num;    //分離出個位
  76.    write_com(0x80+0x40+add); //第二行數(shù)據(jù)指針位置調(diào)整
  77.    write_data(0x30+sh);   //更改顯示數(shù)據(jù)的十位
  78.    write_data(0x30+ge);  //更改顯示數(shù)據(jù)的個位
  79. }

  80. void timer0() interrupt 1 //time0中斷
  81. {
  82.    TH0=(65536-50000)/256;  //重裝初始值
  83.    TL0=(65536-50000)%6;
  84.    count++;   
  85. if(count==20)  //20次到則滿一秒
  86.   {
  87.      count=0;
  88.      miao++;
  89.    if(miao==60)
  90.     {
  91.         miao=0;
  92.         fen++;
  93.       if(fen==60)
  94.          {
  95.              fen=0;
  96.               shi++;
  97.      if(shi==24)
  98.                 {
  99.              shi=0;     
  100.         }
  101.           write_sfm(4,shi);      
  102.           }
  103.      write_sfm(7,fen);
  104.      }   
  105.    write_sfm(10,miao);
  106.   }
  107. }
  108. void keyscan()    //鍵盤掃描
  109. {  if(s1==0) //按下S1      
  110.     {
  111.       delay(5);
  112.      if(s1==0)
  113.        {
  114.              num1++;   
  115.          while(!s1);//等待釋放         
  116.             if(num1==1)
  117.               {
  118.                   TR0=0;
  119.           write_com(0x0e);  //顯示光標(biāo),不閃爍
  120.       write_com(0x80+0x40+0x0b);  //數(shù)據(jù)指針移動到秒的個位處
  121.              write_com(0x0f);//顯示光標(biāo),閃爍
  122.                 }
  123.                 if(num1==2)
  124.                   {
  125.           write_com(0x80+0x40+0x08);  //數(shù)據(jù)指針移到到分鐘的個位處
  126.                    }
  127.                             if(num1==3)
  128.                               {        
  129.                  write_com(0x80+0x40+0x05);  //數(shù)據(jù)指針移到到小時的個位處
  130.                                }
  131.                                     if(num1==4)
  132.                                        {
  133.                                          num1=0;    //清零
  134.                                       write_com(0x0c);  //重新顯示
  135.                                        TR0=1;   //重新啟動計時   
  136.                                         }
  137.         }
  138.     }

  139.            if(num1!=0)   //按下S2則選擇時/分/秒加1
  140.           {
  141.              if(s2==0)
  142.               {
  143.                 delay(5);
  144.                  if(s2==0)
  145.                   {
  146.                     while(!s2);

  147.                if(num1==1)   
  148.                       {
  149.                   delay(20);
  150.                          miao++;
  151.                        if(miao==60)  
  152.                       miao=0;
  153.                        write_sfm(10,miao);            
  154.         write_com(0x80+0x40+0x0a);
  155.                        }
  156.                            if(num1==2)
  157.                             {
  158.                               fen++;
  159.                              if(fen==60)
  160.                              fen=0;
  161.                           write_sfm(7,fen);            
  162.                      write_com(0x80+0x40+0x07);
  163.                                }
  164.                                   if(num1==3)
  165.                                     {
  166.                                      shi++;
  167.                                     if(shi==24)
  168.                                      shi=0;
  169.                                   write_sfm(4,shi);                       
  170.                          write_com(0x80+0x40+0x04);
  171.                                        }
  172.                     }
  173.               }
  174.           }

  175.      if(num1!=0)
  176.                if(s3==0) //按下S3則選擇時/分/秒 減1
  177.                {
  178.                   delay(5);
  179.                   if(s3==0)
  180.                   {
  181.                   while(!s3);
  182.                      if(num1==1)
  183.                       {
  184.                      delay(20);
  185.                       miao--;
  186.                          if(miao==-1)
  187.                        miao=59;
  188.               write_sfm(10,miao);      
  189.              write_com(0x80+0x40+0x0a);
  190.                        }
  191.                          if(num1==2)
  192.                           {
  193.                                fen--;
  194.                              if(fen==-1)
  195.                            fen=59;
  196.                write_sfm(7,fen);   
  197.                write_com(0x80+0x40+0x07);
  198.                            }
  199.                               if(num1==3)
  200.                                {
  201.                                 shi--;
  202.                                 if(shi==-1)
  203.                                 shi=23;
  204.                              write_sfm(4,shi);         
  205.                write_com(0x80+0x40+0x04);
  206.                                }
  207.                   }
  208.                }

  209.                               if(num1!=0)
  210.             if(s4==0)   //確定按鍵
  211.              {
  212.                                      delay(5);
  213.                                        if(s4==0)
  214.                                          {
  215.                                          while(!s4);
  216.             num1=0;    //清零
  217.                                            write_com(0x0c);  //重新顯示
  218.                                             TR0=1;   //重新啟動計時   
  219.             }
  220.           }

  221. }
  222. void main()
  223. {
  224.     init();
  225.      while(1)
  226.      {
  227.        keyscan();
  228.      }
  229. }

復(fù)制代碼





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

使用道具 舉報

沙發(fā)
ID:250133 發(fā)表于 2017-11-16 19:19 | 只看該作者
哪里有錯誤?求指教
回復(fù)

使用道具 舉報

板凳
ID:111634 發(fā)表于 2017-11-17 08:57 | 只看該作者
本帖最后由 zl2168 于 2017-11-17 08:58 編輯

給你介紹一個正確有效的案例,自己對照查錯吧!
實例91  具有校正功能的時鐘1302LCD1602顯示)
實例91 帶校正時鐘1302(LCD1602顯示).rar (52.68 KB, 下載次數(shù): 31)

先Proteus仿真,確認(rèn)有效。以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計實例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,書中電路和程序設(shè)計有詳細(xì)說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。
回復(fù)

使用道具 舉報

地板
ID:344391 發(fā)表于 2018-6-4 09:17 | 只看該作者
我也需要,樓主改好了嗎?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99久久国产综合精品麻豆 | 久久精品日产第一区二区三区 | 日本中出视频 | 成人在线免费观看视频 | 国产成人精品午夜 | 久久久成人免费视频 | 欧美aaaaaaaa| 国产99免费 | 国产视频2021 | 成人免费一区二区三区视频网站 | 久久婷婷色 | 久久久久国产 | 久久国| 免费在线观看成人 | 欧美精品一区二区三区在线 | 天天插天天狠天天透 | 一区二区三区免费观看 | 九九热在线视频免费观看 | 人人澡人人射 | 国产精品视频偷伦精品视频 | 免费国产成人av | 日韩毛片免费看 | 一区二区三区在线观看视频 | 自拍亚洲| 91高清免费观看 | 性福视频在线观看 | 91免费电影 | 欧美一级一区 | 欧美视频精品 | 亚洲精品久久视频 | 成人午夜在线 | 精品亚洲一区二区三区四区五区高 | 日本欧美在线视频 | 成人小视频在线观看 | aaa天堂 | 亚洲综合久久精品 | hitomi一区二区三区精品 | 一级aaaaaa毛片免费同男同女 | 亚洲欧美日韩精品久久亚洲区 | 久久99精品久久久久久 | 二区不卡 |