找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2046|回复: 3
打印 上一主题 下一主题
收起左侧

液晶万年历 四个按键 光标

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit w=P2^5;  
  5. sbit s=P2^6;
  6. sbit e=P2^7;
  7. sbit key1=P3^0;      //功能键
  8. sbit key2=P3^1;      //增加建
  9. sbit key3=P3^2;      //减小键
  10. sbit key4=P3^3;      //走动键
  11. uchar count,key1num,tianmax;
  12. long int miao=20,fen=59,shi=23,tian=27,yue=2,nian=2018;
  13. void delayms(uint xms)
  14. {
  15.    uint i,j;                    
  16.    for(i=xms;i>0;i--)
  17.       for(j=110;j>0;j--);
  18. }
  19. void write_com(uchar com)//命令
  20. {
  21.    s=0;
  22.    w=0;
  23.    e=0;
  24.    P0=com;
  25.    delayms(5);
  26.    e=1;
  27.    delayms(5);
  28.    e=0;
  29. }
  30. void write_date(uchar date)//数据  
  31. {
  32.     s=1;
  33.     w=0;
  34.     e=0;
  35.     P0=date;
  36.     delayms(5);
  37.     e=1;
  38.     delayms(5);
  39.     e=0;
  40. }
  41. void write_sfm(uchar add,uchar date) //写时分秒函数   add位置  date输入数据
  42. {                                                   
  43.     uchar shi,ge;
  44.     shi=date/10;
  45.     ge=date%10;                                                                  
  46.     write_com(0xc0+add);
  47.     write_date(0x30+shi);
  48.     write_date(0x30+ge);
  49. }
  50. void write_ry(uchar add,uchar date) //写日月函数   add位置  date输入数据
  51. {                                                   
  52.     uchar shi,ge;
  53.     shi=date/10;
  54.     ge=date%10;                                                                  
  55.     write_com(0x80+add);
  56.     write_date(0x30+shi);
  57.     write_date(0x30+ge);
  58. }
  59. void write_nian1()//写年函数
  60. {   
  61.    uchar ge,shi,bai,qian;
  62.     qian=nian/1000%10;
  63.     bai=nian/100%10;
  64.     shi=nian/10%10;
  65.     ge=nian%10;
  66.     write_com(0x80+4);
  67.     write_date(0x30+qian);
  68.     write_date(0x30+bai);
  69.     write_date(0x30+shi);
  70.     write_date(0x30+ge);

  71. }
  72. void init()//初始化函数
  73. {
  74.     count=0;
  75.     key1num=0;
  76.     write_com(0x38);
  77.     write_com(0x08);
  78.     write_com(0x01);   
  79.     write_com(0x06);
  80.     write_com(0x0c);

  81. write_com(0xc0+6);
  82. write_date(':');
  83. delayms(1);
  84. write_com(0xc0+9);
  85. write_date(':');            
  86. delayms(1);

  87. write_com(0x80+11);
  88. write_date('-');
  89. delayms(1);
  90. write_com(0x80+8);
  91. write_date('-');
  92. delayms(1);

  93. write_sfm(10,miao);
  94. write_sfm(7,fen);
  95. write_sfm(4,shi);            

  96. write_ry(12,tian);
  97. write_ry(9,yue);
  98. write_nian1();

  99.     TMOD=0x01;
  100.     TH0=(65536-50000)/256;
  101.     TL0=(65536-50000)%256;
  102.     EA=1;
  103.     ET0=1;
  104.     TR0=1;
  105. }
  106. void keyscan()
  107. {
  108.    if(key1==0)
  109.    {
  110.      delayms(5);
  111.      if(key1==0)
  112.      {
  113.         key1num++;
  114.         while(!key1);
  115.       switch(key1num)
  116.       {
  117.         case 1:
  118.         TR0=0;
  119.         write_com(0xc0+10);                   //秒
  120.         write_com(0x0f);            //光标开始闪烁
  121.         break;

  122.         case 2:
  123.         write_com(0xc0+7);                  //分
  124.         break;

  125.         case 3:                               //时
  126.         write_com(0xc0+4);
  127.         break;

  128.         case 4:
  129.         write_com(0x80+12);                   //天
  130.         break;

  131.         case 5:
  132.         write_com(0x80+9);                   //月
  133.         break;

  134.         case 6:
  135.         write_com(0x80+4);                    //年
  136.         break;

  137.         case 7:
  138.         key1num=0;
  139.         write_com(0x0c);//取消光标闪烁
  140.         TR0=1;


  141.       }
  142.      }
  143.    }
  144.    if(key1num!=0)
  145.    {
  146.    if(key2==0)
  147.    {
  148.      delayms(5);
  149.      if(key2==0)
  150.      {
  151.          while(!key2);
  152.         if(key1num==1)
  153.         {
  154.            miao++;
  155.            if(miao==60)
  156.             miao=0;
  157.             write_sfm(10,miao);
  158.           }
  159.           if(key1num==2)
  160.           {
  161.             fen++;
  162.             if(fen==60)
  163.             fen=0;
  164.             write_sfm(7,fen);
  165.           }
  166.           if(key1num==3)
  167.           {
  168.             shi++;
  169.             if(shi==24)
  170.             shi=0;
  171.             write_sfm(4,shi);
  172.           }
  173.            if(key1num==4)
  174.           {
  175.             tian++;
  176.             if(tian==tianmax)
  177.             tian=1;
  178.             write_ry(12,tian);
  179.           }
  180.            if(key1num==5)
  181.           {
  182.             yue++;
  183.             if(yue==13)
  184.             yue=1;
  185.             write_ry(9,yue);
  186.           }
  187.           if(key1num==6)
  188.           {
  189.             nian++;
  190.             write_nian1();
  191.           }

  192.      }
  193.    }
  194.     if(key3==0)
  195.    {
  196.      delayms(5);
  197.      if(key3==0)
  198.      {
  199.          while(!key3);
  200.         if(key1num==1)
  201.         {
  202.            miao--;
  203.            if(miao==-1)
  204.             miao=59;
  205.             write_sfm(10,miao);
  206.           }
  207.           if(key1num==2)
  208.           {
  209.             fen--;
  210.             if(fen==-1)
  211.             fen=59;
  212.             write_sfm(7,fen);
  213.           }
  214.           if(key1num==3)
  215.           {
  216.             shi--;
  217.             if(shi==-1)
  218.             shi=23;
  219.             write_sfm(4,shi);
  220.           }
  221.            if(key1num==4)
  222.           {
  223.             tian--;
  224.             tianmax=tianmax-1;
  225.             if(tian==0)
  226.             tian=tianmax;
  227.             write_ry(12,tian);
  228.           }
  229.            if(key1num==5)
  230.           {
  231.             yue--;
  232.             if(yue==0)
  233.             yue=12;
  234.             write_ry(9,yue);
  235.           }
  236.           if(key1num==6)
  237.           {
  238.             nian--;
  239.             write_nian1();
  240.           }
  241.         }
  242.       }
  243. if(key4==0)     //走动
  244. {
  245.    delayms(5);
  246.    if(key4==0)
  247.    {
  248.      key1num=0;
  249.         write_com(0x0c);//取消光标闪烁
  250.         TR0=1;
  251.    }
  252.    while(!key3);
  253. }
  254.    }
  255. }
  256. void T0_time()interrupt 1
  257. {
  258.    
  259.   TH0=(65536-57000)/256;
  260.   TL0=(65536-57000)%256;
  261.   count++;
  262.   if(count==20)
  263.   {
  264.       count=0;
  265.       miao++;
  266.       if(miao==60)
  267.       {
  268.           miao=0;
  269.         fen++;
  270.         if(fen==60)
  271.         {
  272.             fen=0;
  273.           shi++;
  274.             if(shi==24)
  275.             {
  276.                shi=0;
  277.              tian++;
  278.               if(tian==tianmax)
  279.               {
  280.                  tian=1;
  281.                 yue++;
  282.                   if(yue==13)
  283.                   {
  284.                      yue=1;
  285.                     nian++;
  286.                      if(nian==9999)
  287.                      {
  288.                        nian=0;
  289.                      }
  290.                       write_nian1();
  291.                    }
  292.                  write_ry(9,yue);
  293.                 }
  294.                write_ry(12,tian);
  295.               }
  296.               write_sfm(4,shi);
  297.             }
  298.             write_sfm(7,fen);
  299.             }
  300.            write_sfm(10,miao);
  301.    }
  302. }
  303. void daymax()//最大天数
  304. {
  305. switch(yue)
  306. {
  307.   case 1:
  308.   case 3:
  309.   case 5:
  310.   case 7:
  311.   case 8:
  312.   case 10:
  313.   case 12:
  314.   tianmax=32;
  315.   break;

  316.   case 4:
  317.   case 6:
  318.   case 9:
  319.   case 11:
  320.   tianmax=31;
  321.   break;

  322.   case 2:
  323.   if((nian%400==0)||(nian%4==0&&nian%100!=0))//判断润平年
  324.    {
  325.      tianmax=30;
  326.    }
  327.      else
  328.      tianmax=29;
  329.      break;
  330. }
  331. }
  332. void main()
  333. {
  334.     init();
  335.     while(1)
  336.     {
  337.     daymax();
  338.       keyscan();
  339.     }
  340. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-12-16 21:40 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:430571 发表于 2018-12-16 21:58 | 只看该作者
admin 发表于 2018-12-16 21:40
补全原理图或者详细说明一下电路连接即可获得100+黑币

附件中有详解

液晶万年历实践论文.doc

660 KB, 下载次数: 10, 下载积分: 黑币 -5

含原理图

评分

参与人数 1黑币 +90 收起 理由
admin + 90 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

地板
ID:430571 发表于 2018-12-16 22:05 | 只看该作者
admin 发表于 2018-12-16 21:40
补全原理图或者详细说明一下电路连接即可获得100+黑币

原理图

万年历(创新周).png (628.76 KB, 下载次数: 13)

万年历(创新周).png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表