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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機萬年歷仿真+程序

  [復制鏈接]
跳轉到指定樓層
樓主
最近剛學51單片機,自己做的,還有仿真圖,



  1. #include<reg52.h>
  2. #include "ds1302.h"
  3. #include "main.h"
  4. bit readtime_f;                                                //定義讀時間標志
  5. bit key_f = 0;
  6. bit readtemp_f = 0;key_fun_f = 0;
  7. sbit ADJTIME = P1^3;                                 //校準時間
  8. sbit SETALARM = P1^4;                                  //設置鬧鐘
  9. unsigned char key_value,key_select,key_fun = 0;
  10. unsigned int key_count = 0;
  11. SYSTEMTIME timer,timer1;

  12. void timer0_init()                                //T0初始化
  13. {
  14.         TMOD = 0x01;                                  //使用模式1,16位定時器
  15.         TH0 = 0X3C;
  16.         TL0 = 0XB0;
  17.         EA = 1;                                                  //總中斷打開
  18.         ET0 = 1;                                           //定時器中斷打開
  19.         TR0 = 1;                                                //定時器開關打開
  20. }

  21. void timer0_isr() interrupt 1
  22. {
  23.         static unsigned char counter = 0,counter1 = 0;
  24.         TH0 = 0X3C;
  25.         TL0 = 0XB0;
  26.         counter ++;
  27.         key_f = 1;
  28.         if(counter ==10)                                                 //500ms
  29.         {
  30.                 counter = 0;
  31.                 readtime_f = 1;                                           //讀時間標志位置1
  32.                 counter1 ++;
  33.                 if(counter1 ==2)                                        //5s讀一次溫度值
  34.                 {
  35.                         counter1 = 0;
  36.                         readtemp_f = 1;                                                 //讀溫度標志位置1
  37.                 }
  38.         }
  39. }

  40. void main()
  41. {
  42.         unsigned char readtemp;
  43.         lcd_initial();
  44.         timer0_init();
  45.         ds1302_init();
  46.         while(1)                                                                        //主循環
  47.         {
  48.                 if(readtemp_f&&!key_fun_f)//讀取溫度
  49.                 {
  50.                         readtemp_f = 0;
  51.                         readtemp = read_temperature();
  52.                         LCD_Write_Char(13,1,readtemp/10+'0');  //顯示溫度值
  53.                         LCD_Write_Char(14,1,readtemp%10+'0');
  54.                 }
  55.                 if(readtime_f&&!key_fun_f)
  56.                 {
  57.                         readtime_f = 0;
  58.                         Ds1302_Read_Time(&timer);
  59.                         timer_alarm(&timer,&timer1);
  60.                         LCD_Write_Char(3,1,timer.Hour/10 + '0');
  61.                         LCD_Write_Char(4,1,timer.Hour%10 + '0');
  62.                         LCD_Write_Char(6,1,timer.Minute/10 + '0');//顯示秒
  63.                         LCD_Write_Char(7,1,timer.Minute%10 + '0');
  64.                         LCD_Write_Char(9,1,timer.Second/10 + '0');//顯示秒
  65.                         LCD_Write_Char(10,1,timer.Second%10 + '0');
  66.                         LCD_Write_Char(3,0,timer.Year/10 + '0');        //顯示年
  67.                         LCD_Write_Char(4,0,timer.Year%10 + '0');
  68.                         LCD_Write_Char(6,0,timer.Month/10 + '0');         //顯示月
  69.                         LCD_Write_Char(7,0,timer.Month%10 + '0');
  70.                         LCD_Write_Char(9,0,timer.Day/10+ '0');        //顯示日
  71.                         LCD_Write_Char(10,0,timer.Day%10 + '0');
  72.                         LCD_Write_Char(14,0,timer.Week%10 + '0'); //顯示周
  73.                 }
  74.                 if(key_f)
  75.                 {
  76.                         key_f = 0;
  77.                         key_value = key();
  78.                
  79. /****************************加值鍵**************************************/
  80.                         if(key_value==0x01)
  81.                         {
  82.                                 if(key_select==0x01)//修改年
  83.                                 {
  84.                                         timer.Year ++;
  85.                                         if(timer.Year==100)
  86.                                         timer.Year = 0;
  87.                                         LCD_Write_Char(4,0,timer.Year%10 + '0');
  88.                                         LCD_Write_Char(3,0,timer.Year/10 + '0');
  89.                                 }
  90.                                 else if(key_select==0x02)//修改月
  91.                                 {
  92.                                         timer.Month ++;
  93.                                         if(timer.Month==13)
  94.                                         timer.Month = 1;
  95.                                         LCD_Write_Char(7,0,timer.Month % 10 + '0');       
  96.                                         LCD_Write_Char(6,0,timer.Month / 10 + '0');
  97.                                 }
  98.                                 else if(key_select==0x03)//修改日
  99.                                 {
  100.                                         timer.Day ++;
  101.                                         if(timer.Day==32)
  102.                                         timer.Day = 1;
  103.                                         LCD_Write_Char(10,0,timer.Day % 10 + '0');       
  104.                                         LCD_Write_Char(9,0,timer.Day / 10 + '0');
  105.                                        
  106.                                 }                                                  
  107.                                 else if(key_select==0x04)//修改星期
  108.                                 {
  109.                                         timer.Week ++;
  110.                                         if(timer.Week==8)
  111.                                         timer.Week = 1;
  112.                                         LCD_Write_Char(14,0,timer.Week % 10 + '0');       
  113.                                         LCD_Write_Char(13,0,':');
  114.                                        
  115.                                 }
  116.                                 else if(key_select==0x05)//修改時
  117.                                 {
  118.                                         timer.Hour ++;
  119.                                         if(timer.Hour==24)
  120.                                         timer.Hour = 0;
  121.                                         LCD_Write_Char(4,1,timer.Hour % 10 + '0');       
  122.                                         LCD_Write_Char(3,1,timer.Hour / 10 + '0');
  123.                                        
  124.                                 }
  125.                                 else if(key_select==0x06)//修改分
  126.                                 {
  127.                                         timer.Minute ++;
  128.                                         if(timer.Minute==60)
  129.                                         timer.Minute = 0;
  130.                                         LCD_Write_Char(7,1,timer.Minute % 10 + '0');       
  131.                                         LCD_Write_Char(6,1,timer.Minute / 10 + '0');
  132.                                        
  133.                                 }
  134.                                 else if(key_select==0x07)//修改秒
  135.                                 {
  136.                                         timer.Second ++;
  137.                                         if(timer.Second==60)
  138.                                         timer.Second = 0;
  139.                                         LCD_Write_Char(10,1,timer.Second % 10 + '0');       
  140.                                         LCD_Write_Char(9,1,timer.Second / 10 + '0');
  141.                                    }
  142.                         }               
  143. /***************************選擇鍵********************************************/
  144.                                 else if(key_value == 0x02)
  145.                                 {
  146.                                         key_select ++;
  147.                                         if(key_select>0x07)
  148.                                         {
  149.                                                 key_select = 0x00;
  150.                                                 WRDcomm(0x0c);
  151.                                         }
  152.                                
  153.                                 else
  154.                                 {
  155.                                         WRDcomm(0x0d);
  156.                                         switch(key_select)
  157.                                         {
  158.                                                 case 0x01:LCD_Write_Char(3,0,timer.Year/10 + '0');break;
  159.                                                 case 0x02:LCD_Write_Char(6,0,timer.Month/10 + '0');break;
  160.                                                 case 0x03:LCD_Write_Char(9,0,timer.Day/10 + '0');break;
  161.                                                 case 0x04:LCD_Write_Char(13,0,':');break;
  162.                                                 case 0x05:LCD_Write_Char(3,1,timer.Hour/10 + '0');break;
  163.                                                 case 0x06:LCD_Write_Char(6,1,timer.Minute/10 + '0');break;
  164.                                                 case 0x07:LCD_Write_Char(9,1,timer.Second/10 + '0');break;
  165.                                                 default:break;
  166.                                         }
  167.                                 }
  168.                         }
  169. /******************************減值鍵******************************************/
  170.                         else if(key_value==0x04)
  171.                         {
  172.                                 if(key_select==0x01)//修改年
  173.                                 {
  174.                                         timer.Year --;
  175.                                         if(timer.Year==-1)
  176.                                         timer.Year = 99;
  177.                                         LCD_Write_Char(4,0,timer.Year%10 + '0');
  178.                                         LCD_Write_Char(3,0,timer.Year/10 + '0');
  179.                                 }
  180.                                 else if(key_select==0x02)//修改月
  181.                                 {
  182.                                         timer.Month --;
  183.                                         if(timer.Month==0)
  184.                                         timer.Month = 12;
  185.                                         LCD_Write_Char(7,0,timer.Month % 10 + '0');       
  186.                                         LCD_Write_Char(6,0,timer.Month / 10 + '0');
  187.                                 }
  188.                                 else if(key_select==0x03)//修改日
  189.                                 {
  190.                                         timer.Day --;
  191.                                         if(timer.Day==0)
  192.                                         timer.Day = 31;
  193.                                         LCD_Write_Char(10,0,timer.Day % 10 + '0');       
  194.                                         LCD_Write_Char(9,0,timer.Day / 10 + '0');
  195.                                        
  196.                                 }                                                  
  197.                                 else if(key_select==0x04)//修改星期
  198.                                 {
  199.                                         timer.Week --;
  200.                                         if(timer.Week==0)
  201.                                         timer.Week = 7;
  202.                                         LCD_Write_Char(14,0,timer.Week % 10 + '0');       
  203.                                         LCD_Write_Char(13,0,':');
  204.                                        
  205.                                 }
  206.                                 else if(key_select==0x05)//修改時
  207.                                 {
  208.                                         timer.Hour --;
  209.                                         if(timer.Hour==-1)
  210.                                         timer.Hour = 23;
  211.                                         LCD_Write_Char(4,1,timer.Hour % 10 + '0');       
  212.                                         LCD_Write_Char(3,1,timer.Hour / 10 + '0');
  213.                                        
  214.                                 }
  215.                                 else if(key_select==0x06)//修改分
  216.                                 {
  217.                                         timer.Minute --;
  218.                                         if(timer.Minute==-1)
  219.                                         timer.Minute = 59;
  220.                                         LCD_Write_Char(7,1,timer.Minute % 10 + '0');       
  221.                                         LCD_Write_Char(6,1,timer.Minute / 10 + '0');
  222.                                        
  223.                                 }
  224.                                 else if(key_select==0x07)//修改秒
  225.                                 {
  226.                                         timer.Second --;
  227.                                         if(timer.Second==-1)
  228.                                         timer.Second = 59;
  229.                                         LCD_Write_Char(10,1,timer.Second % 10 + '0');       
  230.                                         LCD_Write_Char(9,1,timer.Second / 10 + '0');
  231.                                    }
  232.                         }
  233. /******************************功能鍵***************************************/
  234.                         else if(key_value == 0x08)
  235.                         {
  236.                                 key_fun ++ ;
  237.                                 if(key_fun == 0x01)
  238.                                 {
  239.                                         ADJTIME = 0;
  240.                                         key_fun_f = 1;
  241.                                 }
  242.                                 else if(key_fun == 0x02)
  243.                                 {
  244.                                         ADJTIME = 1;
  245.                                         key_fun_f = 0;
  246.                                         WRDcomm(0x0c);
  247.                                         key_select = 0x00;
  248.                                         Ds1302_Write_Time(ds1302_sec_add,timer.Second);
  249.                                         Ds1302_Write_Time(ds1302_min_add,timer.Minute);
  250.                                         Ds1302_Write_Time(ds1302_hr_add,timer.Hour);
  251.                                         Ds1302_Write_Time(ds1302_day_add,timer.Week);
  252.                                         Ds1302_Write_Time(ds1302_date_add,timer.Day);
  253.                                         Ds1302_Write_Time(ds1302_month_add,timer.Month);
  254.                                         Ds1302_Write_Time(ds1302_year_add,timer.Year);
  255.                                 }
  256.                                 else if(key_fun == 0x03)
  257.                                 {
  258.                                         SETALARM = 0;
  259.                                         key_fun_f = 1;
  260.                                 }
  261.                                 else if(key_fun == 0x04)
  262.                                 {
  263.                                         SETALARM = 1;                           //關閉設置鬧鐘指示
  264.                                         key_fun_f = 0;                                 //清鍵盤功能標志位
  265.                                         key_fun = 0x00;
  266.                                         WRDcomm(0x0c);                                   //關閉數字閃爍
  267.                                         timer1.Second = timer.Second;
  268.                                         timer1.Minute = timer.Minute;
  269.                                         timer1.Hour = timer.Hour;
  270.                                         timer1.Week = timer.Week;
  271.                                         timer1.Day = timer.Day;
  272.                                         timer1.Month = timer.Month;
  273.                                         timer1.Year = timer.Year;
  274.                                 }
  275.                         }
  276.                
  277.                 }

  278.         }
  279. }
復制代碼


萬年歷.7z

38.85 KB, 下載次數: 144, 下載積分: 黑幣 -5

萬年歷.7z

55.23 KB, 下載次數: 134, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:124123 發表于 2016-5-30 23:14 | 只看該作者
圖在哪里
回復

使用道具 舉報

板凳
ID:61840 發表于 2016-6-15 23:30 | 只看該作者
兩個壓縮包有區別那
回復

使用道具 舉報

地板
ID:148320 發表于 2016-11-16 19:20 | 只看該作者
兩個壓縮包有區別嗎?
回復

使用道具 舉報

5#
ID:322483 發表于 2018-6-9 15:27 | 只看該作者
挖墳,謝謝樓主,哈哈找了很久
回復

使用道具 舉報

6#
ID:313328 發表于 2018-6-9 21:43 | 只看該作者
可以參考了
回復

使用道具 舉報

7#
ID:453005 發表于 2018-12-23 23:40 | 只看該作者
挺好的,有價值
回復

使用道具 舉報

8#
ID:453654 發表于 2018-12-24 17:08 | 只看該作者

這個在編譯的時候居然顯示有錯誤,請問知道怎末回事嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产激情视频网站 | 黄色片网站在线观看 | 亚洲福利av | 欧美激情国产日韩精品一区18 | 啪啪免费网站 | 国产亚洲一区精品 | 国产精品欧美一区二区三区 | 91一区二区 | 久久精品国产免费一区二区三区 | 人人亚洲 | 91毛片在线看 | 日韩国产一区二区三区 | 伊人网91| 91在线一区二区三区 | 一区二区三区av | 欧美国产视频 | 日本特黄特色aaa大片免费 | 精品免费国产视频 | 国产精品福利在线 | 亚洲情综合五月天 | 精品国产免费人成在线观看 | 中文字幕乱码一区二区三区 | 久久这里只有精品首页 | 欧美一级毛片免费观看 | 精品免费 | 亚洲欧美激情精品一区二区 | 久99久视频| 精品国产欧美一区二区三区不卡 | 欧美国产日韩在线观看 | 精品无码三级在线观看视频 | 亚洲国产精品久久久久 | 成人影院一区二区三区 | av网址在线| 91精品国产乱码久久久久久久 | 国产一区二区三区亚洲 | 九色视频网站 | 免费观看成人av | 一级欧美 | 国产精品不卡 | 日韩欧美三级电影 | 欧美成人aaa级毛片在线视频 |