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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機初學者一枚,編寫的簡易時間鬧鐘程序,不可調日期。望有大神指點指點

[復制鏈接]
跳轉到指定樓層
樓主
ID:709387 發表于 2020-3-19 17:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  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)                   //延時函數
  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)     //寫命令函數
  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)     //寫數據函數
  35. {
  36.         rs = 1;
  37.         P0 = date;
  38.         delay(5);
  39.         en = 1;
  40.         delay(5);
  41.         en = 0;
  42. }

  43. void init()                                        //初始化函數
  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;//再次裝定時器初值
  60.         TL0 = (65536 - 50000) % 256;
  61.         EA = 1;
  62.         ET0 = 1;
  63.         TR0 = 1;
  64. }

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

  71. void write_sfm(uchar add, uchar date)          //時分秒函數
  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()                          //   蜂鳴器/鬧鐘函數
  81. {
  82.         if(hour == 18)                 //設置鬧鐘時間:時
  83.         {        
  84.                 if(min == 30)     //設置鬧鐘時間:分
  85.                 {        
  86.                         if(sec == 0) //設置鬧鐘時間:秒        
  87.                         fm = 0;           //0打開蜂鳴器,1關閉蜂鳴器
  88.                 }
  89.         }
  90.         if(S5 == 0)
  91.         {
  92.                 delay(5);                        
  93.                 if(S5 == 0)
  94.                         fm = 1;                 //按下S5停止蜂鳴器
  95.         }
  96. }

  97. void Key()                        //按鍵函數
  98. {
  99.         if(S2 == 0)                                 //按下按鍵
  100.         {
  101.                 delay(5);                         //軟件消抖
  102.                 if(S2 == 0)                         //確認按下
  103.                  {
  104.                          S2num ++;                 //按鍵次數增加                                            
  105.                         while(!S2);                 //松開按鍵
  106.                         TR0 = 0;                 //關閉定時器
  107.                         write_com(0x0f); //打開光標且閃爍
  108.                         if(S2num == 1)               
  109.                                 write_com(0x80 + 0x40 + 9);        //修改時間秒數
  110.                         if(S2num == 2)        
  111.                                 write_com(0x80 + 0x40 + 6);        //修改時間分鐘數
  112.                         if(S2num == 3)        
  113.                                 write_com(0x80 + 0x40 + 3);        //修改時間小時數
  114.                         if(S2num == 4)        
  115.                                 write_com(0x80 + 12);            //修改日期天數
  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;                 //按鍵次數清零
  123.                                 write_com(0x0c); //關閉光標且停止閃爍
  124.                                 TR0 = 1;                 //打開定時器
  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()                        //主函數
  197. {
  198.         init();        
  199.         while(1)
  200.         {        
  201.                 Key();         //插入按鍵函數
  202.                 naozhong();                   //插入鬧鐘函數        
  203.                 if(count == 18)         //定時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);          //小時送回LED屏幕顯示
  221.                                 }
  222.                                 write_sfm(5, min);                //分鐘送回LED屏幕顯示
  223.                          }
  224.                         write_sfm(8, sec);                  //秒送回LED屏幕顯示                                   
  225.                 }            
  226.         }
  227. }
復制代碼


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

使用道具 舉報

沙發
ID:584814 發表于 2020-3-20 08:06 | 只看該作者
抄程序沒問題,不清楚就加注釋,關鍵是上機調試。以上是個人建議。
從程序來看段拉位拉用的是同一口而且莫名其妙;1602用的是四線但指令是八線的......
回復

使用道具 舉報

板凳
ID:372579 發表于 2020-3-20 10:06 來自手機 | 只看該作者
這個建議參考一下郭師傅的那個教程
回復

使用道具 舉報

地板
ID:709387 發表于 2020-3-21 18:52 | 只看該作者
man1234567 發表于 2020-3-20 08:06
抄程序沒問題,不清楚就加注釋,關鍵是上機調試。以上是個人建議。
從程序來看段拉位拉用的是同一口而且莫 ...

都說了初學,最開始確實是跟著教程編寫,但是自己也修改了很多,對于段選位選這個我很抱歉,不知道怎么打錯了;至于你說的1602,我用的獨立鍵盤控制修改,加減,中斷鬧鐘,且用的板子是STC89C52的;后續我自己也進一步的修改了,能修改日期,時間,鬧鐘;并且每一天日期都能自己增加
回復

使用道具 舉報

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

確實是按照郭天祥的教程編寫,但是自己有修改好吧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久高清 | 精品一区在线免费观看 | 91视视频在线观看入口直接观看 | 久久久久久91 | 色婷婷狠狠 | 玖玖在线精品 | 99亚洲精品 | 欧美国产日韩在线 | 国产精品污www在线观看 | 亚洲免费大片 | 久久久99精品免费观看 | 亚洲一区二区在线视频 | 国产精品一区在线 | 91大神在线资源观看无广告 | 日韩av黄色 | 国产成人久久精品一区二区三区 | 一级国产精品一级国产精品片 | 国产精品一区二区三区四区 | 国产精品99久久久久久久久久久久 | 久久久av| 久久综合av | 希岛爱理在线 | 性一交一乱一透一a级 | 国产超碰人人爽人人做人人爱 | 亚洲欧洲国产视频 | 国产成人久久精品一区二区三区 | 久草日韩 | av黄色在线| 国产国产精品久久久久 | 欧美在线观看一区二区 | 岛国午夜 | 欧美黑人国产人伦爽爽爽 | 激情五月婷婷综合 | 午夜电影福利 | 亚洲视频在线看 | 一区二区三区视频在线观看 | 激情一区二区三区 | 欧美不卡一区二区三区 | 日韩中文av在线 | 国产精品久久久久久久岛一牛影视 | 亚洲综合色丁香婷婷六月图片 |