找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的无DS1302 LCD1602电子时钟闹钟源码

[复制链接]
跳转到指定楼层
楼主
ID:305386 发表于 2018-8-1 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机的电子时钟,闹钟。无DS1302仅仅用定时器,LCD1602做成的闹钟,星期跟日期可以分开写的,但无润平年之分和无月份天数区分。

单片机源程序如下:
  1. #include"reg52.h"

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. #define datapins P0

  5. sbit E=P2^7;
  6. sbit RW=P2^5;
  7. sbit RS=P2^6;
  8. sbit beep=P1^5;
  9. sbit k1=P1^4;                                                                         //时钟功能键
  10. sbit k2=P1^3;                                                                         //增大键
  11. sbit k3=P1^2;                                                                        //减小键
  12. sbit k4=P1^1;                                                                        //闹钟功能键  

  13. u8 k1num,knnum,shi,fen,miao,nian,yue,ri,nshi,nfen,nmiao,nnian,nyue,nri,i,count,we,nwe;
  14. void delay(u16 c);                                                             //延时函数 误差 0us
  15. void LcdWriteCom(u8 com);                                                 //LCD1602写入8位命令子函数        
  16. void LcdWriteData(u8 dat);                                                 //LCD1602写入8位数据子函数        
  17. void init();                                                                        //初始化程序
  18. void keyscan();                                                                         //按键程序
  19. void di();                                                                                  //发声函数
  20. void write_sfm(u8 add,u8 date);                                        //时间调节
  21. void write_sfm1(u8 add,u8 date);                                //时间调节
  22. void write_nyr(u8 add,u8 date);                                        //时间调节
  23. void write_nyr1(u8 add,u8 date);                                //时间调节
  24. void lcd_init();                                                                //LCD1602初始化函数

  25. void delay(u16 c)                                                           //延时 误差 0us
  26. {
  27.     u16 a,b;
  28.         for (;c>0;c--)
  29.         {
  30.                  for(b=199;b>0;b--)
  31.                  {
  32.                           for(a=1;a>0;a--);
  33.                  }      
  34.         }           
  35. }

  36. void lcd_init()                                                                        //lcd初始化函数
  37. {
  38.         E=0;
  39.         RW=0;
  40.         RS=0;
  41.         LcdWriteCom(0x38);                                                  //开显示
  42.         LcdWriteCom(0x0c);                                                  //开显示不显示光标
  43.         LcdWriteCom(0x06);                                                  //写一个指针加1
  44.         LcdWriteCom(0x80);                                                  //设置数据指针起点
  45. }

  46. void di()                                                                                //发出di声
  47. {
  48.         beep=0;
  49.         delay(100);
  50.         beep=1;
  51. }
  52. void LcdWriteCom(u8 com)                                                //写入命令
  53. {                                
  54.          
  55.         datapins=com;                                                             //放入命令
  56.         delay(1);                                                                          //等待数据稳定
  57.         E=1;                                                                         //写入时序
  58.         delay(5);                                                                           //保持时间
  59.         E=0;
  60. }
  61. void LcdWriteData(u8 dat)                                                //写入数据
  62. {                                                                          
  63.         E=0;                                                                                //使能清零
  64.         RS=1;                                                                                //选择输入数据
  65.         RW=0;                                                                                //选择写入
  66.         datapins=dat;                                                                 //写入数据
  67.         delay(1);
  68.         E = 1;                                                                          //写入时序
  69.         delay(5);                                                                   //保持时间
  70.         E = 0;
  71. }
  72. void write_sfm(u8 add,u8 date)                                        //时间调节
  73. {

  74.         u16 sh,ge;
  75.         sh=date/10;
  76.         ge=date%10;
  77.         lcd_init();
  78.          LcdWriteCom(0x80+0x40+add);
  79.         LcdWriteData(0x30+sh);
  80.         LcdWriteData(0x30+ge);

  81. }
  82. void write_sfm1(u8 add,u8 date)                                        //定时器用时间调节
  83. {
  84.         u16 sh,ge;
  85.         sh=date/10;
  86.         ge=date%10;
  87.         if(knnum==0)
  88.         {
  89.         lcd_init();
  90.          LcdWriteCom(0x80+0x40+add);
  91.         LcdWriteData(0x30+sh);
  92.         LcdWriteData(0x30+ge);
  93.         }
  94. }
  95. void write_nyr(u8 add,u8 date)                                        //时间调节
  96. {

  97.         u16 sh,ge;
  98.         sh=date/10;
  99.         ge=date%10;
  100.         lcd_init();
  101.          LcdWriteCom(0x80+add);
  102.         LcdWriteData(0x30+sh);
  103.         LcdWriteData(0x30+ge);

  104. }
  105. void write_nyr1(u8 add,u8 date)                                        //定时器用时间调节
  106. {
  107.         u16 sh,ge;
  108.         sh=date/10;
  109.         ge=date%10;
  110.         if(knnum==0)
  111.         {
  112.         lcd_init();
  113.          LcdWriteCom(0x80+add);
  114.         LcdWriteData(0x30+sh);
  115.         LcdWriteData(0x30+ge);
  116.         }
  117. }
  118. void write_week(u8 we)
  119. {
  120. LcdWriteCom(0x80+13);
  121. switch(we)
  122. {
  123.    case 1:LcdWriteData('M');delay(5);
  124.           LcdWriteData('O');delay(5);
  125.           LcdWriteData('N');
  126.                   break;
  127.    case 2:LcdWriteData('T');delay(5);
  128.           LcdWriteData('U');delay(5);
  129.           LcdWriteData('E');
  130.                   break;
  131.    case 3:LcdWriteData('W');delay(5);
  132.           LcdWriteData('E');delay(5);
  133.           LcdWriteData('D');
  134.                   break;
  135.    case 4:LcdWriteData('T');delay(5);
  136.           LcdWriteData('H');delay(5);
  137.           LcdWriteData('U');
  138.                   break;
  139.    case 5:LcdWriteData('F');delay(5);
  140.           LcdWriteData('R');delay(5);
  141.           LcdWriteData('T');
  142.                   break;
  143.    case 6:LcdWriteData('S');delay(5);
  144.           LcdWriteData('A');delay(5);
  145.           LcdWriteData('T');
  146.                   break;
  147.    case 7:LcdWriteData('S');delay(5);
  148.           LcdWriteData('U');delay(5);
  149.           LcdWriteData('N');
  150.                   break;
  151. }
  152. }
  153. void write_week1(u8 nwe)
  154. {
  155. LcdWriteCom(0x80+13);
  156. switch(nwe)
  157. {
  158.    case 1:LcdWriteData('M');delay(5);
  159.           LcdWriteData('O');delay(5);
  160.           LcdWriteData('N');
  161.                   break;
  162.    case 2:LcdWriteData('T');delay(5);
  163.           LcdWriteData('U');delay(5);
  164.           LcdWriteData('E');
  165.                   break;
  166.    case 3:LcdWriteData('W');delay(5);
  167.           LcdWriteData('E');delay(5);
  168.           LcdWriteData('D');
  169.                   break;
  170.    case 4:LcdWriteData('T');delay(5);
  171.           LcdWriteData('H');delay(5);
  172.           LcdWriteData('U');
  173.                   break;
  174.    case 5:LcdWriteData('F');delay(5);
  175.           LcdWriteData('R');delay(5);
  176.           LcdWriteData('T');
  177.                   break;
  178.    case 6:LcdWriteData('S');delay(5);
  179.           LcdWriteData('A');delay(5);
  180.           LcdWriteData('T');
  181.                   break;
  182.    case 7:LcdWriteData('S');delay(5);
  183.           LcdWriteData('U');delay(5);
  184.           LcdWriteData('N');
  185.                   break;
  186. }
  187. }
  188. void init()                                                                                //初始化程序
  189. {                                                                        
  190.          E=0;                                                                  
  191.         RW=0;
  192.         RS=0;                                                            
  193.         shi=23;
  194.         fen=59;
  195.         miao=55;
  196.         nian=18;
  197.         yue=7;
  198.         ri=30;
  199.     we=1;
  200.         nwe=2;
  201.         k1num=0;                                                                        //时钟k1计数
  202.         knnum=0;                                                                        //闹钟k4计数
  203.         nshi=0;
  204.         nfen=0;
  205.         nmiao=5;
  206.         nnian=18;
  207.         nyue=8;
  208.         nri=1;                                                
  209.     LcdWriteCom(0x38);                                                  //开显示
  210.         LcdWriteCom(0x0c);                                                  //开显示不显示光标
  211.         LcdWriteCom(0x06);                                                  //写一个指针加1
  212.         LcdWriteCom(0x01);                                                  //清屏
  213.         LcdWriteCom(0x80);                                                  //设置数据指针起点
  214.                                    delay(5);
  215.         RW=0;
  216.         RS=0;
  217.          E=0;
  218.         LcdWriteCom(0x38);                                                  //开显示
  219.         LcdWriteCom(0x0c);                                                  //写一个指针加1
  220.         LcdWriteCom(0x80+0x40);                                                //开显示不显示光标
  221.         LcdWriteCom(0x06);                                                  //显示时钟标志

  222.         LcdWriteData('S');
  223.         LcdWriteData('H');
  224.         LcdWriteData('I');

  225.         RW=0;
  226.         RS=0;
  227.         E=0;
  228.         LcdWriteCom(0x80+0x40+9);
  229.         LcdWriteData(':');
  230.         RW=0;                           
  231.         RS=0;
  232.         E=0;
  233.         LcdWriteCom(0x80+0x40+6);
  234.         LcdWriteData(':');

  235.         RW=0;                           
  236.         RS=0;
  237.         E=0;
  238.         LcdWriteCom(0x80+2);
  239.         LcdWriteData('2');
  240.         LcdWriteData('0');

  241.         RW=0;                           
  242.         RS=0;
  243.         E=0;
  244.         LcdWriteCom(0x80+6);
  245.         LcdWriteData('-');

  246.         RW=0;                           
  247.         RS=0;
  248.         E=0;
  249.         LcdWriteCom(0x80+9);
  250.         LcdWriteData('-');
  251.         
  252.         RW=0;                           
  253.         RS=0;
  254.         E=0;
  255.         LcdWriteCom(0x80+13);
  256.         write_week(we);
  257.                                  
  258.         write_sfm(4,shi);
  259.         write_sfm(7,fen);
  260.         write_sfm(10,miao);
  261.         write_nyr(4,nian);
  262.         write_nyr(7,yue);
  263.         write_nyr(10,ri);
  264.         write_week(we);               
  265.         TMOD|=0x01;                                                                        //设置定时器0工作模式1
  266.         TH0=(65536-50000)/256;                                                //定时器初装
  267.         TL0=(65536-50000)%256;
  268.         EA=1;                                                                                //打开总中断
  269.         ET0=1;                                                                                //打开定时器0中断
  270.         TR0=1;                                                                                //启动定时器0         
  271. }                                                                          
  272. void keyscan()                                                                        //按键调节
  273. {        
  274.         if(k4==0&&k1num==0)                                                        //进入闹钟调节
  275.         {
  276.                 delay(5);
  277.                 if(k4==0)
  278.                 {
  279.                         knnum++;
  280.                         while(!k4);                                                        //检查按键松开
  281.                         di();
  282.                         if(knnum==1)
  283.                         {
  284.                                 E=0;
  285.                                 RS=0;
  286.                                 RW=0;
  287.                                 LcdWriteCom(0x80+0x40);                        //显示闹钟标志
  288.                                 LcdWriteData('N');
  289.                                 LcdWriteData('A');
  290.                                 LcdWriteData('O');
  291.                                 E=0;
  292.                                 RS=0;
  293.                                 RW=0;                                                               
  294.                                 LcdWriteCom(0x80+0x40+6);                //在时分之间显示":"        
  295.                                 LcdWriteData(':');        
  296.                                 delay(5);
  297.                                 E=0;
  298.                                 RS=0;
  299.                                 RW=0;        
  300.                                 LcdWriteCom(0x80+0x40+9);                //在分秒之间显示":"        
  301.                                 LcdWriteData(':');

  302.                                 delay(5);
  303.                                 write_sfm(4,nshi);
  304.                                 write_sfm(7,nfen);
  305.                                 write_sfm(10,nmiao);
  306.                             write_nyr(4,nian);
  307.                     write_nyr(7,yue);
  308.                     write_nyr(10,ri);
  309.                                 write_week(we);
  310.                                 E=0;
  311.                                 RS=0;
  312.                                 RW=0;
  313.                                 LcdWriteCom(0x80+0x40+4);                //光标指向时
  314.                                 LcdWriteCom(0x0f);                                //开启光标
  315.                         }
  316.                         if(knnum==2)
  317.                         {
  318.                                 LcdWriteCom(0x80+0x40+7);                 //光标移动到fen                                    
  319.                         }
  320.                         if(knnum==3)
  321.                         {
  322.                                 LcdWriteCom(0x80+0x40+10) ;                //光标移动到miao
  323.                         }
  324.                         if(knnum==4)
  325.                         {
  326.                                 LcdWriteCom(0x80+4) ;                //光标移动到nian
  327.                         }
  328.                         if(knnum==5)
  329.                         {
  330.                                 LcdWriteCom(0x80+7) ;                //光标移动到yue
  331.                         }
  332.                         if(knnum==6)
  333.                         {
  334.                                 LcdWriteCom(0x80+10) ;                //光标移动到ri
  335.                         }
  336.                         if(knnum==7)
  337.                         {
  338.                             LcdWriteCom(0x80+13);                //光标移动到week
  339.                         }
  340.                         if(knnum==8)
  341.                         {
  342.                                 knnum=0;                                                //按键次数清零                                                                                
  343.                                 LcdWriteCom(0x0c);                                //取消光标闪烁        
  344.                                 TR0=0;
  345.                                 E=0;
  346.                                 RS=0;
  347.                                 RW=0;
  348.                                 write_sfm(4,shi);
  349.                                 write_sfm(7,fen);
  350.                                 write_sfm(10,miao);
  351.                             write_nyr(4,nian);
  352.                     write_nyr(7,yue);
  353.                     write_nyr(10,ri);
  354.                                 write_week(we);
  355.                                 TR0=1;
  356.                                 E=0;
  357.                                 RS=0;
  358.                                 RW=0;                                
  359.                                 LcdWriteCom(0x80+0x40);                        //显示时钟标志               
  360.                                 LcdWriteData('S');
  361.                                 LcdWriteData('H');
  362.                                 LcdWriteData('I');
  363.                         }

  364.                 }
  365.         }
  366. /**********************闹钟增大**********************************/                        
  367.         if(knnum!=0)
  368.         {
  369.                 if(k2==0)
  370.                 {
  371.                         delay(5);
  372.                         if(k2==0)
  373.                         {
  374.                                 while(!k2);                                                                //确认按键释放
  375.                                 di();
  376.                                 if(knnum==1)
  377.                                 {
  378.                                         nshi++;                                                                //shi加1
  379.                                         if(nshi==24)                                                //shi满24清零
  380.                                                 nshi=0;                                                                        
  381.                                         write_sfm(4,nshi);
  382.                                         E=0;
  383.                                         RW=0;
  384.                                         RS=0;
  385.                                         LcdWriteCom(0x0f);                        
  386.                                         LcdWriteCom(0x80+0x40+4);                          //显示重新回到调节处
  387.                                                 
  388.                                 }
  389.                                 if(knnum==2)
  390.                                 {
  391.                                         nfen++;
  392.                                         if(nfen==60)
  393.                                                 nfen=0;
  394.                                         write_sfm(7,nfen);
  395.                                         RW=0;
  396.                                         RS=0;
  397.                                         E=0;
  398.                                         LcdWriteCom(0x0f);
  399.                                         LcdWriteCom(0x80+0x40+7);                        //显示重新回到调节处
  400.                                 }
  401.                                 if(knnum==3)
  402.                                 {
  403.                                         nmiao++;
  404.                                         if(nmiao==60)
  405.                                                 nmiao=0;
  406.                                         write_sfm(10,nmiao);
  407.                                         RW=0;
  408.                                         RS=0;
  409.                                         E=0;
  410.                                         LcdWriteCom(0x0f);
  411.                                         LcdWriteCom(0x80+0x40+10);                         //显示重新回到调节处
  412.                                 }
  413.                                 if(knnum==4)
  414.                                         {
  415.                                                 nnian++;                                                //nian减1
  416.                                                 if(nnian==21)                                        //nian小于零回到最大
  417.                                                         nnian=10;
  418.                                                 write_nyr(4,nnian);
  419.                                                 RW=0;
  420.                                                 RS=0;
  421.                                                 E=0;
  422.                                                 LcdWriteCom(0x0f);
  423.                                                 LcdWriteCom(0x80+4);          //显示重新回到调节处
  424.                                         }
  425.                                         if(knnum==5)
  426.                                         {
  427.                                                 nyue++;
  428.                                                 if(nyue==13)
  429.                                                         nyue=1;
  430.                                                 write_nyr(7,nyue);
  431.                                                 RW=0;
  432.                                                 RS=0;
  433.                                                 E=0;
  434.                                                 LcdWriteCom(0x0f);
  435.                                                 LcdWriteCom(0x80+7);        //显示重新回到调节处
  436.                                         }
  437.                                         if(knnum==6)
  438.                                         {
  439.                                                 nri++;
  440.                                                 if(nri==31)
  441.                                                         nri=1;
  442.                                                 write_nyr(10,nri);
  443.                                                 RW=0;
  444.                                                 RS=0;
  445.                                                 E=0;
  446.                                                 LcdWriteCom(0x0f);
  447.                                                 LcdWriteCom(0x80+10);        //显示重新回到调节处
  448.                                         }
  449.                                         if(knnum==7)
  450.                                         {
  451.                                                 nwe++;
  452.                                                  if(nwe==8)
  453.                                                         nwe=1;
  454.                                                 write_week1(nwe);
  455.                                                 RW=0;
  456.                                                 RS=0;
  457.                                                 E=0;
  458.                                                 LcdWriteCom(0x0f);
  459.                                                 LcdWriteCom(0x80+13);        //显示重新回到调节处
  460.                                         }
  461.                         }
  462.                 }  
  463. /************************闹钟减小*********************************/
  464.                         if(k3==0)
  465.                         {
  466.                                 delay(5);
  467.                                 if(k3==0)
  468.                                 {
  469.                                         while(!k3);                                                        //确认按键释放
  470.                                         di();
  471.                                         if(knnum==1)
  472.                                         {
  473.                                                 nshi--;                                                        //nshi减1
  474.                                                 if(nshi==-1)                                        //nshi等于-1回到最大
  475.                                                         nshi=23;
  476.                                                 write_sfm(4,nshi);
  477.                                                 RW=0;
  478.                                                 RS=0;
  479.                                                 E=0;
  480.                                                 LcdWriteCom(0x0f);
  481.                                                 LcdWriteCom(0x80+0x40+4);                  //显示重新回到调节处
  482.                                         }
  483.                                         if(knnum==2)
  484.                                         {                                                                        
  485.                                                 nfen--;                                                        //nfen减1
  486.                                                 if(nfen==-1)                                        //nfen等于-1回到最大
  487.                                                         nfen=59;
  488.                                                 write_sfm(7,nfen);
  489.                                                 RW=0;
  490.                                                 RS=0;
  491.                                                 E=0;
  492.                                                 LcdWriteCom(0x0f);
  493.                                                 LcdWriteCom(0x80+0x40+7);                //显示重新回到调节处
  494.                                         }
  495.                                         if(knnum==3)
  496.                                         {                                                                        
  497.                                                 nmiao--;                                                //nmiao减1
  498.                                                 if(nmiao==-1)                                        //nmiao等于-1回到最大
  499.                                                         nmiao=59;
  500.                                                 write_sfm(10,nmiao);
  501.                                                 RW=0;
  502.                                                 RS=0;
  503.                                                 E=0;
  504.                                                 LcdWriteCom(0x0f);
  505.                                                 LcdWriteCom(0x80+0x40+10);                 //显示重新回到调节处
  506.                                         }
  507.                                         if(knnum==4)
  508.                                         {
  509.                                                 nnian--;                                                //nian减1
  510.                                                 if(nnian==9)                                        //nian小于零回到最大
  511.                                                         nnian=20;
  512.                                                 write_nyr(4,nnian);
  513.                                                 RW=0;
  514.                                                 RS=0;
  515.                                                 E=0;
  516.                                                 LcdWriteCom(0x0f);
  517.                                                 LcdWriteCom(0x80+4);          //显示重新回到调节处
  518.                                         }
  519.                                         if(knnum==5)
  520.                                         {
  521.                                                 nyue--;
  522.                                                 if(nyue==0)
  523.                                                         nyue=12;
  524.                                                 write_nyr(7,nyue);
  525.                                                 RW=0;
  526.                                                 RS=0;
  527.                                                 E=0;
  528.                                                 LcdWriteCom(0x0f);
  529.                                                 LcdWriteCom(0x80+7);        //显示重新回到调节处
  530.                                         }
  531.                                         if(knnum==6)
  532.                                         {
  533.                                                 nri--;
  534.                                                 if(nri==0)
  535.                                                         nri=30;
  536.                                                 write_nyr(10,nri);
  537.                                                 RW=0;
  538.                                                 RS=0;
  539.                                                 E=0;
  540.                                                 LcdWriteCom(0x0f);
  541.                                                 LcdWriteCom(0x80+10);        //显示重新回到调节处
  542.                                         }
  543.                                         if(knnum==7)
  544.                                         {
  545.                                                 nwe--;
  546.                                                  if(nwe==0)
  547.                                                         nwe=7;
  548.                                                 write_week1(nwe);
  549.                                                 RW=0;
  550.                                                 RS=0;
  551.                                                 E=0;
  552.                                                 LcdWriteCom(0x0f);
  553.                                                 LcdWriteCom(0x80+13);        //显示重新回到调节处
  554.                                         }
  555.                                 }
  556.                         }
  557.                 }                        

  558.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  559. /****************************************************************/                        
  560.         if(k1==0&&knnum==0)                                                        //进入时钟调节
  561.         {
  562.                 delay(5);
  563.                 if(k1==0)
  564.                 {
  565.                          k1num++;
  566.                         while(!k1);        
  567.                         di();
  568.                         if(k1num==1)
  569.                         {
  570.                                  TR0=0;                                                        //关闭定时器
  571.                                 E=0;
  572.                                 RW=0;
  573.                                 RS=0;                                                        
  574.                                 LcdWriteCom(0x80+0x40+4);                //光标移动到shi
  575.                                 LcdWriteCom(0x0f);                                 //光标闪烁
  576.                         }
  577.                         if(k1num==2)
  578.                         {
  579.                                 LcdWriteCom(0x80+0x40+7);                 //光标移动到fen
  580.                         }
  581.                         if(k1num==3)
  582.                         {
  583.                                 LcdWriteCom(0x80+0x40+10);                //光标移动到miao
  584.                         }
  585.                         if(k1num==4)
  586.                         {
  587.                                 LcdWriteCom(0x80+4) ;                //光标移动到nian
  588.                         }
  589.                         if(k1num==5)
  590.                         {
  591.                                 LcdWriteCom(0x80+7) ;                //光标移动到yue
  592.                         }
  593.                         if(k1num==6)
  594.                         {
  595.                                 LcdWriteCom(0x80+10) ;                //光标移动到ri
  596.                         }
  597.                         if(k1num==7)
  598.                         {
  599.                             LcdWriteCom(0x80+13);                //光标移动到week
  600.                         }
  601.                         if(k1num==8)
  602.                         {
  603.                                 k1num=0;                                                //按键次数清零
  604.                                 LcdWriteCom(0x0c);                                //取消光标闪烁
  605.                                 TR0=1;                                                        //计时启动
  606.                         }
  607.                 }
  608.         }
  609. /**********************增大***************************************/                        
  610.                 if(k1num!=0)
  611.                 {
  612.                         if(k2==0)
  613.                         {
  614.                                 delay(5);
  615.                                 if(k2==0)
  616.                                 {
  617.                                         while(!k2);                                        //确认按键释放
  618.                                         di();
  619.                                         if(k1num==1)
  620.                                         {
  621.                                                 shi++;                                                //shi加1
  622.                                                 if(shi==24)                                        //shi满24清零
  623.                                                         shi=0;                                                                        
  624.                                                 write_sfm(4,shi);
  625.                                                 RW=0;
  626.                                                 RS=0;
  627.                                                 E=0;
  628.                                                 LcdWriteCom(0x0f);                        
  629.                                                 LcdWriteCom(0x80+0x40+4);          //显示重新回到调节处
  630.                                                 
  631.                                         }
  632.                                         if(k1num==2)
  633.                                         {
  634.                                                 fen++;
  635.                                                 if(fen==60)
  636.                                                         fen=0;
  637.                                                 write_sfm(7,fen);
  638.                                                 RW=0;
  639.                                                 RS=0;
  640.                                                 E=0;
  641.                                                 LcdWriteCom(0x0f);
  642.                                                 LcdWriteCom(0x80+0x40+7);        //显示重新回到调节处
  643.                                         }
  644.                                         if(k1num==3)
  645.                                         {
  646.                                                 miao++;
  647.                                                 if(miao==60)
  648.                                                         miao=0;
  649.                                                 write_sfm(10,miao);
  650.                                                 RW=0;
  651.                                                 RS=0;
  652.                                                 E=0;
  653.                                                 LcdWriteCom(0x0f);
  654.                                                 LcdWriteCom(0x80+0x40+10);         //显示重新回到调节处
  655.                                         }
  656.                                         if(k1num==4)
  657.                                         {
  658.                                                 nian++;                                                //nian减1
  659.                                                 if(nian==21)                                        //nian小于零回到最大
  660.                                                         nian=10;
  661.                                                 write_nyr(4,nian);
  662.                                                 RW=0;
  663.                                                 RS=0;
  664.                                                 E=0;
  665.                                                 LcdWriteCom(0x0f);
  666.                                                 LcdWriteCom(0x80+4);          //显示重新回到调节处
  667.                                         }
  668.                                         if(k1num==5)
  669.                                         {
  670.                                                 yue++;
  671.                                                 if(yue==13)
  672.                                                         yue=1;
  673.                                                 write_nyr(7,yue);
  674.                                                 RW=0;
  675.                                                 RS=0;
  676.                                                 E=0;
  677.                                                 LcdWriteCom(0x0f);
  678.                                                 LcdWriteCom(0x80+7);        //显示重新回到调节处
  679.                                         }
  680.                                         if(k1num==6)
  681.                                         {
  682.                                                 ri++;
  683.                                                 if (ri==31)
  684.                                                         ri=1;
  685.                                                 write_nyr(10,ri);
  686.                                                 RW=0;
  687.                                                 RS=0;
  688.                                                 E=0;
  689.                                                 LcdWriteCom(0x0f);
  690.                                                 LcdWriteCom(0x80+10);        //显示重新回到调节处
  691.                                         }
  692.                                         if(k1num==7)
  693.                                         {
  694.                                                 we++;
  695.                                                  if(we==8)
  696.                                                         we=1;
  697.                                                 write_week(we);
  698.                                                 RW=0;
  699.                                                 RS=0;
  700.                                                 E=0;
  701.                                                 LcdWriteCom(0x0f);
  702.                                                 LcdWriteCom(0x80+13);        //显示重新回到调节处
  703.                                         }
  704.                                 }
  705.                         }  
  706. /************************减小*********************************/
  707.                         if(k3==0)
  708.                         {
  709.                                 delay(5);
  710.                                 if(k3==0)
  711.                                 {
  712.                                         while(!k3);                                                //确认按键释放
  713.                                         di();
  714.                                         if(k1num==1)
  715.                                         {
  716.                                                 shi--;                                                //shi减1
  717.                                                 if(shi==-1)                                        //shi小于零回到最大
  718.                                                         shi=23;
  719.                                                 write_sfm(4,shi);
  720.                                                 RW=0;
  721.                                                 RS=0;
  722.                                                 E=0;
  723.                                                 LcdWriteCom(0x0f);
  724.                                                 LcdWriteCom(0x80+0x40+4);          //显示重新回到调节处
  725.                                         }
  726.                                         if(k1num==2)
  727.                                         {
  728.                                                 fen--;
  729.                                                 if(fen==-1)
  730.                                                         fen=59;
  731.                                                 write_sfm(7,fen);
  732.                                                 RW=0;
  733.                                                 RS=0;
  734.                                                 E=0;
  735.                                                 LcdWriteCom(0x0f);
  736.                                                 LcdWriteCom(0x80+0x40+7);        //显示重新回到调节处
  737.                                         }
  738.                                         if(k1num==3)
  739.                                         {
  740.                                                 miao--;
  741.                                                 if (miao==-1)
  742.                                                         miao=59;
  743.                                                 write_sfm(10,miao);
  744.                                                 RW=0;
  745.                                                 RS=0;
  746.                                                 E=0;
  747.                                                 LcdWriteCom(0x0f);
  748.                                                 LcdWriteCom(0x80+0x40+10);        //显示重新回到调节处
  749.                                         }
  750.                                         if(k1num==4)
  751.                                         {
  752.                                                 nian--;                                                //nian减1
  753.                                                 if(nian==9)                                        //nian小于零回到最大
  754.                                                         nian=20;
  755.                                                 write_nyr(4,nian);
  756.                                                 RW=0;
  757.                                                 RS=0;
  758.                                                 E=0;
  759.                                                 LcdWriteCom(0x0f);
  760.                                                 LcdWriteCom(0x80+4);          //显示重新回到调节处
  761.                                         }
  762.                                         if(k1num==5)
  763.                                         {
  764.                                                 yue--;
  765.                                                 if(yue==0)
  766.                                                         yue=12;
  767.                                                 write_nyr(7,yue);
  768.                                                 RW=0;
  769.                                                 RS=0;
  770.                                                 E=0;
  771.                                                 LcdWriteCom(0x0f);
  772.                                                 LcdWriteCom(0x80+7);        //显示重新回到调节处
  773.                                         }
  774.                                         if(k1num==6)
  775.                                         {
  776.                                                 ri--;
  777.                                                 if (ri==0)
  778.                                                         ri=30;
  779. ……………………

  780. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
新建文件夹.zip (54.31 KB, 下载次数: 53)


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

使用道具 举报

沙发
ID:1 发表于 2018-8-1 23:12 | 只看该作者
补全原理图即可获得积分
回复

使用道具 举报

板凳
ID:470508 发表于 2019-3-13 23:00 | 只看该作者
厉害,赞一个。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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