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

標題: 單片機ds1302萬年歷proteus仿真及代碼 帶鬧鐘農歷加減按 選擇 設置按鍵 [打印本頁]

作者: 51黑ele    時間: 2016-4-26 22:40
標題: 單片機ds1302萬年歷proteus仿真及代碼 帶鬧鐘農歷加減按 選擇 設置按鍵



單片機萬年歷的仿真電路圖用1602液晶顯示

單片機萬年歷程序帶proteus仿真文件下載:
單片機ds1302萬年歷仿真 帶鬧鐘農歷加減按 選擇 設置按鍵.rar (499.05 KB, 下載次數: 1072)


用51單片機和ds1302時鐘芯片制作,這個萬年歷是我見過的功能最全的單片機萬年歷,帶鬧鐘農歷加減按 選擇 設置按鍵等常見功能。


主程序預覽(完整版本的程序請下載附件):
  1. #include <reg52.h>                 //調用單片機頭文件
  2. #define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
  3. #define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535
  4. #include "eeprom52.h"
  5. #include "nongli.h"
  6. #include "intrins.h"

  7. bit flag_200ms ;
  8. bit flag_100ms ;
  9. sbit beep = P3^7;          //蜂鳴器定義
  10. bit flag_beep_en;
  11. uint clock_value;     //用作鬧鐘用的

  12. sbit dq   = P3^1;          //18b20 IO口的定義


  13. uint temperature ;    //溫度變量
  14. uchar flag_nl;        //農歷 陽歷顯示標志位


  15. uchar menu_1,menu_2;



  16. uchar key_time,flag_value;      //用做連加的中間變量
  17. bit key_500ms  ;
  18. uchar n_nian,n_yue,n_ri;                //農歷顯示的函數



  19. #include "ds1302.h"
  20. #include "lcd1602.h"



  21. /******************把數據保存到單片機內部eeprom中******************/
  22. void write_eeprom()
  23. {
  24.         SectorErase(0x2000);
  25.         byte_write(0x2000, fen1);
  26.         byte_write(0x2001, shi1);
  27.         byte_write(0x2002, open1);
  28.         byte_write(0x2058, a_a);       
  29. }

  30. /******************把數據從單片機內部eeprom中讀出來*****************/
  31. void read_eeprom()
  32. {
  33.         fen1  = byte_read(0x2000);
  34.         shi1  = byte_read(0x2001);
  35.         open1  = byte_read(0x2002);
  36.         a_a      = byte_read(0x2058);
  37. }

  38. /**************開機自檢eeprom初始化*****************/
  39. void init_eeprom()
  40. {
  41.         read_eeprom();                //先讀
  42.         if(a_a != 1)                //新的單片機初始單片機內問eeprom
  43.         {
  44.                 fen1  = 3;
  45.                 shi1  = 8;
  46.                 open1  = 1;
  47.                 a_a = 1;
  48.                 write_eeprom();           //保存數據
  49.         }       
  50. }

  51. /***********************18b20初始化函數*****************************/
  52. void init_18b20()
  53. {
  54.         bit q;
  55.         dq = 1;                                //把總線拿高
  56.         delay_uint(1);            //15us
  57.         dq = 0;                                //給復位脈沖
  58.         delay_uint(80);                //750us
  59.         dq = 1;                                //把總線拿高 等待
  60.         delay_uint(10);                //110us
  61.         q = dq;                                //讀取18b20初始化信號
  62.         delay_uint(20);                //200us
  63.         dq = 1;                                //把總線拿高 釋放總線
  64. }

  65. /*************寫18b20內的數據***************/
  66. void write_18b20(uchar dat)
  67. {
  68.         uchar i;
  69.         for(i=0;i<8;i++)
  70.         {                                         //寫數據是低位開始
  71.                 dq = 0;                         //把總線拿低寫時間隙開始
  72.                 dq = dat & 0x01; //向18b20總線寫數據了
  73.                 delay_uint(5);         // 60us
  74.                 dq = 1;                         //釋放總線
  75.                 dat >>= 1;
  76.         }       
  77. }

  78. /*************讀取18b20內的數據***************/
  79. uchar read_18b20()
  80. {
  81.         uchar i,value;
  82.         for(i=0;i<8;i++)
  83.         {
  84.                 dq = 0;                         //把總線拿低讀時間隙開始
  85.                 value >>= 1;         //讀數據是低位開始
  86.                 dq = 1;                         //釋放總線
  87.                 if(dq == 1)                 //開始讀寫數據
  88.                         value |= 0x80;
  89.                 delay_uint(5);         //60us        讀一個時間隙最少要保持60us的時間
  90.         }
  91.         return value;                 //返回數據
  92. }

  93. /*************讀取溫度的值 讀出來的是小數***************/
  94. uint read_temp()
  95. {
  96.         uint value;
  97.         uchar low;                           //在讀取溫度的時候如果中斷的太頻繁了,就應該把中斷給關了,否則會影響到18b20的時序
  98.         init_18b20();                   //初始化18b20
  99.         write_18b20(0xcc);           //跳過64位ROM
  100.         write_18b20(0x44);           //啟動一次溫度轉換命令
  101.         delay_uint(50);                   //500us

  102.         init_18b20();                   //初始化18b20
  103.        
  104.         write_18b20(0xcc);           //跳過64位ROM
  105.         write_18b20(0xbe);           //發出讀取暫存器命令
  106.        
  107.         EA = 0;
  108.         low = read_18b20();           //讀溫度低字節
  109.         value = read_18b20();  //讀溫度高字節
  110.         EA = 1;
  111.         value <<= 8;                   //把溫度的高位左移8位
  112.         value |= low;                   //把讀出的溫度低位放到value的低八位中
  113.         value *= 0.625;               //轉換到溫度值 小數
  114.         return value;                   //返回讀出的溫度 帶小數
  115. }



  116. /******************1ms 延時函數*******************/
  117. void delay_1ms(uint q)
  118. {
  119.         uint i,j;
  120.         for(i=0;i<q;i++)
  121.                 for(j=0;j<120;j++);
  122. }

  123. /******************寫星期函數*******************/
  124. void write_week(uchar hang,uchar add,uchar week)//寫星期函數
  125. {
  126.         if(hang==1)   
  127.                 write_com(0x80+add);
  128.         else
  129.                 write_com(0x80+0x40+add);          
  130.         switch(week)
  131.         {
  132.                 case 1:write_data('M');//星期數為1時,顯示
  133.                            write_data('O');
  134.                            write_data('N');
  135.                            break;
  136.           
  137.                 case 2:write_data('T');//星期數據為2時顯示
  138.                            write_data('U');
  139.                            write_data('E');
  140.                            break;
  141.                
  142.                 case 3:write_data('W');//星期數據為3時顯示
  143.                            write_data('E');
  144.                            write_data('D');
  145.                            break;
  146.                
  147.                 case 4:write_data('T');//星期數據為4是顯示
  148.                            write_data('H');
  149.                            write_data('U');
  150.                            break;
  151.                
  152.                 case 5:write_data('F');//星期數據為5時顯示
  153.                            write_data('R');
  154.                            write_data('I');
  155.                            break;
  156.                
  157.                 case 6:write_data('S');//星期數據為6時顯示
  158.                            write_data('T');
  159.                            write_data('A');
  160.                            break;
  161.                
  162.                 case 7:write_data('S');//星期數據為7時顯示
  163.                            write_data('U');
  164.                            write_data('N');
  165.                            break;
  166.         }
  167. }

  168. /*************時鐘顯示***************/
  169. void init_1602_ds1302()
  170. {
  171.         write_sfm2_ds1302(1,1,shi);                   //顯示時
  172.         write_sfm2_ds1302(1,4,fen);                   //顯示分
  173.         write_sfm2_ds1302(1,7,miao);           //顯示秒
  174.         write_week(2,12,week);
  175.   //write_sfm1(1,14,week);                           //顯示星期
  176.         write_sfm3_18B20(1,11,temperature);           //顯示溫度
  177.         if(flag_nl == 0)  //顯示陽歷
  178.         {
  179.                 write_sfm2_ds1302(2,2,nian);   //顯示年
  180.                 write_sfm2_ds1302(2,5,yue);           //顯示月       
  181.                 write_sfm2_ds1302(2,8,ri);           //顯示日        
  182.         }
  183.         else                          //顯示農歷
  184.         {
  185.                 write_sfm2_ds1302(2,2,n_nian);        //顯示年
  186.                 write_sfm2_ds1302(2,5,n_yue);        //顯示月       
  187.                 write_sfm2_ds1302(2,8,n_ri);        //顯示日
  188.                
  189.         }
  190.        

  191.        
  192.                
  193. }                                                                          

  194. /*************定時器0初始化程序***************/
  195. void init_time0()          
  196. {
  197.         EA   = 1;                   //開總中斷
  198.         TMOD = 0X01;          //定時器0、工作方式1
  199.         ET0  = 1;                  //開定時器0中斷
  200.         TR0  = 1;                  //允許定時器0定時
  201. }

  202. /*************鬧鐘報警函數***************/
  203. void menu_dis()
  204. {
  205.         static uchar mm,value;
  206.         if(flag_100ms == 1)                  //100ms執行一次
  207.         {
  208.                 flag_100ms = 0;
  209.                 if(open1 == 1)        //如果鬧鐘打開
  210.                 {
  211.                         if((miao == 0) && (fen == fen1) && (shi == shi1))
  212.                         {               
  213.                                 flag_beep_en = 1;        //有報警 打開蜂鳴器響的標志位                               
  214.                         }               
  215.                         if(flag_beep_en == 1)        //鬧鐘以被打開
  216.                         {
  217.                                 clock_value++;
  218.                                 if(clock_value <= 30)         
  219.                                         beep = ~beep;           //蜂鳴器叫3秒
  220.                                 else if(clock_value > 30)
  221.                                 {
  222.                                         beep = 1;                    //蜂鳴器停1秒
  223.                                         if(clock_value > 40)
  224.                                         {
  225.                                                 clock_value = 0;

  226.                                         }
  227.                                 }
  228.                                 //  1 分鐘后自動關閉鬧鐘
  229.                                 value ++;
  230.                                 if(value >= 10)
  231.                                 {
  232.                                         value = 0;
  233.                                         mm++;
  234.                                         if(mm >= 60)
  235.                                         {
  236.                                                 mm = 0;
  237.                                                 flag_beep_en = 0;
  238.                                                 beep = 1;       
  239.                                         }
  240.                                 }                                       
  241.                         }
  242.                 }       
  243.         }
  244. }


  245. /********************獨立按鍵程序*****************/
  246. uchar key_can;         //按鍵值

  247. void key()         //獨立按鍵程序
  248. {
  249.         static uchar key_new;
  250.         key_can = 20;                   //按鍵值還原
  251.         P3 |= 0x78;                     //對應的按鍵IO口輸出為1
  252.         if((P3 & 0x78) != 0x78)                //按鍵按下
  253.         {
  254.                 delay_1ms(1);                     //按鍵消抖動
  255.                 if(((P3 & 0x78) != 0x78) && (key_new == 1))
  256.                 {                                                //確認是按鍵按下
  257.                         key_new = 0;
  258.                         switch(P3 & 0x78)
  259.                         {
  260.                                 case 0x70:  key_can = 4;  break;         //得到按鍵值
  261.                                 case 0x68:  key_can = 3;  break;         //得到按鍵值
  262.                                 case 0x58:  key_can = 2;  break;         //得到按鍵值
  263.                                 case 0x38:  key_can = 1;  break;         //得到按鍵值
  264.                         }
  265. //                        write_sfm2(1,0,key_can);                                 //顯示按鍵值
  266.                 }                       
  267.         }
  268.         else
  269.                 key_new = 1;       
  270. }


  271. /**********************設置函數************************/
  272. void key_with()
  273. {
  274.         if(key_can == 1)        //設置鍵
  275.         {
  276.                 menu_1++;
  277.                 if(menu_1 == 1)          //設置時間
  278.                 {
  279.                         menu_2 = 1;
  280.                         write_string(1,0,"    :  :    W:  ");                       
  281.                         write_string(2,0," 20  -  -       ");       
  282.                 }
  283.                 if(menu_1 == 2)          //設置鬧鐘
  284.                 {
  285.                         menu_2 = 1;
  286.                         write_string(1,0,"   set clock    ");                       
  287.                         write_string(2,0,"    Y  00:00      ");       
  288.                 }
  289.                 if(menu_1 > 2)    //回到正常顯示
  290.                 {
  291.                         menu_1 = 0;
  292.                         write_guanbiao(1,2,0);         //關閉光標
  293.                         init_1602_dis_csf();      //初始化液晶顯示               
  294.                 }
  295.         }
  296.         if(key_can == 2)        //選擇鍵
  297.         {
  298.                 flag_200ms = 1;
  299.                 if(menu_1 == 1)                  //設置時間
  300.                 {
  301.                         menu_2 ++;
  302.                         if(menu_2 > 7)
  303.                                 menu_2 = 1;
  304.                 }
  305.                 if(menu_1 == 2)                 //設置鬧鐘
  306.                 {
  307.                         menu_2 ++;
  308.                         if(menu_2 > 3)
  309.                                 menu_2 = 1;                               
  310.                 }
  311.         }
  312.         if(menu_1 == 1)
  313.         {
  314.                 if(menu_2 == 1)                  //設置時
  315.                 {
  316.                         if(key_can == 3)        //加
  317.                         {
  318.                                 shi+=0x01;
  319.                                 if((shi & 0x0f) >= 0x0a)
  320.                                         shi = (shi & 0xf0) + 0x10;           ///***shi & 0xf0低四位清零,(shi & 0xf0) + 0x10向高位進1(高四位加1)***///                                if(shi >= 0x24)
  321.                                         shi = 0;
  322.                         }               
  323.                         if(key_can == 4)        //減
  324.                         {
  325.                                 if(shi == 0x00)          
  326.                                         shi = 0x24;
  327.                                 if((shi & 0x0f) == 0x00)  
  328.                                         shi = (shi | 0x0a) - 0x10;         ///***如果個位為0,高四位減1***///
  329.                                 shi -- ;
  330.                         }                                         
  331.                 }
  332.                 if(menu_2 == 2)                  //設置分
  333.                 {
  334.                         if(key_can == 3)        //加
  335.                         {
  336.                                 fen+=0x01;
  337.                                 if((fen & 0x0f) >= 0x0a)
  338.                                         fen = (fen & 0xf0) + 0x10;
  339.                                 if(fen >= 0x60)
  340.                                         fen = 0;
  341.                         }               
  342.                         if(key_can == 4)        //減          
  343.                         {
  344.                                 if(fen == 0x00)
  345.                                         fen = 0x5a;
  346.                                 if((fen & 0x0f) == 0x00)
  347.                                         fen = (fen | 0x0a) - 0x10;
  348.                                 fen -- ;
  349.                         }       
  350.                 }
  351.                 if(menu_2 == 3)                  //設置秒
  352.                 {
  353.                         if(key_can == 3)        //加
  354.                         {
  355.                                 miao+=0x01;
  356.                                 if((miao & 0x0f) >= 0x0a)
  357.                                         miao = (miao & 0xf0) + 0x10;
  358.                                 if(miao >= 0x60)
  359.                                         miao = 0;
  360.                         }       
  361.                         if(key_can == 4)        //減          
  362.                         {
  363.                                 if(miao == 0x00)
  364.                                         miao = 0x5a;
  365.                                 if((miao & 0x0f) == 0x00)
  366.                                         miao = (miao | 0x0a) - 0x10;
  367.                                 miao -- ;                       
  368.                         }
  369.                 }
  370.                 if(menu_2 == 4)                  //設置星期
  371.                 {
  372.                         if(key_can == 3)        //加
  373.                         {
  374.                             week+=0x01;
  375.                                 if((week & 0x0f) >= 0x0a)
  376.                                         week = (week & 0xf0) + 0x10;
  377.                                 if(week >= 0x08)
  378.                                         week = 1;
  379.                         }               
  380.                         if(key_can == 4)        //減          
  381.                         {
  382.                                 if(week == 0x01)
  383.                                         week = 0x08;
  384.                                 if((week & 0x0f) == 0x00)
  385.                                         week = (week | 0x0a) - 0x10;
  386.                                 week -- ;
  387.                         }       
  388.                 }
  389.                 if(menu_2 == 5)                  //設置年
  390.                 {
  391.                         if(key_can == 3)        //加
  392.                         {
  393.                             nian+=0x01;
  394.                                 if((nian & 0x0f) >= 0x0a)
  395.                                         nian = (nian & 0xf0) + 0x10;
  396.                                 if(nian >= 0x9a)
  397.                                         nian = 1;
  398.                         }               
  399.                         if(key_can == 4)        //減          
  400.                         {
  401.                                 if(nian == 0x01)
  402.                                         nian = 0x9a;
  403.                                 if((nian & 0x0f) == 0x00)
  404.                                         nian = (nian | 0x0a) - 0x10;
  405.                                 nian -- ;               
  406.                         }       
  407.                 }
  408.                 if(menu_2 == 6)                  //設置月
  409.                 {
  410.                         if(key_can == 3)        //加
  411.                         {
  412.                             yue+=0x01;
  413.                                 if((yue & 0x0f) >= 0x0a)
  414.                                         yue = (yue & 0xf0) + 0x10;
  415.                                 if(yue >= 0x13)
  416.                                         yue = 1;
  417.                         }               
  418.                         if(key_can == 4)        //減          
  419.                         {
  420.                                 if(yue == 0x01)
  421.                                         yue = 0x13;
  422.                                 if((yue & 0x0f) == 0x00)
  423.                                         yue = (yue | 0x0a) - 0x10;
  424.                                 yue -- ;                                       
  425.                         }       
  426.                 }
  427.                 if(menu_2 == 7)                  //設置日
  428.                 {
  429.                         if(key_can == 3)        //加
  430.                         {
  431.                     ri+=0x01;
  432.                         if((ri & 0x0f) >= 0x0a)
  433.                                 ri = (ri & 0xf0) + 0x10;
  434.                         if(ri >= 0x32)
  435.                                 ri = 0;                       
  436.                         }               
  437.                         if(key_can == 4)        //減          
  438.                         {
  439.                                 if(ri == 0x01)
  440.                                         ri = 0x32;
  441.                                 if((ri & 0x0f) == 0x00)
  442.                                         ri = (ri | 0x0a) - 0x10;
  443.                                 ri -- ;                       
  444.                         }       
  445.                 }
  446.                 write_sfm2_ds1302(1,2,shi);           ///***第一行第二字節開始顯示時,從十位開始寫***///
  447.                 write_sfm2_ds1302(1,5,fen);           //顯示分
  448.                 write_sfm2_ds1302(1,8,miao);           //顯示秒
  449.                 write_sfm1(1,14,week);           //顯示星期                                       
  450.                 write_sfm2_ds1302(2,3,nian);           //顯示年
  451.                 write_sfm2_ds1302(2,6,yue);           //顯示月
  452.                 write_sfm2_ds1302(2,9,ri);           //顯示日
  453.   ///***write_sfm3_18B20(2,12,temperature);           //顯示溫度        ***///       
  454.                 switch(menu_2)           // 光標顯示
  455.                 {
  456.                         case 1:  write_guanbiao(1,2,1);  break;
  457.                         case 2:  write_guanbiao(1,5,1);  break;
  458.                         case 3:  write_guanbiao(1,8,1);  break;
  459.                         case 4:  write_guanbiao(1,14,1);  break;
  460.                         case 5:  write_guanbiao(2,3,1);  break;
  461.                         case 6:  write_guanbiao(2,6,1);  break;
  462.                         case 7:  write_guanbiao(2,9,1);  break;
  463.                 }
  464.                 write_time();           //把時間寫進去
  465.         }       
  466. /***************設置鬧鐘*********************/
  467.         if(menu_1 == 2)
  468.         {
  469.                 if(menu_2 == 1)                  //設置鬧鐘開關
  470.                 {
  471.                         if(key_can == 3)       
  472.                         {
  473.                                 open1 = 1;          //鬧鐘開
  474.                         }               
  475.                         if(key_can == 4)       
  476.                         {
  477.                                 open1 = 0;          //鬧鐘關
  478.                         }                                         
  479.                 }
  480.                 if(menu_2 == 2)                  //設置鬧鐘時
  481.                 {
  482.                         if(key_can == 3)        //加
  483.                         {
  484.                             shi1+=0x01;
  485.                                 if((shi1 & 0x0f) >= 0x0a)
  486.                                         shi1 = (shi1 & 0xf0) + 0x10;
  487.                                 if(shi1 >= 0x24)
  488.                                         shi1 = 0;
  489.                         }               
  490.                         if(key_can == 4)        //減          
  491.                         {
  492.                                 if(shi1 == 0x00)
  493.                                         shi1 = 0x5a;
  494.                                 if((shi1 & 0x0f) == 0x00)
  495.                                         shi1 = (shi1 | 0x0a) - 0x10;
  496.                                 shi1 -- ;
  497.                         }       
  498.                 }
  499.                 if(menu_2 == 3)                  //設置秒
  500.                 {
  501.                         if(key_can == 3)        //加
  502.                         {
  503.                             fen1+=0x01;
  504.                                 if((fen1 & 0x0f) >= 0x0a)
  505.                                         fen1 = (fen1 & 0xf0) + 0x10;
  506.                                 if(fen1 >= 0x60)
  507.                                         fen1 = 0;
  508.                         }       
  509.                         if(key_can == 4)        //減          
  510.                         {
  511.                                 if(fen1 == 0x00)
  512.                                         fen1 = 0x5a;
  513.                                 if((fen1 & 0x0f) == 0x00)
  514.                                         fen1 = (fen1 | 0x0a) - 0x10;
  515.                                 fen1 -- ;                       
  516.                         }
  517.                 }
  518.                 if(open1 == 1)
  519.                         write_string(2,4,"Y");       
  520.                 else
  521.                         write_string(2,4,"N");       
  522.                 write_sfm2_ds1302(2,7,shi1);           //顯示鬧鐘時
  523.                 write_sfm2_ds1302(2,10,fen1);           //顯示鬧鐘分
  524.                 switch(menu_2)           // 光標顯示
  525.                 {
  526.                         case 1:  write_guanbiao(2,4,1);  break;
  527.                         case 2:  write_guanbiao(2,7,1);  break;
  528.                         case 3:  write_guanbiao(2,10,1);  break;
  529.                 }       
  530.                 write_eeprom();     //保存鬧鐘時間
  531.         }                       
  532. }

  533. /*****************主函數********************/
  534. void main()
  535. {       
  536.         beep = 0;                                //開機叫一聲   
  537.         delay_1ms(150);
  538.         P0 = P1 = P2 = P3 = 0xff;                //單片機IO口初始化為1
  539.         init_time0();                 //初始化定時器
  540.         init_ds1302();                 //ds1302初始化
  541.         init_1602();                 //lcd1602初始化
  542.         init_1602_dis_csf(); //lcd1602初始化顯示
  543.         init_eeprom();       //開始初始化保存的數據
  544.         temperature = read_temp();        //先讀出溫度的值
  545.         delay_1ms(650);
  546.         temperature = read_temp();        //先讀出溫度的值
  547.         while(1)
  548.         {
  549.                 key();                         //按鍵程序
  550.                 if(key_can < 10)
  551.                 {
  552.                         if(flag_beep_en == 0)  //只有鬧鐘關了的時候才能進入設置
  553.                                 key_with();       
  554.                         else
  555.                         {
  556.                                 flag_beep_en = 0;         //按下任意鍵可關閉鬧鐘
  557.                                 beep = 1;
  558.                                 clock_value = 0;
  559.                                 read_time();
  560.                         }
  561.                         if(menu_1 == 0)
  562.                         {
  563.                                 if(key_can == 4)  //減鍵
  564.                                 {
  565.                                         flag_nl = ~flag_nl;                  //切換農歷和陽歷的顯示標志位       
  566.                                         if(flag_nl == 0)
  567.                                                 write_string(2,0,"2016");
  568.                                         else        
  569.                                                 write_string(2,0,"N ");
  570.                                 }
  571.                         }
  572.                 }
  573.                
  574.                 if(flag_200ms == 1)
  575.                 {       
  576.                         flag_200ms = 0;
  577.                         if(menu_1 == 0)
  578.                         {
  579.                                 read_time();                  //讀時間
  580.                                 temperature = read_temp();        //先讀出溫度的值
  581.                                 init_1602_ds1302();   //顯示時鐘
  582.                         }
  583.                 }
  584.                 menu_dis();           //鬧鐘報警函數
  585.                 delay_1ms(1);
  586.         }
  587. }

  588. /**************定時器0中斷程序*****************/
  589. void time0() interrupt 1
  590. {                         
  591.         static uchar value;
  592.         TH0 = 0X3C;
  593.         TL0 = 0XB0;           //50ms
  594.         value ++;          
  595.         if((value % 2) == 0)         //100ms  
  596.                 flag_100ms = 1;         
  597.         if(value >= 6)                         //200ms
  598.         {
  599.                 value = 0;
  600.                 flag_200ms = 1;
  601.         }
  602. }
復制代碼




作者: looksave    時間: 2016-4-28 11:17
多謝分享
作者: looksave    時間: 2016-4-28 11:23
好東西啊,多謝資源共享
作者: walt740    時間: 2016-6-21 09:00

 好東西啊,多謝資源共享
作者: chweji123    時間: 2016-8-8 10:07
好東西,謝分享
作者: 黎濼依    時間: 2016-11-17 11:03
如果用矩陣鍵盤的話是不是只要設置按鍵部分就可以了?
作者: qq2180280    時間: 2016-11-25 15:53
感謝分享。。。。。。。。。。。。。
作者: b1016882414    時間: 2016-11-26 14:02
感謝分享。。。。。。。。。。。。。
作者: 夢之翼    時間: 2016-12-27 23:14
謝謝分享,一生平安
作者: sdfhlzs    時間: 2017-1-14 15:19
感謝樓主分享,馬上下載.
作者: lllhhhlll    時間: 2017-3-4 15:06
贊!!!正是我要找的資源
作者: ya123chiang    時間: 2017-3-4 17:24
謝謝分享.................
作者: ya123chiang    時間: 2017-3-4 20:14
謝謝...........................................
作者: he_he    時間: 2017-4-2 19:46
很不錯的資源,值得學習,贊!
作者: xiuyueyuan2013    時間: 2017-4-2 21:09
感謝樓主分享
作者: 曉天狼星10    時間: 2017-4-4 22:58
感謝分享
作者: wodedzw    時間: 2017-5-3 23:17
找了好久,終于找到一個符合要求的功能了。雖然多了一個功能,多謝樓主了。
作者: tomgay    時間: 2017-5-4 19:50
正是我要找的資源
作者: x1041273289    時間: 2017-6-24 17:21
親,在嗎?
作者: ttxnine    時間: 2017-7-20 10:57
好東西啊,多謝資源共享
作者: 彬Lsl    時間: 2017-7-24 17:06
if(menu_2 == 2)                  //設置分
                {
                        if(key_can == 3)        //加
                        {
                                fen+=0x01;
                                if((fen & 0x0f) >= 0x0a)
                                        fen = (fen & 0xf0) + 0x10;
                                if(fen >= 0x60)
                                        fen = 0;
                        }               
                        if(key_can == 4)        //減          
                        {
                                if(fen == 0x00)
                                        fen = 0x5a;
                                if((fen & 0x0f) == 0x00)
                                        fen = (fen | 0x0a) - 0x10;
                                fen -- ;
                        }       
                }


請問一下樓主,if(fen == 0x00)
                                        fen = 0x5a;
這個為啥是fen = 0x5a;
作者: 123hfh    時間: 2017-9-21 18:18
感謝,很有用
作者: besideyou11    時間: 2017-12-12 13:19
請問鬧鐘能設多少組,想找個能設多組鬧鐘的找了好久
作者: 2719881771    時間: 2018-4-8 21:02
cool! 正好需要
作者: 2719881771    時間: 2018-4-8 21:03
多謝謝
作者: 龍001    時間: 2018-4-17 13:40
我想要
作者: 111111118544    時間: 2018-4-20 14:56
多謝分享
作者: 小白帆    時間: 2018-4-25 07:53
樓主,為什么你的溫度程序部分,沒有正負溫度的判斷和顯示處理??這樣好像實用性太窄了點。能否加上這部分呢?
作者: liqingyong    時間: 2018-4-27 11:10
樓主你好剛學單片機,不懂得你這個程序完整嗎?我找不到程序里DS1302數據接口和單片機通訊接口定義。是不是這個程序還要自己去定義接口。
作者: 51夜雨    時間: 2018-5-1 22:36
學習了學習了,正好需要,非常感謝樓主分享
作者: 606之子    時間: 2018-5-23 16:24
鬧鐘不可用
作者: 大佬別這么撈啊    時間: 2018-5-30 08:06
好東西啊,謝謝大佬分享
作者: liupam    時間: 2018-6-5 19:03
我也要下載來學習下,謝謝!!!!
作者: wulingqing    時間: 2018-9-9 08:10
好東西啊,多謝資源共享
作者: 杗go    時間: 2018-10-16 00:27
感謝分享
作者: 大剩Msiter    時間: 2018-11-2 09:48
謝謝分享

作者: cyril2002    時間: 2018-11-2 13:47
很喜歡!下來學習一下!
作者: 734821717    時間: 2018-11-13 18:18
非常棒!共同學習。
作者: 豬大123456    時間: 2018-11-15 21:12
贊一個
作者: xx14615    時間: 2018-11-16 18:43
厲害了
作者: 一只楊九鬼    時間: 2018-11-21 15:25
很給力,棒棒的。
作者: wz686    時間: 2018-12-12 15:39
請問樓主這個你做實物了嗎?為啥我按這個做出來的什么也不顯示?是我沒焊好么
作者: 3289018760    時間: 2019-3-25 01:39
樓主大佬可以給發下模塊函數的點c文件么
作者: LemonSea丶    時間: 2019-3-30 21:02
為什么我做好調節完時間后無法保存數據,一直處于初始化狀態?
作者: lzh66i    時間: 2019-6-3 11:32
有張圖里的蜂鳴器電源沒連上,而且星期不會隨日期走

作者: xiehua    時間: 2019-6-3 15:48
可不可以設置多組鬧鈴,不同時間的鬧鈴?如果可以應該怎么改
作者: 小林笙    時間: 2019-6-5 09:06
吧主 這個鬧鐘好像掉電不能保存.......
作者: 1947932971    時間: 2019-6-5 10:50
很給力!
作者: 1947932971    時間: 2019-6-5 10:51
很給了,大佬!
作者: 253564059096    時間: 2019-6-8 17:19
謝謝,樓主分享知識。
作者: Lixun1357    時間: 2019-6-8 21:55
好東西,先學習一下
作者: nsush    時間: 2019-6-9 00:55
程序編譯t通過,有三個函數定義了,但沒有調用。另外編譯的文件(89C52)的HEX比你附件帶的.HEX大了1K。不知道什么情況。
我用的是官網下的 5.27.10.
作者: Lixun1357    時間: 2019-6-9 21:41
很好,學習了,很棒的程序
作者: byxiao    時間: 2019-6-12 10:33
 好東西啊,多謝資源共享
作者: xiaoyezi2255    時間: 2019-6-12 15:05
謝謝分享
作者: 1008622    時間: 2019-6-12 18:41
感謝分享  很有用
作者: wcq123456    時間: 2019-6-17 10:58
很厲害,謝謝,贊一個
作者: abhsndd    時間: 2019-6-17 15:17
程序好像有錯誤!

360截圖20190617151409761.jpg (60.43 KB, 下載次數: 393)

360截圖20190617151409761.jpg

作者: upgreat    時間: 2019-6-25 13:20
謝謝樓主分享
作者: Myosotis111    時間: 2019-6-26 15:42
                       給力      
作者: 564571362    時間: 2019-9-5 13:36
感謝分享
作者: sdd117    時間: 2019-12-26 16:20
xieixe,真的太棒了

作者: Jades·L    時間: 2020-2-1 21:28
謝謝教程
作者: 夏一    時間: 2020-2-19 17:22
好東西,贊贊贊
作者: 1458422819    時間: 2020-6-16 12:16
請問一下這里用到了中斷,串口和通信了嗎?
作者: zzm0521    時間: 2020-7-5 11:14
鬧鐘可定時么?有整點報時功能么
作者: hao18    時間: 2020-7-10 14:03
這個很好的,我想下來試試




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 美女高潮网站 | 久久精品成人一区 | 国产精品久久久久久久免费观看 | 一区二区免费在线观看 | 成人精品国产免费网站 | 欧美日韩综合视频 | 久久久久久久久久久福利观看 | 国产japanhdxxxx麻豆 | 欧美九九 | 欧美另类日韩 | 天天操天天射天天舔 | 欧美黄色绿像 | 国产片侵犯亲女视频播放 | 国产精品区一区二区三区 | 久久噜 | 久久久久国产一区二区三区四区 | 久久久久1| 久久国产婷婷国产香蕉 | 一级女毛片 | 精品一区国产 | 在线播放中文字幕 | 国内精品视频在线观看 | 午夜精品一区二区三区在线视频 | 91xx在线观看 | 欧美国产精品一区二区三区 | 亚洲成av人片在线观看 | 日日操日日舔 | 97av在线| 97影院2| 韩日一区二区三区 | 男女羞羞视频在线看 | 欧美理论在线观看 | 国产成人精品亚洲日本在线观看 | 欧美一区二区三区 | 色综合一区二区 | 91精品国产一区二区三区 | 中文字幕av网站 | 亚洲毛片 | 91精品国产91久久久久福利 | 成人日批视频 | 亚洲国产黄 |