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

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

QQ登錄

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

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

修改進(jìn)化的萬(wàn)年歷程序 簡(jiǎn)單易懂

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:709387 發(fā)表于 2020-3-21 17:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
上一個(gè)版本的不能修改日期,只能修改時(shí)間;至此,讓它進(jìn)化;
可惜,天道不仁,以萬(wàn)物為芻狗;進(jìn)化一半,失敗了;只能顯示時(shí)間,鬧鐘,日期;能修改時(shí)間,鬧鐘,日期;能中斷修改;
還差顯示星期并且能修改,且能隨著日期的增加,自動(dòng)變化;日期已經(jīng)能自動(dòng)增加;
鬧鐘也只是長(zhǎng)響,不是間歇響;唉,可惜可惜

單片機(jī)源程序如下:
  1. #include <reg52.h>

  2. #define  uchar unsigned char
  3. #define  uint  unsigned int                //宏定義
  4. /********************************
  5.         腳位定義
  6. ********************************/
  7. sbit rs = P3^5;               //寫(xiě)命令/數(shù)據(jù)端
  8. sbit en = P3^4;               //使能
  9. sbit rw = P3^6;               //led1602讀命令/數(shù)據(jù)端
  10. sbit we = P2^7;               //數(shù)碼管位選
  11. sbit du = P2^7;               //數(shù)碼管段選
  12. sbit S2 = P3^0;            
  13. sbit S3 = P3^1;
  14. sbit S4 = P3^2;
  15. sbit S5 = P3^3;               //獨(dú)立鍵盤(pán)四個(gè)按鍵腳位
  16. sbit fm = P2^3;               //蜂鳴器腳位

  17. uchar count, S2num;    //定時(shí)器,修改按鍵次數(shù),
  18. uchar hour = 7,        //時(shí)
  19.        min = 59,       //分
  20.        sec = 55;           //秒         時(shí)間
  21. uint nian = 2020,      //年
  22.        yue = 3,        //月
  23.         ri = 19;       //日                日期
  24. uchar clock,
  25.      hour1 = 8,        //時(shí)
  26.       min1 = 0;               //分         鬧鐘
  27. //                  星期一↓ 二↓ 三↓ 四↓ 五↓ 六↓ 日↓
  28. uchar X[] = {"MON,TUE,MED,THU,FRI,SAT,SUN"};//星期循環(huán)
  29. uchar code table[] =  "2020-03-19";                    //注意:修改這里必須先修改↑ uchar ↑,↓↓↓↓
  30. uchar code table1[] = "07:59:55  C08:00";   //       否則,時(shí)間不會(huì)跟著這里走
  31. /********************************************
  32.                         延時(shí)函數(shù)          
  33. ********************************************/
  34. void delay(uint z)//長(zhǎng)延時(shí)函數(shù)                  
  35. {
  36.         uint x, y;
  37.         for(x = z; x > 0;x --)
  38.         for (y = 110; y > 0; y --);
  39. }
  40. /********************************************
  41.                         寫(xiě)命令函數(shù)          
  42. ********************************************/
  43. void write_com(uchar com)     
  44. {
  45.         rs = 0;
  46.         P0 = com;
  47.         delay(5);
  48.         en = 1;
  49.         delay(5);
  50.         en = 0;
  51. }
  52. /********************************************
  53.                      寫(xiě)數(shù)據(jù)函數(shù)                  
  54. ********************************************/
  55. void write_dat(uchar dat)   
  56. {
  57.         rs = 1;
  58.         P0 = dat;
  59.         delay(5);
  60.         en = 1;
  61.         delay(5);
  62.         en = 0;
  63. }
  64. /********************************************
  65.                          初始化函數(shù)          
  66. ********************************************/
  67. void init()                                       
  68. {
  69.         uchar num;
  70.         rw =0;
  71.         en = 0;
  72.         write_com(0x38);
  73.         write_com(0x0c);
  74.         write_com(0x06);
  75.         write_com(0x01);
  76.         for(num = 0; num < 10; num ++)       
  77.         write_dat(table[num]);
  78.         write_com(0x80 + 0x40);
  79.         for(num = 0; num < 16; num ++)       
  80.         write_dat(table1[num]);
  81.         TMOD = 0x01;
  82.         TH0 = (65536 - 50000) / 256;     //裝定時(shí)器初值
  83.         TL0 = (65536 - 50000) % 256;
  84.         EA = 1;
  85.         ET0 = 1;
  86.         TR0 = 1;
  87. }
  88. /********************************************
  89.                           定時(shí)器函數(shù)          
  90. ********************************************/
  91. void timer0() interrupt 1                       
  92. {
  93.         TH0 = (65536 - 50000) / 256;//再次裝定時(shí)器初值
  94.         TL0 = (65536 - 50000) % 256;
  95.         count ++;
  96. }
  97. /********************************************
  98.                           時(shí)分秒 + 鬧鐘函數(shù)
  99. ********************************************/
  100. void write_sfm(uchar add, uchar date)         
  101. {
  102.         uchar shi, ge;
  103.         shi = date / 10;
  104.         ge = date % 10;
  105.         write_com(0x80 + 0x40 + add);  //時(shí)間 / 鬧鐘顯示的位置
  106.         write_dat(0x30 + shi);
  107.         write_dat(0x30 + ge);
  108. }
  109. /********************************************
  110.                            年月日函數(shù)
  111. ********************************************/
  112. void write_nyr(uint add, uint date)
  113. {                                           //這里不能用uchar,uchar數(shù)字最多只有255,顯示不全年份
  114.         uint qian, bai, shi, ge;
  115.         qian = date / 1000;
  116.         bai = date % 1000 / 100;
  117.         shi = date % 100 / 10;
  118.         ge = date % 10;       
  119.         write_com(0x80 + add);                   
  120.         if (add == 0)                                    //年顯示的位置
  121.         {
  122.                 write_dat(0x30 + qian);
  123.                 write_dat(0x30 + bai);      
  124.                 write_dat(0x30 + shi);
  125.                 write_dat(0x30 + ge);
  126.          }
  127.         if(add == 5)                                        //月顯示的位置
  128.         {                       
  129.                 write_dat(0x30 + shi);
  130.                 write_dat(0x30 + ge);
  131.         }
  132.         if(add == 8)                                    //日顯示的位置
  133.         {        
  134.                 write_dat(0x30 + shi);                         
  135.                 write_dat(0x30 + ge);
  136.         }
  137. }
  138. /********************************************
  139.                           星期函數(shù)
  140. ********************************************/
  141. void write_xq(uchar add, uchar date)         
  142. {
  143.         uchar ge;
  144.         ge = date % 10;
  145.         write_com(0x80 + add);                  //星期顯示的位置                       
  146.         write_dat(0x30 + ge);
  147. }
  148. /************************************************************
  149.                 日期時(shí)間自加函數(shù) + 插入的鬧鐘函數(shù)
  150. *************************************************************/
  151. void write_shijian()
  152. {
  153.         if(count == 20)                    //定時(shí)1秒
  154.         {
  155.                 count = 0;
  156.                 sec ++;
  157.                 if(sec == 60)
  158.                 {
  159.                         sec = 0;                                          
  160.                         min ++;                               
  161.                         if(min == 60)
  162.                         {
  163.                                 min = 0;
  164.                                 hour ++;
  165. /*******↓*****↓*****插入鬧鐘*****↓*****↓*******/
  166.                                 if(hour == hour1 & min == min1)         //當(dāng)時(shí)間‘時(shí)’‘分’==鬧鐘‘時(shí)’‘分’時(shí),蜂鳴器打開(kāi)
  167.                                 {
  168.                                         fm = 0;                                                 //fm = 0時(shí),蜂鳴器打開(kāi),fm = 1時(shí),蜂鳴器關(guān)閉
  169.                                 }
  170. /**********↑***↑***↑***↑***↑***↑***↑***********/
  171.                                 if(hour == 24)
  172.                                 {
  173.                                         hour = 0;
  174.                                         ri ++;
  175.                                         if(ri == 31)
  176.                                         {
  177.                                                 ri = 1;
  178.                                                 yue ++;
  179.                                                 if(yue == 13)
  180.                                                 {
  181.                                                         yue = 1;
  182.                                                         nian ++;
  183.                                                         if(nian == 2100)
  184.                                                         {
  185.                                                                 nian = 0;
  186.                                                                 yue = 0;
  187.                                                                 ri = 0;
  188.                                                                 hour = 0;
  189.                                                                 min = 0;
  190.                                                                 sec = 0;
  191.                                                         }
  192.                                                         write_nyr(0, nian);//年份送回LED屏幕顯示
  193.                                                 }
  194.                                                 write_nyr(5, yue);         //月份送回LED屏幕顯示
  195.                                         }
  196.                                         write_nyr(8, ri);     //天數(shù)送回LED屏幕顯示
  197.                                 }
  198.                                 write_sfm(0, hour);           //小時(shí)送回LED屏幕顯示
  199.                         }
  200.                         write_sfm(3, min);                //分鐘送回LED屏幕顯示
  201.                  }
  202.                 write_sfm(6, sec);                  //秒送回LED屏幕顯示                                  
  203.         }
  204. }
  205. /*****************函數(shù)聲明********************/
  206. void Key();
  207. /********************************************
  208.                            主函數(shù)
  209. ********************************************/
  210. void main()               
  211. {
  212.         init();               
  213.         while(1)
  214.         {                        
  215.         Key();                         //插入按鍵函數(shù)               
  216.         write_shijian();
  217.         }       
  218. }


  219. /********************************************
  220.                                   按鍵函數(shù)
  221. ********************************************/
  222. void Key()                      
  223. {
  224. /***************插入停止鬧鐘按鍵設(shè)置************/
  225.         if(fm == 0)                        //鬧鐘是撿來(lái)的,到處插入^_^
  226.         {
  227.                 if(S5 == 0)
  228.                 {
  229.                         delay(5);
  230.                         if(S5 == 0)
  231.                         fm = 1;
  232.                 }
  233.         }
  234. /***********修改日期 + 時(shí)間 + 鬧鐘按鍵設(shè)置************/
  235.         if(S2 == 0)                                                //按下修改按鍵
  236.         {
  237.                 delay(25);                                         //軟件消抖
  238.                 if(S2 == 0)                                        //確認(rèn)按下
  239.                  {
  240.                          S2num ++;                                //按鍵次數(shù)增加                                           
  241.                         while(!S2);                                //松開(kāi)按鍵
  242.                         TR0 = 0;                                //關(guān)閉定時(shí)器
  243.                         write_com(0x0f);                //打開(kāi)光標(biāo)且閃爍
  244.                         if(S2num == 1)               
  245.                                 write_com(0x80 + 0x40 + 7);        //修改時(shí)間秒針數(shù)
  246.                         if(S2num == 2)       
  247.                                 write_com(0x80 + 0x40 + 4);        //修改時(shí)間分鐘數(shù)
  248.                         if(S2num == 3)       
  249.                                 write_com(0x80 + 0x40 + 1);        //修改時(shí)間小時(shí)數(shù)
  250.                         if(S2num == 4)       
  251.                                 write_com(0x80 + 0X40 + 12);//修改鬧鐘小時(shí)數(shù)
  252.                         if(S2num == 5)       
  253.                                 write_com(0x80 + 0X40 + 15);//修改鬧鐘分鐘份
  254.                         if(S2num == 6)       
  255.                                 write_com(0x80 + 3);                //修改日期年份
  256.                         if(S2num == 7)       
  257.                                 write_com(0x80 + 6);                //修改日期月份
  258.                         if(S2num == 8)       
  259.                                 write_com(0x80 + 9);                //修改日期天數(shù)
  260.                         if(S2num == 9)
  261.                         {       
  262.                                 S2num = 0;                            //修改按鍵次數(shù)清零
  263.                                 write_com(0x0c);            //關(guān)閉光標(biāo)且停止閃爍
  264.                                 TR0 = 1;                            //打開(kāi)定時(shí)器
  265.                         }   
  266.                 }
  267.         }
  268. /*************增加日期 + 時(shí)間 + 鬧鐘按鍵設(shè)置**************/
  269.         if(S2num != 0)                                        //按下修改按鍵,取消修改、增加和減少按鍵才有效
  270.         {
  271.                 if(S5 == 0)                                        //取消修改按鍵(僅在S2按下有效)
  272.                 {                                         
  273.                         delay(25);
  274.                         if(S5 == 0)
  275.                         S2num = 0;                                //修改按鍵次數(shù)清零
  276.                            write_com(0x0c);                //關(guān)閉光標(biāo)且停止閃爍
  277.                         TR0 = 1;                                //打開(kāi)定時(shí)器
  278.                 }               
  279.                 if(S3 == 0)                                        //增加鍵按下
  280.                 {
  281.                         delay(25);                                  //軟件消抖
  282.                         if(S3 == 0)                 
  283.                         {
  284.                                 while(!S3);                        //確定按鍵按下
  285. /********************時(shí)間*************************/
  286.                                 if(S2num == 1)
  287.                                 {
  288.                                         sec ++;
  289.                                         if(sec == 60)
  290.                                         sec = 0;
  291.                                         write_sfm(6, sec);
  292.                                         write_com(0x80 + 0x40 + 7);           //秒
  293.                                 }
  294.                                 if(S2num == 2)
  295.                                 {
  296.                                         min ++;
  297.                                         if(min == 60)
  298.                                         min = 0;
  299.                                         write_sfm(3, min);
  300.                                         write_com(0x80 + 0x40 + 4);            //分
  301.                                 }
  302.                                 if(S2num == 3)
  303.                                 {
  304.                                         hour ++;
  305.                                         if(hour == 24)
  306.                                         hour = 0;
  307.                                         write_sfm(0, hour);
  308.                                         write_com(0x80 + 0x40 + 1);                 //時(shí)
  309.                              }
  310. /********************鬧鐘*************************/
  311.                                 if(S2num == 4)
  312.                                 {
  313.                                         hour1 ++;
  314.                                         if(hour1 == 24)
  315.                                         hour1 = 0;
  316.                                         write_sfm(11, hour1);
  317.                                         write_com(0x80 + 0x40 + 12);         //時(shí)
  318.                              }
  319.                                 if(S2num == 5)
  320.                                 {
  321.                                         min1 ++;
  322.                                         if(min1 == 60)
  323.                                         min1 = 0;
  324.                                         write_sfm(14, min1);
  325.                                         write_com(0x80 + 0x40 + 15);         //分
  326.                              }
  327. /********************日期*************************/
  328.                                 if(S2num == 6)
  329.                                 {
  330.                                         nian ++;
  331.                                         if(nian == 2101)
  332.                                         nian = 1999;
  333.                                         write_nyr(0, nian);
  334.                                         write_com(0x80 + 3);                      //年
  335.                              }
  336.                                 if(S2num == 7)
  337.                                 {
  338.                                         yue ++;
  339.                                         if(yue == 13)
  340.                                            yue = 1;
  341.                                         write_nyr(5, yue);
  342.                                         write_com(0x80 + 6);                      //月
  343.                              }
  344.                                 if(S2num == 8)
  345.                                 {
  346.                                         ri ++;
  347.                                         if(ri == 31)
  348.                                         ri = 1;
  349.                                         write_nyr(8, ri);
  350.                                         write_com(0x80 + 9);                       //日
  351.                              }
  352.                      }
  353.             }
  354. /***********減少日期 + 時(shí)間 + 鬧鐘按鍵設(shè)置******************/
  355.                  if(S4 == 0)                                               //減少鍵按下
  356.                  {
  357.                         delay(25);
  358.                         if(S4 == 0)
  359.                         {
  360.                                 while(!S4);                                        //確定按鍵按下
  361. /********************時(shí)間*************************/
  362.                                 if(S2num == 1)
  363.                                 {
  364.                                         sec --;
  365.                                         if(sec == -1)
  366.                                         sec = 59;
  367.                                         write_sfm(6, sec);
  368.                                         write_com(0x80 + 0x40 + 7);           //秒
  369.                                 }
  370.                                 if(S2num == 2)
  371.                                 {
  372.                                         min --;
  373.                                         if(min == -1)
  374.                                         min = 59;
  375.                                         write_sfm(3, min);
  376.                                         write_com(0x80 + 0x40 + 4);            //分
  377.                                 }
  378.                                 if(S2num == 3)
  379.                                 {
  380.                                         hour --;
  381.                                         if(hour == -1)
  382.                                         hour = 23;
  383.                                         write_sfm(0, hour);
  384.                                         write_com(0x80 + 0x40 + 1);                 //時(shí)
  385.                             }
  386. /********************鬧鐘*************************/
  387.                                 if(S2num == 4)
  388.                                 {
  389.                                         hour1 --;
  390.                                         if(hour1 == -1)
  391.                                         hour1 = 23;
  392.                                         write_sfm(11, hour1);
  393.                                         write_com(0x80 + 0x40 + 12);    //時(shí)
  394.                                 }
  395.                                 if(S2num == 5)
  396.                                 {
  397.                                         min1 --;
  398.                                         if(min1 == -1)
  399.                                         min1 = 59;
  400.                                         write_sfm(14, min1);
  401.                                         write_com(0x80 + 0x40 + 15);          //分
  402.                                 }
  403. /********************日期*************************/
  404.                                 if(S2num == 6)
  405.                                 {
  406.                                         nian --;
  407.                                         if(nian == 1998)
  408.                                         nian = 2100;
  409.                                         write_nyr(0, nian);
  410.                                         write_com(0x80 + 3);              //年       
  411.                              }
  412.                                 if(S2num == 7)
  413.                                 {
  414.                                         yue --;
  415.                                         if(yue == 0)
  416.                                         yue = 12;
  417.                                         write_nyr(5, yue);
  418.                                         write_com(0x80 + 6);                     //月       
  419.                              }
  420.                                 if(S2num == 8)
  421.                                 {
  422.                                         ri --;
  423.                                         if(ri == 0)
  424.                                         ri = 30;
  425.                                         write_nyr(8, ri);
  426.                                         write_com(0x80 + 9);                       //日
  427.                              }
  428.                     }
  429.                }
  430.           }
  431. }
復(fù)制代碼

以上資料51hei提供下載:
萬(wàn)年歷.rar (2.73 KB, 下載次數(shù): 7)


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久女 | 色免费看| 亚洲免费在线播放 | 日韩中文字幕在线观看 | 热re99久久精品国产99热 | 亚洲欧美国产毛片在线 | 亚洲一区二区三区免费观看 | 国产一级淫片a直接免费看 免费a网站 | 亚洲第一区国产精品 | 欧美成人精品在线 | 日本三级网站在线 | 精品粉嫩超白一线天av | 国产精品久久片 | 三级在线免费 | 国产中的精品av涩差av | 成人毛片网站 | 天天爱天天操 | av在线免费观看不卡 | 中文字幕在线免费视频 | 一区二区免费 | 国产欧美在线一区二区 | 欧美精品在线一区二区三区 | 91超碰在线观看 | 免费国产一区 | 亚洲精品久久久久中文字幕二区 | 亚洲欧美综合 | 孕妇一级毛片 | 一级全黄少妇性色生活免费看 | 人人99| 日韩欧美视频免费在线观看 | 成人影院午夜 | 欧美成人精品激情在线观看 | 精品一区二区三区四区 | 欧美激情一区二区三区 | 亚洲精品电影网在线观看 | 欧美日韩福利视频 | 日本成人久久 | 久久精片| 91在线精品一区二区 | 午夜精品一区二区三区在线观看 | 免费看大片bbbb欧美 |