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

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

QQ登錄

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

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

1602液晶屏仿真 電子時(shí)鐘日歷設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:3721 發(fā)表于 2016-5-29 15:49 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

1602lcd液晶屏仿真 51單片機(jī)的電子時(shí)鐘日歷設(shè)計(jì)原理圖如下:





仿真文件及完整的程序代碼下載:http://www.zg4o1577.cn/bbs/dpj-50777-1.html


  1. #include <reg51.h>
  2. #ifndef uchar
  3. #define uchar unsigned char
  4. #endif

  5. #ifndef uint
  6. #define uint unsigned int
  7. #endif
  8. /*定義年月日參數(shù)變量*/
  9. unsigned char YEAR1 = 2;
  10. unsigned char YEAR2 = 0;
  11. unsigned char YEAR3 = 1;
  12. unsigned char YEAR4 = 6;
  13. unsigned char MONTH1 = 0;
  14. unsigned char MONTH2 = 1;
  15. unsigned char DAY1 = 2;
  16. unsigned char DAY2 = 6;
  17. unsigned char HOUR1 = 0;
  18. unsigned char HOUR2 = 0;
  19. unsigned char MINUTE1 = 0;
  20. unsigned char MINUTE2 = 0;
  21. unsigned char SECOND1 = 0;
  22. unsigned char SECOND2 = 0;
  23. unsigned char time[10];         
  24. unsigned char Y_M[10];
  25. unsigned char count = 0;
  26. /*LCD1602寫(xiě)入8位數(shù)據(jù)子函數(shù)*/
  27. void LcdWriteCom(unsigned char com);
  28. void LcdWriteData(uchar dat);
  29. /*LCD1602初始化子程序*/
  30. void LcdInit();
  31. void add1day(unsigned char month_day);            //按按鍵后天數(shù)本月減一
  32. void sub1month(void);                                                //按按鍵后月數(shù)減一
  33. unsigned char returnDays(unsigned char months);   //獲取本月有多少天

  34. void Lcd1602_Delay1ms(unsigned char c)                          //延時(shí)1ms函數(shù)
  35. {
  36.     unsigned char a,b;
  37.         for (; c>0; c--)
  38.                  for (b=199;b>0;b--)
  39.                           for(a=1;a>0;a--)
  40.                         ;
  41.                      
  42. }
  43. void add1Sec(void)                                                                //調(diào)用此函數(shù)LCD1602顯示屏上秒數(shù)加1
  44. {
  45.   SECOND2++;
  46.   if (SECOND2 > 9)     //>'9'
  47.   {
  48.     SECOND2 = 0;
  49.     SECOND1++;
  50.   }
  51. }
  52. void time1() interrupt 1                                                //定時(shí)器中斷
  53. {
  54.   unsigned char i, j;
  55.   TH0=(65536-50000)/256;                                                //16位定時(shí)器0x60B0  高八位TH0 60低八位 B0 定時(shí)50000微秒觸發(fā)定時(shí)器
  56.   TL0=(65536-50000)%256;
  57.   count++;
  58.   if (count % 16 == 0)
  59.   {
  60.     add1Sec();
  61.         LcdWriteCom(0x01);  //清屏
  62.     LcdWriteCom(0x80+0x40);
  63.     for (j = 0; j < 8; j++)
  64.           LcdWriteData(time[j]);         
  65.         LcdWriteCom(0x80);
  66.         for (i = 0; i < 10; i++)
  67.           LcdWriteData(Y_M[i]);
  68.             if(count == 240)
  69.                 count = 0;
  70.   }
  71.   
  72.   if (SECOND1 >= 6)    //=='6'
  73.   {
  74.     SECOND1 = 0;
  75.     MINUTE2++;
  76.   }
  77.   if (MINUTE2 > 9)
  78.   {
  79.     MINUTE2 = 0;
  80.     MINUTE1++;

  81.     if (MINUTE1 >= 6)  //'6'
  82.     {
  83.       MINUTE1 = 0;
  84.       HOUR2++;
  85.           for(i = 0; i < 19; i++)
  86.               add1Sec();
  87.     }
  88.   }
  89.   if (HOUR2 > 9)
  90.   {
  91.     HOUR2 = 0;
  92.     HOUR1++;
  93.   }
  94.   if (HOUR1 >= 2)    //'2' ,'4'  
  95.   {
  96.     if(HOUR2 >= 4)
  97.         {
  98.     HOUR1 = 0;
  99.     HOUR2 = 0;
  100.     MINUTE1 = 0;
  101.     MINUTE2 = 0;
  102.     SECOND1 = 0;
  103.     SECOND2 = 0;
  104.         add1day(returnDays(MONTH1*10+MONTH2));
  105.         }

  106.   }
  107.    Y_M[0] = (char)(YEAR1+48);
  108.    Y_M[1] = (char)(YEAR2+48);
  109.    Y_M[2] = (char)(YEAR3+48);
  110.    Y_M[3] = (char)(YEAR4+48);
  111.    Y_M[4] = '-';
  112.    Y_M[5] = (char)(MONTH1+48);
  113.    Y_M[6] = (char)(MONTH2+48);
  114.    Y_M[7] = '-';
  115.    Y_M[8] = (char)(DAY1+48);
  116.    Y_M[9] = (char)(DAY2+48);
  117.    time[0] = (char)(HOUR1+48);
  118.    time[1] = (char)(HOUR2+48);
  119.    time[2] = ':';
  120.    time[3] = (char)(MINUTE1+48);
  121.    time[4] = (char)(MINUTE2+48);
  122.    time[5] = ':';
  123.    time[6] = (char)(SECOND1+48);
  124.    time[7] = (char)(SECOND2+48);
  125. }

  126.   unsigned char returnDays(unsigned char months)
  127.   {
  128.     if (MONTH2 < 10 && MONTH1 == 0)
  129.           switch(MONTH2)
  130.           {
  131.             case 1:  return 31; break;
  132.                 case 2:         
  133.                 if (((YEAR3*10+YEAR4)%4 == 0 && (YEAR3*10+YEAR4) != 0 )
  134.         ||((YEAR3 * 10 + YEAR4) == 0 && (YEAR1+YEAR2)%4 == 0))       
  135.               return 29;
  136.                 else
  137.                   return 28;
  138.                 break;
  139.                 case 3:  return 31;        break;
  140.                 case 4:         return 30;        break;
  141.                 case 5:  return 31;        break;
  142.                 case 6:         return 30;        break;
  143.                 case 7:  return 31;        break;
  144.                 case 8:         return 31;        break;
  145.                 case 9:  return 30;        break;
  146.                   
  147.           }
  148.           else if(MONTH1 == 1 && MONTH2 <= 2)
  149.           {
  150.             if (MONTH1 == 1 && MONTH2 == 0)
  151.               return 31;
  152.             if (MONTH1 == 1 && MONTH2 == 1)
  153.               return 30;
  154.             if (MONTH1 == 1 && MONTH2 == 2)
  155.                   return 31;
  156.           }
  157.   }
  158.   

  159.   void sub1day(void)
  160.   {
  161.     if(DAY1 == 0)
  162.         {
  163.           if(DAY2 != 1)
  164.             DAY2--;
  165.           else
  166.           {
  167.             sub1month();
  168.                 DAY1 = (unsigned char) returnDays(MONTH1*10+MONTH2)/10;
  169.                 DAY2 =         returnDays(MONTH1*10+MONTH2)%10+1;                         //...
  170.           }
  171.         }
  172.         if(DAY1 != 0)
  173.         {
  174.           if(DAY2 != 0)
  175.             DAY2--;
  176.           else
  177.           {
  178.             DAY1--;
  179.                 DAY2 = 9;
  180.           }
  181.         }
  182.   }
  183.   void add1month(void)
  184.   {
  185.     if (MONTH2 == 9)
  186.         {
  187.       MONTH1 = 1;
  188.           MONTH2 = 0;
  189.     }
  190.         else if (MONTH1 == 0 ||(MONTH1 == 1 && MONTH2 < 2))
  191.       MONTH2++;
  192.     else if (MONTH1*10+MONTH2  == 12)
  193.           {
  194.                 MONTH1 = 0;
  195.                 MONTH2 = 1;
  196.                 YEAR4++;
  197.           }
  198. }

  199.        

  200.   void add1day(unsigned char month_day)           //獲取本月有多少天后,天數(shù)減1
  201.   {
  202.     if (DAY1*10+DAY2 == month_day)            
  203.         {
  204.           DAY2 = 1;
  205.           DAY1 = 0;
  206.           add1month();
  207.         }
  208.     else
  209.     {
  210.           if(DAY2 != 9)
  211.             DAY2++;
  212.           else
  213.           {
  214.             DAY2 = 0;
  215.                 DAY1++;
  216.           }
  217.         }
  218.          
  219. }
  220. void sub1month(void)       //減一個(gè)月
  221. {
  222.   if(MONTH1 == 0)
  223.   {
  224.     if(MONTH2 != 1)
  225.           MONTH2--;
  226.         else
  227.         {
  228.           MONTH1 = 1;
  229.           MONTH2 = 2;
  230.           if(YEAR4 != 0)
  231.             YEAR4--;
  232.           else
  233.           {
  234.             if(YEAR3 != 0)
  235.                 {
  236.                   YEAR3--;
  237.                   YEAR4 = 9;
  238.                 }
  239.                 else
  240.                 {
  241.                   if(YEAR2 != 0)
  242.                   {
  243.                    YEAR2--;
  244.                    YEAR3 = 9;
  245.                    YEAR4 = 9;
  246.                   }
  247.                   else
  248.                   {
  249.                     if(YEAR1 != 0)
  250.                         {
  251.                           YEAR1--;
  252.                           YEAR2 = 9;
  253.                       YEAR3 = 9;
  254.                       YEAR4 = 9;
  255.                         }
  256.                         else
  257.                         ;
  258.                   }
  259.                 }
  260.           }
  261.         }
  262.   }
  263.   else
  264.   {
  265.     if(MONTH2 == 0)
  266.         {
  267.           MONTH1 = 0;
  268.           MONTH2 = 9;
  269.         }
  270.         else
  271.           MONTH2--;
  272.   }
  273. }
  274.   

  275. void main(void)
  276. {
  277.      
  278.        
  279.         TMOD=0x01;//設(shè)置定時(shí)器0為工作方式1
  280.     TH0=(65536-50000)/256;
  281.     TL0=(65536-50000)%256;
  282.     EA=1;//打開(kāi)中斷總開(kāi)關(guān)
  283.     ET0=1;//開(kāi)定時(shí)器0中斷
  284.     TR0=1;//啟動(dòng)定時(shí)器0       
  285.        
  286.         P3 = 0XFF;
  287.         LcdInit();
  288.         while(1)
  289.         {
  290.           if (P3 != 0XFF)
  291.         switch(P3)
  292.         {
  293.         case 0xFE:                                    //按 按鍵后加一小時(shí)
  294.                 Lcd1602_Delay1ms(20);
  295.                 while(P3 == 0xFE);
  296.                 Lcd1602_Delay1ms(5);
  297.                 HOUR2++;
  298.                 break;
  299.         case 0xFD:                             //按 按鍵后減一小時(shí)
  300.                 Lcd1602_Delay1ms(20);
  301.                 while(P3 == 0xFD);
  302.                 Lcd1602_Delay1ms(5);
  303.                 if (HOUR1 != 0 && HOUR2 == 0)
  304.                 {
  305.                   HOUR1--;
  306.                   HOUR2 = 9;
  307.                   break;
  308.                 }
  309.                 else if(HOUR1 == 0 && HOUR2 == 0)
  310.                 {
  311.                   HOUR1 = 2;
  312.                   HOUR2 = 3;
  313.                   MINUTE1 = 0;
  314.                   MINUTE2 = 0;
  315.                   sub1day();  
  316.                 }
  317.                 else if (HOUR2 != 0)
  318.                 HOUR2--;
  319.                 break;
  320.         case 0xFB:              //按 按鍵后加一分鐘
  321.                 Lcd1602_Delay1ms(20);
  322.                 while(P3 == 0xFB);
  323.             Lcd1602_Delay1ms(5);
  324.                 MINUTE2++;
  325.                 break;
  326.         case 0XF7:
  327.                 Lcd1602_Delay1ms(20);
  328.                 while(P3 == 0xF7);
  329.             Lcd1602_Delay1ms(5);
  330.                 if (MINUTE2 == 0)           //分鐘減到0時(shí)處理
  331.                 {
  332.                   if(MINUTE1 == 0)
  333.                   {
  334.                     MINUTE1 = 5;
  335.                     MINUTE2 = 9;
  336.                     if (HOUR2 != 0)
  337.                       HOUR2--;
  338.                     else
  339.                     {
  340.                       if(HOUR1 != 0)
  341.                           {
  342.                         HOUR1--;
  343.                             HOUR2 = 9;
  344.                           }
  345.                           else
  346.                           {
  347.                             HOUR1 = 2;
  348.                             HOUR2 = 3;
  349.                             MINUTE1 = 5;
  350.                             MINUTE2 = 9;
  351.                             sub1day();  
  352.                           }
  353.                     }
  354.                   }
  355.                   else
  356.                   {
  357.                     MINUTE2 = 9;
  358.                         MINUTE1--;
  359.                   }
  360.                   break;
  361.                  }
  362.                  else
  363.                     MINUTE2--;
  364.                     break;          
  365.         case 0XDF:
  366.             Lcd1602_Delay1ms(20);
  367.                 while(P3 == 0xDF);
  368.             Lcd1602_Delay1ms(5);
  369.               sub1month();
  370.                 break;        
  371.         case 0XEF:
  372.             Lcd1602_Delay1ms(20);
  373.                 while(P3 == 0xEF);
  374.             Lcd1602_Delay1ms(5);
  375.                 add1month();
  376.                 break;          
  377.          case 0XBF:
  378.             Lcd1602_Delay1ms(20);
  379.                 while(P3 == 0xBF);
  380.             Lcd1602_Delay1ms(5);
  381.                 add1day(returnDays(MONTH1*10+MONTH2));
  382.                 break;          
  383.           case 0X7F:
  384.             Lcd1602_Delay1ms(20);
  385.                 while(P3 == 0x7F);
  386.             Lcd1602_Delay1ms(5);
  387.                 sub1day();
  388.                 break;          
  389.                
  390.                 default:
  391.             break;
  392.                  
  393.     }
  394.         }               
  395.             

  396. }
復(fù)制代碼



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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品99久 | 欧美国产精品一区二区三区 | 亚洲欧美日韩久久 | 人人九九 | 国产激情91久久精品导航 | 正在播放一区二区 | 一区观看 | 日韩欧美中文字幕在线观看 | 久久伊人免费视频 | 国产免费又黄又爽又刺激蜜月al | 99re6在线视频精品免费 | 久久久www成人免费无遮挡大片 | 一级毛片大全免费播放 | 欧美国产激情二区三区 | 久久久久国产一区二区三区 | 国产视频一区二区在线观看 | 国产精品久久久久久久久久久久午夜片 | 国产精品久久久久久久久久久久 | 精品久久久网站 | 天天干视频在线 | 中文字幕 欧美 日韩 | 伊人在线 | 国产精品一区二区在线观看 | 国产精华一区 | www.jizzjizz| 四虎伊人 | 欧美日韩在线一区二区 | 亚洲二区视频 | 亚洲视频手机在线 | 免费视频成人国产精品网站 | 久久亚洲一区二区 | 久久久久久久网 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 91精品久久久久久久久久入口 | 欧美区在线| 91av在线看 | 日韩在线欧美 | 欧美福利在线 | 欧美日韩亚洲二区 | 免费国产一区二区视频 | 久久久久久亚洲 |