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

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

QQ登錄

只需一步,快速開始

搜索
查看: 5143|回復(fù): 2
收起左側(cè)

單片機(jī)萬(wàn)年歷仿真與源碼

[復(fù)制鏈接]
ID:313911 發(fā)表于 2018-4-22 18:23 | 顯示全部樓層 |閱讀模式
萬(wàn)年歷單片機(jī)電路及程序
0.jpg

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar code  digit[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};       
  6. unsigned char data year,month,day,hour,min,sec,sec100,n;//年、月、日、時(shí)、分、秒、百分之一秒
  7. sbit TS = P2^4;    //調(diào)整鍵調(diào)時(shí)
  8. sbit SS = P2^5;    //調(diào)整鍵上升
  9. sbit XJ = P2^6;           //調(diào)整鍵下降
  10. sbit TW = P2^7;           //調(diào)整鍵調(diào)位
  11. void delay1ms( uint x); //延時(shí)程序
  12. void pro_timedate();//時(shí)間和日期處理程序
  13. bit leap_year();//閏年的計(jì)算
  14. void display_Year(year); //顯示年
  15. void display_Month(month);//顯示月
  16. void display_Day(day);//顯示日
  17. void display_Hour(hour);//顯示時(shí)
  18. void display_Min(min);//顯示分
  19. void display_Sec(sec);//顯示秒
  20. void dispaly_time();//時(shí)間顯示
  21. void TSkeypros(); //調(diào)時(shí)按鍵掃描
  22. void pro_key(); // 設(shè)置按鍵處理程序
  23. void year_adjust(); // 年調(diào)整程序
  24. void month_adjust(); // 月調(diào)整程序
  25. void day_adjust(); // 日調(diào)整程序
  26. void hour_adjust(); // 時(shí)調(diào)整程序
  27. void min_adjust(); // 分調(diào)整程序
  28.                                   
  29. // 延時(shí)程序
  30. void delay1ms( uint x)
  31. {
  32.         uchar i,j;
  33.         for(i=x;i>0;i--)
  34.         for(j=124;j>0;j--);
  35. }
  36. //Timer0中斷處理程序,秒的產(chǎn)生
  37. void timer0() interrupt 1
  38. {
  39. TH0=0xdc;   //Timer0置10ms定時(shí)初值dc00H(2^16=65536D,dc00H=56320D)
  40. TL0=0x00;   //定時(shí)時(shí)間=(65536-56320)*(1/11.0592)*12=10ms (f0=11.0592Mhz)
  41. sec100++;
  42. n++;
  43.          if(n>=2) //1秒時(shí)間 (100*10ms=1000ms=1s)
  44.   {n = 0;
  45.    dispaly_time();//調(diào)用時(shí)間顯示程序
  46.   }
  47. if(sec100 >= 100) //1秒時(shí)間 (100*10ms=1000ms=1s)
  48.   {sec100 = 0;
  49.    
  50.    pro_timedate();//調(diào)用時(shí)間和日期處理程序
  51.   }
  52. }
  53. //時(shí)間和日期處理程序
  54. void pro_timedate()                                                                                                              
  55. {
  56. sec++;
  57. if(sec > 59)
  58.   {sec = 0;
  59.    min++;
  60.    if(min>59)
  61.    {min=0;
  62.     hour++;
  63.     if(hour>23)
  64.     {hour=0;
  65.      day++;
  66.      if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
  67.       if (day>31) {day=1;month++;}     //大月31天
  68.      if (month==4||month==6||month==9||month==11)  
  69.        if (day>30) {day=1;month++;}     //小月30天
  70.      if (month==2)   
  71.       {if( leap_year())        //閏年的條件
  72.       {if (day>29) {day=1;month++;}}   //閏年2月為29天
  73.       else
  74.       {if (day>28) {day=1;month++;}}   //平年2月為28天
  75.       }   
  76.      if (month>12) {month=1;year++;}
  77.      if (year>99) year=0;
  78.     }
  79.    }
  80.   }
  81. }
  82. //閏年的計(jì)算
  83. bit leap_year()
  84. {
  85. bit leap;
  86. if((year%4==0&&year%100!=0)||year%400==0)//閏年的條件
  87.   leap=1;
  88. else
  89.   leap=0;
  90. return leap;
  91. }
  92. //主程序,初始化及初值設(shè)定
  93. void main()
  94. {
  95. P0=0;
  96. P1=0;
  97. hour=10;min=30;sec=0;        //開機(jī)時(shí)的時(shí),分,秒顯示
  98. year=11; month=5;day=9;       //開機(jī)時(shí)的年,月,日,星期顯示
  99. IE = 0x8f;       //CPU開中斷,INT0,INT1,Timer0,Timer1開中斷
  100. IP = 0x04;       //設(shè)置INT0為中斷最高優(yōu)先級(jí)
  101. IT0=0;IT1=0;      //外部INT0,INT1設(shè)置為電平觸發(fā)方式(注意,觸發(fā)不要選邊沿方式,易誤動(dòng))
  102. TMOD = 0x11;      //Timer0,Timer1工作于模式1, 16位定時(shí)方式
  103. TH0 = 0xdc;TL0 = 0x00;    //Timer0置10ms定時(shí)初值  
  104. TH1 = 0xff;TL1 = 0x00;    //Timer1置初值  
  105. TR0 = 1;       //Timer0啟動(dòng)
  106. TR1 = 0;
  107. while(1)
  108.   {
  109.    TSkeypros();       
  110.   }
  111. }
  112. void display_Year(year) //顯示年                         
  113. {                                                                                                                                 
  114.         uchar i,j;
  115.         i=year/10;
  116.         j=year%10;
  117.         P0=digit[2];
  118.         P1=0;
  119.         delay1ms(4);
  120.         P0=0;
  121.         P0=digit[0];
  122.         P1=1;
  123.         delay1ms(4);
  124.         P0=0;
  125.         P0=digit[i];
  126.         P1=2;
  127.         delay1ms(4);
  128.         P0=0;
  129.         P0=digit[j];
  130.         P1=3;
  131.         delay1ms(4);
  132.         P0=0;
  133. }
  134. void display_Month(month)        //顯示月                  
  135. {
  136.         uchar i,j;
  137.         i=month/10;
  138.         j=month%10;
  139.         P0=digit[i];
  140.         P1=4;
  141.         delay1ms(4);
  142.         P0=0;
  143.         P0=digit[j];
  144.         P1=5;
  145.         delay1ms(4);
  146.     P0=0;
  147. }
  148. void display_Day(day)        //顯示日                  
  149. {
  150.         uchar i,j;
  151.         i=day/10;
  152.         j=day%10;
  153.         P0=digit[i];
  154.         P1=6;
  155.         delay1ms(4);
  156.         P0=0;
  157.     P0=digit[j];
  158.         P1=7;
  159.         delay1ms(4);
  160.         P0=0;
  161. }
  162. void display_Hour(hour)  //顯示時(shí)                          
  163. {
  164.         uchar i,j;
  165.         i=hour/10;
  166.         j=hour%10;
  167.         P0=digit[i];
  168.         P1=8;
  169.         delay1ms(4);
  170.         P0=0;
  171.         P0=digit[j];
  172.         P1=9;
  173.         delay1ms(4);
  174.         P0=0;
  175. }
  176. void display_Min(min) //顯示分                            
  177. {
  178.         uchar i,j;
  179.         i=min/10;
  180.         j=min%10;
  181.         P0=digit[i];
  182.         P1=10;
  183.         delay1ms(4);
  184.         P0=0;
  185.         P0=digit[j];
  186.         P1=11;
  187.         delay1ms(4);
  188.         P0=0;
  189. }
  190. void display_Sec(sec) //顯示秒                            
  191. {
  192.         uchar i,j;
  193.         i=sec/10;
  194.         j=sec%10;
  195.         P0=digit[i];
  196.         P1=12;
  197.         delay1ms(4);
  198.         P0=0;
  199.         P0=digit[j];
  200.         P1=13;
  201.         delay1ms(4);
  202.         P0=0;
  203. }
  204. void dispaly_time()//時(shí)間顯示
  205. {
  206.         display_Year(year);
  207.         display_Month(month);
  208.         display_Day(day);
  209.         display_Hour(hour);
  210.         display_Min(min);
  211.         display_Sec(sec);
  212.                 P0=0;
  213. }
  214. void TSkeypros() //調(diào)時(shí)按鍵掃描
  215. {
  216. if(TS==0)                  //檢測(cè)按鍵TS是否按下
  217.         {       
  218.                 delay1ms(10);   //消除抖動(dòng)10ms
  219.                 if(TS==0)         //再次判斷按鍵是否按下
  220.                 {
  221.                     while(!TS);         //檢測(cè)按鍵是否松開
  222.                 }
  223.                 pro_key();  // 調(diào)用設(shè)置按鍵處理程序                                  
  224.         }               
  225. }
  226. void pro_key() // 設(shè)置按鍵處理程序
  227. {
  228.    year_adjust();
  229.    
  230. }
  231. void year_adjust() // 年調(diào)整程序
  232. {

  233. if (SS==0)
  234.       {
  235.             delay1ms(10);   //消除抖動(dòng)10ms
  236.                 if(SS==0)         //再次判斷按鍵是否按下
  237.                    {
  238.                     while(!SS);         //檢測(cè)按鍵是否松開                                                            
  239.                    }
  240.           year++;
  241.           if (year> 99) year= 0;
  242.           }
  243.    else
  244.       {if (XJ==0)
  245.               {
  246.                    delay1ms(10);   //消除抖動(dòng)10ms
  247.                    if(XJ==0)         //再次判斷按鍵是否按下
  248.                      {
  249.                       while(!XJ);         //檢測(cè)按鍵是否松開                                                            
  250.                      }
  251.                   year--;
  252.                   if (year>100) year= 99;
  253.                   }
  254.           }
  255. if (TW==0)
  256.    {
  257.         delay1ms(10);   //消除抖動(dòng)10ms
  258.                 if(TW==0)         //再次判斷按鍵是否按下
  259.                    {
  260.                     while(!TW);         //檢測(cè)按鍵是否松開                                                            
  261.                    }                 
  262.         month_adjust();
  263.    }   
  264. year_adjust();                        
  265. }
  266. void month_adjust() // 月調(diào)整程序
  267. {
  268. if (SS==0)
  269.       {
  270.             delay1ms(10);   //消除抖動(dòng)10ms
  271.                 if(SS==0)         //再次判斷按鍵是否按下
  272.                    {
  273.                     while(!SS);         //檢測(cè)按鍵是否松開                                                            
  274.                    }
  275.           month++;
  276.           if (month> 12) month= 1;
  277.           }
  278.    else
  279.       {if (XJ==0)
  280.               {
  281.                    delay1ms(10);   //消除抖動(dòng)10ms
  282.                    if(XJ==0)         //再次判斷按鍵是否按下
  283.                      {
  284.                       while(!XJ);         //檢測(cè)按鍵是否松開                                                            
  285.                      }
  286.                   month--;
  287.                   if (month<1) month= 12;
  288.                   }
  289.           }
  290. if (TW==0)
  291.    {
  292.    delay1ms(10);   //消除抖動(dòng)10ms
  293.    if(TW==0)         //再次判斷按鍵是否按下
  294.      {
  295.            while(!TW);         //檢測(cè)按鍵是否松開                                                            
  296.          }                 
  297.     day_adjust();
  298.    }
  299. month_adjust();                       
  300. }
  301. void day_adjust() // 日調(diào)整程序
  302. {
  303. if (SS==0)
  304.       {
  305.           delay1ms(10);   //消除抖動(dòng)10ms
  306.           if(SS==0)         //再次判斷按鍵是否按下
  307.                    {
  308.                     while(!SS);         //檢測(cè)按鍵是否松開                                                            
  309.                    }
  310.           day++;
  311.            if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
  312.             if (day>31) day=1;   //大月31
  313.        if (month==4||month==6||month==9||month==11)  
  314.             if (day>30) day=1;   //小月30
  315.        if (month==2)   
  316.            {
  317.                      if(leap_year())    // 閏年條件
  318.                {
  319.                            if (day>29) day=1; // 閏年29
  320.                            }
  321.              else
  322.              {
  323.                          if (day>28) day=1;         //平年28
  324.                          }
  325.                    }  
  326.           }
  327.    else
  328.       {if (XJ==0)
  329.               {
  330.                    delay1ms(10);   //消除抖動(dòng)10ms
  331.                    if(XJ==0)         //再次判斷按鍵是否按下
  332.                      {
  333.                       while(!XJ);         //檢測(cè)按鍵是否松開                                                            
  334.                      }
  335.                   day--;
  336.                   if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
  337.             if (day<1) day=31;   //大月31
  338.           if (month==4||month==6||month==9||month==11)  
  339.             if (day<1) day=30;   //小月30
  340.           if (month==2)   
  341.            {
  342.                      if(leap_year())    // 閏年條件
  343.                {
  344.                            if (day<1) day=29; // 閏年29
  345.                            }
  346.              else
  347.              {
  348.                          if (day<1) day=28;         //平年28
  349.                          }
  350.                    }  
  351.                   }
  352.           }
  353. if (TW==0)
  354. {
  355.    delay1ms(10);   //消除抖動(dòng)10ms
  356.    if(TW==0)         //再次判斷按鍵是否按下
  357.      {
  358.            while(!TW);         //檢測(cè)按鍵是否松開                                                            
  359.          }
  360.    hour_adjust();
  361. }
  362. day_adjust();                    
  363. }

  364. void hour_adjust() // 時(shí)調(diào)整程序
  365. {
  366. if (SS==0)
  367.       {
  368.           delay1ms(10);   //消除抖動(dòng)10ms
  369.           if(SS==0)         //再次判斷按鍵是否按下
  370.                    {
  371.                     while(!SS);         //檢測(cè)按鍵是否松開                                                            
  372.                    }
  373.           hour++;
  374.           if (hour> 23) hour= 0;
  375.           }
  376.    else
  377.       {if (XJ==0)
  378.               {
  379.                   delay1ms(10);   //消除抖動(dòng)10ms
  380.               if(XJ==0)         //再次判斷按鍵是否按下
  381.                    {
  382.                     while(!XJ);         //檢測(cè)按鍵是否松開                                                            
  383.                    }
  384.                   hour--;
  385.                   if (hour>100) hour= 23;
  386.                   }
  387.           }
  388. if (TW==0)
  389. {
  390. ……………………

  391. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
wnl.rar (147.53 KB, 下載次數(shù): 49)
回復(fù)

使用道具 舉報(bào)

ID:185269 發(fā)表于 2018-5-14 08:28 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報(bào)

ID:281881 發(fā)表于 2018-6-28 05:58 | 顯示全部樓層
無(wú)法解壓,浪費(fèi)黑幣!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99色综合 | 国内精品免费久久久久软件老师 | 中文字幕在线一区二区三区 | 中文天堂网| 日韩精品999| 婷婷丁香在线视频 | 中文字幕一二三区 | 欧美精品 在线观看 | 91综合网| 不卡一区 | 日韩尤物视频 | 色黄网站| 91在线精品视频 | 欧美色图综合网 | 日本小电影网站 | 国产精品毛片 | 粉嫩粉嫩芽的虎白女18在线视频 | 欧美日韩一区二区视频在线观看 | 欧美黑人国产人伦爽爽爽 | 欧美成人精品一区二区男人看 | 一级黄色av电影 | 日韩毛片| 另类 综合 日韩 欧美 亚洲 | 四虎永久免费地址 | 成人福利在线 | 欧美视频一区二区三区 | 免费一级淫片aaa片毛片a级 | av影片在线 | 四虎影院新地址 | 国产一区二区三区视频免费观看 | 精品国产一区二区在线 | 国产欧美在线 | 国产一级片一区二区三区 | 中文字幕电影在线观看 | 国产在线永久免费 | 欧美视频三区 | 四虎影院新地址 | 欧美亚洲视频在线观看 | 国产高清一二三区 | 欧美乱做爰xxxⅹ久久久 | 欧美一级在线观看 |