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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)初學(xué)者一枚,編寫(xiě)的簡(jiǎn)易時(shí)間鬧鐘程序,不可調(diào)日期。望有大神指點(diǎn)指點(diǎn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:709387 發(fā)表于 2020-3-19 17:00 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. # include <reg52.h>
  2. #define  uchar unsigned char
  3. #define  uint  unsigned int

  4. sbit rs = P3^5;
  5. sbit en = P3^4;
  6. sbit rw = P3^6;
  7. sbit we = P2^7;
  8. sbit du = P2^7;
  9. sbit S2 = P3^0;
  10. sbit S3 = P3^1;
  11. sbit S4 = P3^2;
  12. sbit S5 = P3^3;
  13. sbit fm = P2^3;
  14. sbit led = P1^3;

  15. uchar count, S2num, tian;
  16. uchar sec = 55,        min = 33, hour = 16;

  17. uchar code table[] = "   2020-03-19";
  18. uchar code table1[] = "  16:33:55  MJW";

  19. void delay(uint z)                   //延時(shí)函數(shù)
  20. {
  21.         uint x, y;
  22.         for(x = z; x > 0;x --)
  23.         for (y = 110; y > 0; y --);
  24. }

  25. void write_com(uchar com)     //寫(xiě)命令函數(shù)
  26. {
  27.         rs = 0;
  28.         P0 = com;
  29.         delay(5);
  30.         en = 1;
  31.         delay(5);
  32.         en = 0;
  33. }

  34. void write_dat(uchar date)     //寫(xiě)數(shù)據(jù)函數(shù)
  35. {
  36.         rs = 1;
  37.         P0 = date;
  38.         delay(5);
  39.         en = 1;
  40.         delay(5);
  41.         en = 0;
  42. }

  43. void init()                                        //初始化函數(shù)
  44. {
  45.         uchar num;
  46.         rw =0;
  47.         en = 0;
  48.         write_com(0x38);
  49.         write_com(0x0c);
  50.         write_com(0x06);
  51.         write_com(0x01);
  52.         write_com(0x80);
  53.         for(num = 0; num < 13; num ++)        
  54.         write_dat(table[num]);
  55.         write_com(0x80 + 0x40);
  56.         for(num = 0; num < 15; num ++)        
  57.         write_dat(table1[num]);
  58.         TMOD = 0x01;
  59.         TH0 = (65536 - 50000) / 256;//再次裝定時(shí)器初值
  60.         TL0 = (65536 - 50000) % 256;
  61.         EA = 1;
  62.         ET0 = 1;
  63.         TR0 = 1;
  64. }

  65. void timer0() interrupt 1                        //定時(shí)器函數(shù)
  66. {
  67.         TH0 = (65536 - 50000) / 256;//再次裝定時(shí)器初值
  68.         TL0 = (65536 - 50000) % 256;
  69.         count ++;
  70. }

  71. void write_sfm(uchar add, uchar date)          //時(shí)分秒函數(shù)
  72. {
  73.         uchar shi, ge;
  74.         shi = date / 10;
  75.         ge = date % 10;
  76.         write_com(0x80 + 0x40 + add);  //顯示的位置
  77.         write_dat(0x30 + shi);
  78.         write_dat(0x30 + ge);
  79. }

  80. void naozhong()                          //   蜂鳴器/鬧鐘函數(shù)
  81. {
  82.         if(hour == 18)                 //設(shè)置鬧鐘時(shí)間:時(shí)
  83.         {        
  84.                 if(min == 30)     //設(shè)置鬧鐘時(shí)間:分
  85.                 {        
  86.                         if(sec == 0) //設(shè)置鬧鐘時(shí)間:秒        
  87.                         fm = 0;           //0打開(kāi)蜂鳴器,1關(guān)閉蜂鳴器
  88.                 }
  89.         }
  90.         if(S5 == 0)
  91.         {
  92.                 delay(5);                        
  93.                 if(S5 == 0)
  94.                         fm = 1;                 //按下S5停止蜂鳴器
  95.         }
  96. }

  97. void Key()                        //按鍵函數(shù)
  98. {
  99.         if(S2 == 0)                                 //按下按鍵
  100.         {
  101.                 delay(5);                         //軟件消抖
  102.                 if(S2 == 0)                         //確認(rèn)按下
  103.                  {
  104.                          S2num ++;                 //按鍵次數(shù)增加                                            
  105.                         while(!S2);                 //松開(kāi)按鍵
  106.                         TR0 = 0;                 //關(guān)閉定時(shí)器
  107.                         write_com(0x0f); //打開(kāi)光標(biāo)且閃爍
  108.                         if(S2num == 1)               
  109.                                 write_com(0x80 + 0x40 + 9);        //修改時(shí)間秒數(shù)
  110.                         if(S2num == 2)        
  111.                                 write_com(0x80 + 0x40 + 6);        //修改時(shí)間分鐘數(shù)
  112.                         if(S2num == 3)        
  113.                                 write_com(0x80 + 0x40 + 3);        //修改時(shí)間小時(shí)數(shù)
  114.                         if(S2num == 4)        
  115.                                 write_com(0x80 + 12);            //修改日期天數(shù)
  116.                         if(S2num == 5)        
  117.                                 write_com(0x80 + 9);                //修改日期月份
  118.                         if(S2num == 6)        
  119.                                 write_com(0x80 + 6);                //修改日期年份
  120.                         if(S2num == 7)
  121.                         {        
  122.                                 S2num = 0;                 //按鍵次數(shù)清零
  123.                                 write_com(0x0c); //關(guān)閉光標(biāo)且停止閃爍
  124.                                 TR0 = 1;                 //打開(kāi)定時(shí)器
  125.                         }   
  126.                 }
  127.         }
  128.         if(S2num != 0)                         //按下修改按鍵,增加和減少按鍵才有效
  129.         {
  130.                 if(S3 == 0)                         //增加鍵按下
  131.                 {
  132.                         delay(5);                //軟件消抖
  133.                         if(S3 == 0)
  134.                         {
  135.                                 while(!S3);         //確定按鍵按下
  136.                                 if(S2num == 1)
  137.                                 {
  138.                                         sec ++;
  139.                                         if(sec == 60)
  140.                                         sec = 0;
  141.                                         write_sfm(8, sec);
  142.                                         write_com(0x80 + 0x40 + 9);
  143.                                 }
  144.                                 if(S2num == 2)
  145.                                 {
  146.                                         min ++;
  147.                                         if(min == 60)
  148.                                         min = 0;
  149.                                         write_sfm(5, min);
  150.                                         write_com(0x80 + 0x40 + 6);
  151.                                 }
  152.                                 if(S2num == 3)
  153.                                 {
  154.                                         hour ++;
  155.                                         if(hour == 24)
  156.                                         hour = 0;
  157.                                         write_sfm(2, hour);
  158.                                         write_com(0x80 + 0x40 + 3);               
  159.                              }
  160.                      }
  161.             }
  162.                  if(S4 == 0)                        //減少鍵按下
  163.                  {
  164.                         delay(5);
  165.                         if(S4 == 0)
  166.                         {
  167.                                 while(!S4);                 //確定按鍵按下
  168.                                 if(S2num == 1)
  169.                                 {
  170.                                         sec --;
  171.                                         if(sec == -1)
  172.                                         sec = 59;
  173.                                         write_sfm(8, sec);
  174.                                         write_com(0x80 + 0x40 + 9);
  175.                                 }
  176.                                 if(S2num == 2)
  177.                                 {
  178.                                         min --;
  179.                                         if(min == -1)
  180.                                         min = 59;
  181.                                         write_sfm(5, min);
  182.                                         write_com(0x80 + 0x40 + 6);
  183.                                 }
  184.                                 if(S2num == 3)
  185.                                 {
  186.                                         hour --;
  187.                                         if(hour == -1)
  188.                                         hour = 23;
  189.                                         write_sfm(2, hour);
  190.                                         write_com(0x80 + 0x40 + 3);               
  191.                             }
  192.                     }
  193.                }
  194.           }
  195. }

  196. void main()                        //主函數(shù)
  197. {
  198.         init();        
  199.         while(1)
  200.         {        
  201.                 Key();         //插入按鍵函數(shù)
  202.                 naozhong();                   //插入鬧鐘函數(shù)        
  203.                 if(count == 18)         //定時(shí)1秒
  204.                 {
  205.                         count = 0;
  206.                         led = ~led;
  207.                         sec ++;
  208.                         if(sec == 60)
  209.                         {
  210.                                 sec = 0;                                          
  211.                                 min ++;                                
  212.                                 if(min == 60)
  213.                                 {
  214.                                         min = 0;
  215.                                         hour ++;
  216.                                         if(hour == 24)
  217.                                         {
  218.                                                 hour = 0;
  219.                                         }
  220.                                         write_sfm(2, hour);          //小時(shí)送回LED屏幕顯示
  221.                                 }
  222.                                 write_sfm(5, min);                //分鐘送回LED屏幕顯示
  223.                          }
  224.                         write_sfm(8, sec);                  //秒送回LED屏幕顯示                                   
  225.                 }            
  226.         }
  227. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:584814 發(fā)表于 2020-3-20 08:06 | 只看該作者
抄程序沒(méi)問(wèn)題,不清楚就加注釋?zhuān)P(guān)鍵是上機(jī)調(diào)試。以上是個(gè)人建議。
從程序來(lái)看段拉位拉用的是同一口而且莫名其妙;1602用的是四線但指令是八線的......
回復(fù)

使用道具 舉報(bào)

板凳
ID:372579 發(fā)表于 2020-3-20 10:06 來(lái)自手機(jī) | 只看該作者
這個(gè)建議參考一下郭師傅的那個(gè)教程
回復(fù)

使用道具 舉報(bào)

地板
ID:709387 發(fā)表于 2020-3-21 18:52 | 只看該作者
man1234567 發(fā)表于 2020-3-20 08:06
抄程序沒(méi)問(wèn)題,不清楚就加注釋?zhuān)P(guān)鍵是上機(jī)調(diào)試。以上是個(gè)人建議。
從程序來(lái)看段拉位拉用的是同一口而且莫 ...

都說(shuō)了初學(xué),最開(kāi)始確實(shí)是跟著教程編寫(xiě),但是自己也修改了很多,對(duì)于段選位選這個(gè)我很抱歉,不知道怎么打錯(cuò)了;至于你說(shuō)的1602,我用的獨(dú)立鍵盤(pán)控制修改,加減,中斷鬧鐘,且用的板子是STC89C52的;后續(xù)我自己也進(jìn)一步的修改了,能修改日期,時(shí)間,鬧鐘;并且每一天日期都能自己增加
回復(fù)

使用道具 舉報(bào)

5#
ID:709387 發(fā)表于 2020-3-21 18:53 | 只看該作者
aide51 發(fā)表于 2020-3-20 10:06
這個(gè)建議參考一下郭師傅的那個(gè)教程

確實(shí)是按照郭天祥的教程編寫(xiě),但是自己有修改好吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久吹潮 | 高清视频一区二区三区 | 欧美日韩国产在线 | 国产一级一片免费播放 | 日韩中文字幕在线观看视频 | 日韩在线观看 | 日韩中文字幕在线观看 | 国产高清在线精品一区二区三区 | 国产精品一区二区三区在线 | 日韩一区二区三区精品 | 欧美极品一区二区 | 国产精品美女久久久久久久网站 | 亚洲国产aⅴ精品 | 亚洲精品视频在线观看免费 | av 一区二区三区 | 欧美久操网| 国产在线成人 | 成人精品鲁一区一区二区 | 国产精品久久久久久久岛一牛影视 | 午夜日韩 | 国产免费国产 | 看一级毛片视频 | 国产亚洲精品精品国产亚洲综合 | 日韩av一区在线观看 | 日日操夜夜操天天操 | 欧美成人一区二区三区 | 在线观看亚洲专区 | 91黄色免费看 | 日韩一区二区三区在线观看视频 | 91色视频在线观看 | 国产一级免费在线观看 | 91久久| www.亚洲 | 黑色丝袜三级在线播放 | 黑人巨大精品欧美一区二区免费 | 99久久婷婷 | 91精品国产一区二区三区 | 丝袜 亚洲 欧美 日韩 综合 | 国产精品视频播放 | 亚洲精品美女 | 国产91视频一区二区 |