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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1475|回復: 1
收起左側

51單片機 lcd1602 萬年歷時鐘

[復制鏈接]
ID:614592 發表于 2019-9-21 22:56 | 顯示全部樓層 |閱讀模式
本帖最后由 燎木乙 于 2019-9-21 23:02 編輯

lcd1602.h
  1. #ifndef _LCD1602_H_
  2. #define _LCD1602_H_

  3. sbit rs = P2^6;
  4. sbit rw = P2^5;
  5. sbit e = P2^7;

  6. typedef unsigned int uint8;
  7. typedef unsigned char uchar;

  8. void delay(uint8 i);
  9. void wrc(uint8 cmd);
  10. void wrd(uint8 dat);
  11. void init();

  12. #endif
復制代碼
lcd1602.c
  1. #include "reg52.h"
  2. #include "lcd1602.h"
  3. #include "intrins.h"


  4. void delay(uint8 i)
  5. {
  6.         while(i--);
  7. }

  8. //指令寫入
  9. void wrc(uint8 cmd)
  10. {
  11.         delay(1000);
  12.         rs = 0;
  13.         rw = 0;
  14.         e = 0;
  15.         P0 = cmd;
  16.         e = 1;
  17.         delay(10);
  18.         e = 0;
  19. }

  20. //數據輸入
  21. void wrd(uint8 dat)
  22. {
  23.         delay(1000);
  24.         rs = 1;
  25.         rw = 0;
  26.         e = 0;
  27.         P0 = dat;
  28.         e = 1;
  29.         delay(10);
  30.         e = 0;
  31.         rs = 0;
  32. }

  33. //初始化
  34. void init()
  35. {
  36.         delay(1000);
  37.         wrc(0x38);
  38.         wrc(0x0c);
  39.         wrc(0x06);
  40.         wrc(0x01);
  41.         wrc(0x80);
  42. }
復制代碼

main.c
  1. #include "reg52.h"
  2. #include "lcd1602.h"

  3. //時間:年月日時分秒
  4. uchar Time[7] = {20, 19, 9, 9, 13, 0, 0};
  5. uint8 n = 0;//定時計數,50ms一次


  6. sbit key1=P3^0;
  7. sbit key2=P3^1;
  8. sbit key3=P3^2;
  9. sbit key4=P3^3;

  10. void display();
  11. uint8 key();
  12. void guize();

  13. int main()
  14. {
  15.         EA = 1;//開總中斷
  16.         EX0 = 1;//允許外部中斷0
  17.         IT0 = 1;//外部中斷0下降沿有效
  18.         TMOD = 0X01;//設置定時器模式
  19.         TH0 = (65535 - 46083) / 256;//延時50ms
  20.         TL0 = (65535 - 46083) % 256;
  21.         ET0 = 1;//開啟定時器0中斷
  22.         TR0 = 1;//開啟定時器
  23.        
  24.         init();//初始化lcd1602
  25.         while(1)
  26.         {
  27.                 display();//顯示函數
  28.                
  29.                 guize();
  30.         }
  31. }

  32. //顯示函數
  33. void display()
  34. {
  35.         wrc(0x80|0x00);
  36.         wrd('0' + Time[0]/10);
  37.         wrd('0' + Time[0]%10);
  38.         wrd('0' + Time[1]/10);
  39.         wrd('0' + Time[1]%10);
  40.         wrd('-');
  41.         wrd('0' + Time[2]/10);
  42.         wrd('0' + Time[2]%10);
  43.         wrd('-');
  44.         wrd('0' + Time[3]/10);
  45.         wrd('0' + Time[3]%10);
  46.        
  47.         wrc(0x80|0x40);
  48.         wrd('0' + Time[4]/10);
  49.         wrd('0' + Time[4]%10);
  50.         wrd(':');
  51.         wrd('0' + Time[5]/10);
  52.         wrd('0' + Time[5]%10);
  53.         wrd(':');
  54.         wrd('0' + Time[6]/10);
  55.         wrd('0' + Time[6]%10);
  56. }

  57. uint8 key()
  58. {
  59.         uint8 k = 0;
  60.         P3=0x0f;
  61.         delay(100000000);
  62.         while(k == 0)
  63.         {
  64.                 if(key1 == 0)
  65.                 {
  66.                         delay(2000);
  67.                         if(key1 == 0)
  68.                                 return 1;
  69.                 }
  70.                 else if(key2 == 0)
  71.                 {
  72.                         delay(2000);
  73.                         if(key2 == 0)
  74.                                 return 2;
  75.                 }
  76.                 else if(key3 == 0)
  77.                 {
  78.                         delay(2000);
  79.                         if(key3 == 0)
  80.                                 return 3;
  81.                 }
  82.                 else if(key4 == 0)
  83.                 {
  84.                         delay(2000);
  85.                         if(key4 == 0)
  86.                                 return 4;
  87.                 }
  88.         }
  89. }

  90. void guize()
  91. {
  92.                 if(Time[6] >= 60)//秒
  93.                 {
  94.                         Time[6] = 0;
  95.                         Time[5] += 1;
  96.                 }
  97.                 if(Time[5] >= 60)//分
  98.                 {
  99.                         Time[5] = 0;
  100.                         Time[4] += 1;
  101.                 }
  102.                 if(Time[4] >= 24)//時
  103.                 {
  104.                         Time[4] = 0;
  105.                         Time[3] += 1;
  106.                 }
  107.                 if(Time[3] >= 29)//日
  108.                 {
  109.                         if((Time[2] == 1) || (Time[2] == 3) || (Time[2] == 5) || (Time[2] == 7) || (Time[2] == 8) || (Time[2] == 10) || (Time[2] == 12))//31天數月
  110.                         {
  111.                                 if(Time[3] > 31)
  112.                                 {
  113.                                         Time[3] = 0;
  114.                                         Time[2] += 1;
  115.                                 }
  116.                         }
  117.                         else if((Time[2] == 4) || (Time[2] == 6) || (Time[2] == 9) || (Time[2] == 11))//30天數月
  118.                         {
  119.                                 if(Time[3] > 30)
  120.                                 {
  121.                                         Time[3] = 0;
  122.                                         Time[2] += 1;
  123.                                 }
  124.                         }
  125.                         else                //2月
  126.                         {
  127.                                 if((Time[0] * 100 + Time[1])/4 == 0)//閏年
  128.                                 {
  129.                                         if(Time[3] > 29)
  130.                                         {
  131.                                                 Time[3] = 0;
  132.                                                 Time[2] += 1;
  133.                                         }
  134.                                 }
  135.                                 else                //平年
  136.                                 {
  137.                                         Time[3] = 0;
  138.                                         Time[2] += 1;
  139.                                 }
  140.                         }
  141.                 }
  142.                 if(Time[2] > 12)//月
  143.                 {
  144.                         Time[2] = 0;
  145.                         Time[1] += 1;
  146.                 }
  147.                 if(Time[1] > 99)//年后兩位
  148.                 {
  149.                         Time[1] = 0;
  150.                         Time[0] += 1;
  151.                 }
  152.                 if(Time[0] > 99)//年前兩位
  153.                 {
  154.                         Time[0] = 0;
  155.                 }

  156. }

  157. void duang0()interrupt 0
  158. {
  159.         uint8 k = 0, x = 0, y = 0, i;
  160.         delay(100000000);
  161.         wrc(0x0f);//開啟光標
  162.         wrc(0x02);//初始化光標位置
  163.         while(k != 3)
  164.         {
  165.                 k = key();
  166.                 switch(k)
  167.                 {
  168.                         case 1:
  169.                                 if(y == 0)
  170.                                 {
  171.                                         if(x == 3 || x == 5)
  172.                                         {
  173.                                                 wrc(0x14);
  174.                                                 wrc(0x14);
  175.                                                 x++;
  176.                                         }
  177.                                         else if(x == 7)
  178.                                         {
  179.                                                 for(i = 55; i > 0; i--)
  180.                                                 {
  181.                                                         wrc(0x14);
  182.                                                 }
  183.                                                 x = 0;
  184.                                                 y = 1;
  185.                                         }
  186.                                         else
  187.                                         {
  188.                                                 wrc(0x14);
  189.                                                 x++;
  190.                                         }
  191.                                 }
  192.                                 else
  193.                                 {
  194.                                         if(x == 1 || x == 3)
  195.                                         {
  196.                                                 wrc(0x14);
  197.                                                 wrc(0x14);
  198.                                                 x++;
  199.                                         }
  200.                                         else if(x == 5)
  201.                                         {
  202.                                                 for(i = 57; i > 0; i--)
  203.                                                 {
  204.                                                         wrc(0x14);
  205.                                                 }
  206.                                                 x = 0;
  207.                                                 y = 0;
  208.                                         }
  209.                                         else
  210.                                         {
  211.                                                 wrc(0x14);
  212.                                                 x++;
  213.                                         }
  214.                                 }
  215.                                 break;
  216.                         case 2:
  217.                                 if(y == 0)
  218.                                 {
  219.                                         if(x == 4 || x== 6)
  220.                                         {
  221.                                                 wrc(0x10);
  222.                                                 wrc(0x10);
  223.                                                 x--;
  224.                                         }
  225.                                         else if(x == 0)
  226.                                         {
  227.                                                 for(i = 57; i > 0; i--)
  228.                                                         wrc(0x10);
  229.                                                 x = 5;
  230.                                                 y = 1;
  231.                                         }
  232.                                         else
  233.                                         {
  234.                                                 wrc(0x10);
  235.                                                 x--;
  236.                                         }
  237.                                 }
  238.                                 else
  239.                                 {
  240.                                         if(x == 2 || x == 4)
  241.                                         {
  242.                                                 wrc(0x10);
  243.                                                 wrc(0x10);
  244.                                                 x--;
  245.                                         }
  246.                                         else if(x == 0)
  247.                                         {
  248.                                                 for(i = 55; i > 0; i--)
  249.                                                         wrc(0x10);
  250.                                                 x = 7;
  251.                                                 y = 0;
  252.                                         }
  253.                                         else
  254.                                         {
  255.                                                 wrc(0x10);
  256.                                                 x--;
  257.                                         }
  258.                                 }
  259.                                 break;
  260.                         case 4:
  261.                                 if(y == 0)
  262.                                 {
  263.                                         if(x == 0)
  264.                                                 Time[0] += 10;
  265.                                         else if(x == 1)
  266.                                                 Time[0] += 1;
  267.                                         else if(x == 2)
  268.                                                 Time[1] += 10;
  269.                                         else if(x == 3)
  270.                                                 Time[1] += 1;
  271.                                         else if(x == 4)
  272.                                                 Time[2] += 10;
  273.                                         else if(x == 5)
  274.                                                 Time[2] += 1;
  275.                                         else if(x == 6)
  276.                                                 Time[3] += 10;
  277.                                         else if(x == 7)
  278.                                                 Time[3] += 1;
  279.                                 }
  280.                                 else
  281.                                 {
  282.                                         if(x == 0)
  283.                                                 Time[4] += 10;
  284.                                         else if(x == 1)
  285.                                                 Time[4] += 1;
  286.                                         else if(x == 2)
  287.                                                 Time[5] += 10;
  288.                                         else if(x == 3)
  289.                                                 Time[5] += 1;
  290.                                         else if(x == 4)
  291.                                                 Time[6] += 10;
  292.                                         else if(x == 5)
  293.                                                 Time[6] += 1;
  294.                                 }
  295.                                 guize();
  296.                                 display();
  297.                                 if(y == 0)
  298.                                 {
  299.                                         switch(x)
  300.                                         {
  301.                                                 case 0:
  302.                                                         wrc(0x80|0x00);
  303.                                                         break;
  304.                                                 case 1:
  305.                                                         wrc(0x80|0x01);
  306.                                                         break;
  307.                                                 case 2:
  308.                                                         wrc(0x80|0x02);
  309.                                                         break;
  310.                                                 case 3:
  311.                                                         wrc(0x80|0x03);
  312.                                                         break;
  313.                                                 case 4:
  314.                                                         wrc(0x80|0x05);
  315.                                                         break;
  316.                                                 case 5:
  317.                                                         wrc(0x80|0x06);
  318.                                                         break;
  319.                                                 case 6:
  320.                                                         wrc(0x80|0x08);
  321.                                                         break;
  322.                                                 case 7:
  323.                                                         wrc(0x80|0x09);
  324.                                                         break;
  325.                                                 default:break;
  326.                                         }
  327.                                 }
  328.                                 else
  329.                                 {
  330.                                         switch(x)
  331.                                         {
  332.                                                 case 0:
  333.                                                         wrc(0x80|0x40);break;
  334.                                                 case 1:
  335.                                                         wrc(0x80|0x41);break;
  336.                                                 case 2:
  337.                                                         wrc(0x80|0x43);break;
  338.                                                 case 3:
  339.                                                         wrc(0x80|0x44);break;
  340.                                                 case 4:
  341.                                                         wrc(0x80|0x46);break;
  342.                                                 case 5:
  343.                                                         wrc(0x80|0x47);break;
  344.                                                 default:break;
  345.                                         }
  346.                                 }
  347.                                
  348.                                 break;
  349.                         default: break;
  350.                 }
  351.         }
  352.        
  353.         wrc(0x0c);
  354. }

  355. void duang1()interrupt 1
  356. {
  357.         n += 1;
  358.         if(n == 20)
  359.         {       
  360.                 Time[6] += 1;
  361.                 n = 0;
  362.         }
  363.         TH0 = (65535 - 46083) / 256;//延時50ms
  364.         TL0 = (65535 - 46083) % 256;
  365. }
復制代碼



萬年歷時鐘仿真電路圖.PNG
回復

使用道具 舉報

ID:618543 發表于 2019-10-3 15:07 | 顯示全部樓層
樓主能對代碼做一些說明么?謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av中文在线 | 中文字幕在线观看视频网站 | 亚洲免费av一区 | 国产中文字幕在线 | 888久久久 | 在线免费国产视频 | 中文字幕一区二区三区乱码图片 | 亚洲三区视频 | 久久亚洲国产 | 久久精品国产一区二区三区不卡 | 久操亚洲 | 亚洲不卡在线视频 | 亚洲国产一区在线 | av夜夜操| 国产成人短视频在线观看 | 日韩一级电影免费观看 | 亚洲欧美日韩国产 | 午夜视频免费 | 毛片免费观看视频 | 久热国产精品视频 | 国产成人精品免高潮在线观看 | 久久人人爽人人爽人人片av免费 | 日操操| 香蕉视频久久久 | www.欧美.com | 久久免费精品 | 免费色网址 | 亚洲视频在线一区 | 日韩一区二区免费视频 | 国产一区二区三区欧美 | 羞羞的视频免费在线观看 | 在线观看免费毛片 | 中文字幕一区二区在线观看 | 国产精品久久久久久久久久免费看 | 国产精品毛片 | 91精品国产综合久久久动漫日韩 | 亚州毛片 | 精品日本久久久久久久久久 | 日韩成人免费视频 | 日本午夜在线视频 | 亚洲精品电影网在线观看 |