找回密码
 立即注册

QQ登录

只需一步,快速开始

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

液晶显示日历的单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:428902 发表于 2018-11-26 17:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、   日历功能
A、在此功能执行时,不可影响电子表的正常运行。
B、该模式下可显示年、月、日。
C、使用矩阵键盘调节时间。
D、满足特殊月份3128天规律。
E、满足闰年规律。
2、   秒表功能
A、在此功能执行时,不可影响电子表的正常运行。
B、该模式下可实现秒表计时功能。
C、用一根杜邦线(结合程序)插入所需引脚,使得秒表停止计时,拔下杜邦线可继续计时(此要求下允许电子钟非正常运行,但不得人为不关闭任何定时器)。
3、定时功能
A、在此功能执行时,不可影响电子表的正常运行。

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uint year,year1;
  5. uchar code table[]={"2018-11-07week3"};
  6. uchar code table1[]={"19:29:55 "};         
  7. uchar code table2[]={"0:00:00 "};                  
  8. sbit lcden=P3^4;        //定义液晶使能端
  9. sbit lcdrs=P3^5;        //液晶数据命令选择端
  10. sbit rw=P3^6;                //定义读写选择
  11. sbit k0=P3^5;               
  12. sbit dula=P2^6;                //声明U1锁存端,锁存器
  13. sbit wela=P2^7;                //声明U2锁存端,锁存器
  14. sbit beep=P2^3;
  15. uchar num,num1,a,a2,b,du,shi,shi1,fen,miao,ge,day,mon,week;
  16. uchar flag,flag1,shi,shi2,fen1,miao1,a1,du1,qie,du2,num3,num4;


  17. void delay(uint z)
  18. {
  19.         uint x,y;
  20.         for(x=z;x>0;x--)
  21.                  for(y=110;y>0;y--);
  22. }

  23. void write_com(uchar com)        //写命令操作
  24. {
  25.         rw=0;
  26.         lcdrs=0;        //选择写命令模式
  27.         P0=com;                //将要写的命令字,送到数据总线上
  28.         delay(5);        //稍作延时以待数据稳定
  29.         lcden=1;        //使能端,给一高脉冲,因为初始化函数,已经将使能端置为0
  30.         delay(5);        //稍作延时
  31.         lcden=0;        //使能端0完成高脉冲
  32. }

  33. void write_data(uint date1)                  //写数据操作
  34. {
  35.         rw=0;
  36.         lcdrs=1;
  37.         P0=date1; //写数据
  38.         delay(5);
  39.         lcden=1;
  40.         delay(5);
  41.         lcden=0;
  42. }

  43. void write_sfm(uchar add,uint date1)         //定义小时,分钟,秒的地址和数据
  44. {
  45.         uchar shi,ge;
  46.         shi=date1/10; //将数据分离
  47.         ge=date1%10;

  48.         write_com(0x80+0x40+add);//第二行数据指针位置调整
  49.         write_data(0x30+shi);  //更改显示数据的十位
  50.         write_data(0x30+ge);   //更改显示数据的个位

  51. }

  52. void write_md(uchar add,uint date1)         //定义月份和天地址和数据
  53. {
  54.         uchar shi,ge;
  55.         shi=date1/10; //将数据分离
  56.         ge=date1%10;

  57.         write_com(0x80+add);   //第一行数据指针位置调整
  58.         write_data(0x30+shi);  //更改显示数据的十位
  59.         write_data(0x30+ge);   //更改显示数据的个位
  60. }


  61. void write_y(uchar add,uint date1)         //定义年地址和数据
  62. {
  63.         uchar qian,bai,shi,ge;
  64.         qian=date1/1000;
  65.         bai=date1%1000/100;
  66.         shi=date1%100/10; //将数据分离
  67.         ge=date1%10;

  68.         write_com(0x80+add);//第一行数据指针位置调整
  69.         write_data(0x30+qian);  //更改显示数据的千位
  70.         write_data(0x30+bai);  //更改显示数据的百位
  71.         write_data(0x30+shi);  //更改显示数据的十位
  72.         write_data(0x30+ge);   //更改显示数据的个位
  73. }

  74. //void zhuanhua()
  75. //{
  76. //        switch(week)
  77. //        {
  78. //                case 1:
  79. //                        write_com(0x80+0x40+9);
  80. //                        write_data('M');  delay(5);
  81. //                        write_data('o');  delay(5);
  82. //                        write_data('n');  delay(5);
  83. //                        write_data('d');  delay(5);
  84. //                        write_data('a');  delay(5);
  85. //                        write_data('y');  delay(5);
  86. //                        write_data(' ');
  87. //                        break;
  88. //                case 2:
  89. //                        write_com(0x80+0x40+9);
  90. //                        write_data('T');  delay(5);
  91. //                        write_data('u');  delay(5);
  92. //                        write_data('e');  delay(5);
  93. //                        write_data('s');  delay(5);
  94. //                        write_data('d');  delay(5);
  95. //                        write_data('a');  delay(5);
  96. //                        write_data('y');
  97. //                        break;        
  98. //                case 3:
  99. //                        write_com(0x80+0x40+9);
  100. //                        write_data('W');  delay(5);
  101. //                        write_data('e');  delay(5);
  102. //                        write_data('d');  delay(5);
  103. //                        write_data('n');  delay(5);
  104. //                        write_data('e');  delay(5);
  105. //                        write_data('s');  delay(5);
  106. //                        write_data('d');  
  107. //                        break;               
  108. //                case 4:
  109. //                        write_com(0x80+0x40+9);
  110. //                        write_data('T');  delay(5);
  111. //                        write_data('h');  delay(5);
  112. //                        write_data('u');  delay(5);
  113. //                        write_data('r');  delay(5);
  114. //                        write_data('s');  delay(5);
  115. //                        write_data('d');  delay(5);
  116. //                        write_data('a');
  117. //                        break;        
  118. //                case 5:
  119. //                        write_com(0x80+0x40+9);
  120. //                        write_data('F');  delay(5);
  121. //                        write_data('r');  delay(5);
  122. //                        write_data('i');  delay(5);
  123. //                        write_data('d');  delay(5);
  124. //                        write_data('a');  delay(5);
  125. //                        write_data('y');  delay(5);
  126. //                        write_data(' ');
  127. //                        break;        
  128. //                case 6:
  129. //                        write_com(0x80+0x40+9);
  130. //                        write_data('S');  delay(5);
  131. //                        write_data('a');  delay(5);
  132. //                        write_data('t');  delay(5);
  133. //                        write_data('u');  delay(5);
  134. //                        write_data('r');  delay(5);
  135. //                        write_data('d');  delay(5);
  136. //                        write_data('a');  
  137. //                        break;        
  138. //                case 7:
  139. //                        write_com(0x80+0x40+9);
  140. //                        write_data('S');  delay(5);
  141. //                        write_data('u');  delay(5);
  142. //                        write_data('n');  delay(5);
  143. //                        write_data('d');  delay(5);
  144. //                        write_data('a');  delay(5);
  145. //                        write_data('y');  delay(5);
  146. //                        write_data(' ');
  147. //                        break;                        
  148. //        }
  149. //}

  150. void jianpan()
  151. {
  152.           uchar temp;
  153.           P3=0xfe;
  154.           temp=P3;
  155.           temp=temp&0xf0;
  156.           if(temp!=0xf0)
  157.           {
  158.                   delay(10);
  159.                 temp=P3;
  160.                 temp=temp&0xf0;
  161.                  if(temp!=0xf0)
  162.                  {
  163.                          temp=P3;
  164.                         switch(temp)
  165.                         {
  166.                                 case 0xee:         //显示需要更改地方的光标
  167.                                         du++;
  168.                                         while(temp!=0xf0)  //按键释放,使每按一次只增加一个数
  169.                                         {
  170.                                                 temp=P3;
  171.                                                 temp=temp&0xf0;
  172.                                         }
  173.                                         if(du==1)         //移动光标至秒位置,同时暂停计时
  174.                                         {
  175.                                                 TR0=0;
  176.                                                 write_com(0x80+0x40+6);
  177.                                                 write_com(0x0f);   //显示光标
  178.                                         }
  179.                                         if(du==2)            //移动光标至分位置
  180.                                         {        
  181.                                                 write_com(0x80+0x40+3);
  182.                                         }
  183.                                         if(du==3)                 //移动光标至时位置
  184.                                         {        
  185.                                                 write_com(0x80+0x40+0);
  186.                                         }        
  187.                                         if(du==4)                 //移动光标至天位置
  188.                                         {
  189.                                                 write_com(0x80+8);                                
  190.                                         }        
  191.                                         if(du==5)                  //移动光标至月位置
  192.                                         {        
  193.                                                 write_com(0x80+5);
  194.                                         }               
  195.                                         if(du==6)                  //移动光标至年位置,用于 增加年份
  196.                                         {        
  197.                                                 write_com(0x80+0);
  198.                                         }        
  199.                                         if(du==7)                  //移动光标至周位置
  200.                                         {
  201.                                                 write_com(0x80+14);   //先送地址
  202. //                                                write_data(0x30+week);        //输入的数字
  203.                                         }
  204.                                         if(du==8)                   //移动光标至年位置        减少年份
  205.                                         {        
  206.                                                 write_com(0x80+0);
  207.                                         }                                       
  208.                                         if(du==9)                   //使du循环,恢复定时器
  209.                                         {                                
  210.                                                 TR0=1;
  211.                                                 du=0;
  212.                                                 write_com(0x80+0x40+10);
  213.                                                 write_com(0x0c);   //关光标
  214.                                         }                                                
  215.                         
  216.                                         break;
  217.                                         case 0xde:
  218.                                                 while(temp!=0xf0)          //按键释放
  219.                                                 {
  220.                                                         temp=P3;
  221.                                                         temp=temp&0xf0;
  222.                                                 }
  223.                                                 if(du==1)        //在秒位置时,使秒增加
  224.                                                 {
  225.                                                         miao++;
  226.                                                         if(miao==60)
  227.                                                         {
  228.                                                                 miao=0;
  229.                                                         }
  230.                                                         write_sfm(6,miao);        //更新秒位置数据
  231.                                                 }
  232.                                                 if(du==2)                //在分位置时,使分增加
  233.                                                 {        
  234.                                                         fen++;
  235.                                                         if(fen==60)
  236.                                                         {
  237.                                                                 fen=0;
  238.                                                         }
  239.                                                         write_sfm(3,fen);  //更新秒位置数据
  240.                                                 }
  241.                                                 if(du==3)          //在小时位置时,使小时增加
  242.                                                 {        
  243.                                                         shi++;
  244.                                                         if(shi==24)
  245.                                                         {
  246.                                                                 shi=0;
  247.                                                         }
  248.                                                         if(flag1==0)   //显示24小时模式
  249.                                                         {
  250.                                                                 write_sfm(0,shi);
  251.                                                         }
  252.                                                         if(flag1==1)   //显示12小时模式
  253.                                                         {
  254.                                                                 if(shi==0)
  255.                                                                 {
  256.                                                                         shi=12;
  257.                                                                 }
  258.                                                                 if((shi<=12)&&(shi>=1))
  259.                                                                 {
  260.                                                                         shi1=shi;
  261.                                                                 }
  262.                                                                 if(shi>12)
  263.                                                                 {
  264.                                                                         shi1=shi-12;
  265.                                                                 }
  266.                                                                 write_sfm(0,shi1);           //更新12小时模式的数据
  267.                                                                 write_com(0x80+0x40+0);               
  268.                                                         }
  269.                                                 }        
  270.                                                 if(du==4)           //在天位置时,使天增加
  271.                                                 {
  272.                                                         day++;
  273.                                                         if(year%4==0&&year%10!=0)                        //如果是闰年
  274.                                                                 {
  275.                                                                         if(mon==2)
  276.                                                                         {
  277.                                                                                 if(day==30)
  278.                                                                                 {
  279.                                                                                         day=1;                                                
  280.                                                                                 }
  281.                                                                         }
  282.                                                                 }
  283.                                                         if((year%4==0&&year%100==0)||(year%4!=0))                 //如果不是闰年
  284.                                                                 {
  285.                                                                         if(mon==2)  
  286.                                                                         {
  287.                                                                                 if(day==29)         
  288.                                                                                 {                  
  289.                                                                                         day=1;                                                               
  290.                                                                                 }
  291.                                                                         }
  292.                                                                 }        
  293.                                 
  294.                                                                 if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)
  295.                                                                 {
  296.                                                                         if(day==32)
  297.                                                                         {
  298.                                                                                 day=1;                                                
  299.                                                                         }
  300.                                                                 }
  301.                                                                 if(mon==4||mon==6||mon==9||mon==11)
  302.                                                                 {
  303.                                                                         if(day==31)
  304.                                                                         {
  305.                                                                                 day=1;                                                
  306.                                                                         }
  307.                                                                 }
  308.                                                         write_md(8,day);                        
  309.                                                 }        
  310.                                                 if(du==5)        //在月位置时,使月增加
  311.                                                 {        
  312.                                                         mon++;
  313.                                                         if(mon==13)
  314.                                                         {
  315.                                                                 mon=1;
  316.                                                         }
  317.                                                         write_md(5,mon);
  318.                                                 }               
  319.                                                 if(du==6)         //在年位置时,使年增加
  320.                                                 {        
  321.                                                         year++;
  322.                                                         write_y(0,year);
  323.                                                 }
  324.                                                 if(du==7)          //在周位置时,使周增加
  325.                                                 {                          
  326.                                                         week++;
  327.                                                         if(week==8)
  328.                                                         {
  329.                                                                 week=1;
  330.                                                         }
  331.                                                         write_com(0x80+14);   //位置
  332.                                                         write_data(0x30+week);  //显示数据

  333.                                                 }
  334.                                                 if(du==8)        //在天位置时,使年减少
  335.                                                 {        
  336.                                                         year--;
  337.                                                         write_y(0,year);
  338.                                                 }
  339.                                                 break;

  340.                                         case 0xbe:
  341.                                                 flag1++;         //使变量flag1++
  342.                                                 while(temp!=0xf0)
  343.                                                 {
  344.                                                         temp=P3;
  345.                                                         temp=temp&0xf0;
  346.                                                 }
  347.                                                 if(flag1==1)         //如果变量flag1为1那么进行12小时模式
  348.                                                 {
  349.                                                         if(shi==0)
  350.                                                         {
  351.                                                                 shi=12;
  352.                                                         }
  353.                                                         if((shi<=12)&&(shi>=1))
  354.                                                         {
  355.                                                                 write_com(0x80+0x40+8);
  356.                                                                 write_data('+');
  357.                                                                 shi1=shi;
  358.                                                         }
  359.                                                         if(shi>12)
  360.                                                         {
  361.                                                                 write_com(0x80+0x40+8);
  362.                                                                 write_data('-');
  363.                                                                 shi1=shi-12;
  364.                                                         }
  365.                                                         write_sfm(0,shi1);
  366.                                                         write_com(0x80+0x40+0);        
  367.                                                 }
  368.                                                 if(flag1>=2)
  369.                                                 {
  370.                                                         flag1=0;
  371.                                                 }
  372.                                                 if(flag1==0)         //如果变量flag1为1那么进行24小时模式
  373.                                                 {
  374.                                                                 write_sfm(0,shi);
  375.                                                         write_com(0x80+0x40+0);        
  376.                                                 }
  377.                                                 break;        
  378.                                 case 0x7e:
  379.                                         du1++;                //使du1++
  380.                                         while(temp!=0xf0)
  381.                                         {
  382.                                                 temp=P3;
  383.                                                 temp=temp&0xf0;
  384.                                         }               
  385.                                         if(du1==1)          //使定时器1暂停,移动光标至秒表秒位
  386.                                         {
  387.                                                 write_com(0x80+0x40+14);
  388.                                                 TR1=0;
  389.                                                 write_com(0x0f);//显示光标        
  390.                                         }        
  391.                                         if(du1==2)           //移动光标至秒表 分 位
  392.                                         {
  393.                                                 write_com(0x80+0x40+11);        
  394.                                         }        
  395.                                         if(du1==3)                //时 位
  396.                                         {
  397.                                                 write_com(0x80+0x40+9);        
  398.                                         }        
  399.                                         if(du1==4)          //恢复定时器1,返回原位
  400.                                         {
  401.                                                 write_com(0x80+0x40+14);        
  402.                                                 TR1=1;
  403.                                                 write_com(0x0c);  //关闭光标显示
  404.                                         }        
  405.                                         if(du1==5)
  406.                                         {
  407.                                                 du1=0;
  408.                                         }                                                                                                
  409.                                         break;
  410.                         }
  411.                  }
  412.           }
  413.         P3=0xfd;
  414.         temp=P3;
  415.         temp=temp&0xf0;
  416.         if(temp!=0xf0)
  417.         {
  418.                 delay(10);
  419.                 temp=P3;
  420.                 temp=temp&0xf0;
  421.                 if(temp!=0xf0)
  422.                 {
  423.                          temp=P3;
  424.                         switch(temp)
  425.                         {
  426.                                 case 0xed:
  427.                                         while(temp!=0xf0)
  428.                                         {
  429.                                                 temp=P3;
  430.                                                 temp=temp&0xf0;
  431.                                         }        
  432.                                         if(du1==1)
  433.                                         {
  434.                                                 miao1++;   //使秒表光标所在地 秒 加
  435.                                                 if(miao1==60)
  436.                                                 {
  437.                                                         miao1=0;
  438.                                                 }        
  439.                                                 write_sfm(14,miao1);   //更新
  440.                                         }        
  441.                                         if(du1==2)                //分 加
  442.                                         {
  443.                                                 fen1++;
  444.                                                 if(fen1==60)
  445.                                                 {
  446.                                                         fen1=0;
  447.                                                 }        
  448.                                                 write_sfm(11,fen1);
  449.                                         }        
  450.                                         if(du1==3)                //时 加
  451.                                         {
  452.                                                 shi2++;
  453.                                                 if(shi2==60)
  454.                                                 {
  455.                                                         shi2=0;
  456.                                                 }

  457.                                                 write_com(0x80+0x40+9);//第二行数据指针位置调整
  458.                                                 write_data(0x30+shi2);   //更改显示数据的个位
  459.                                         }               
  460.                                         break;

  461.                                 case 0xdd:        
  462.                                         TR1=1;        //开启秒表(初始值正走)                                
  463.                                         break;
  464.                                 case 0xbd:        
  465.                                         qie=1;        //切换 秒表 至倒计时                                       
  466.                                         break;
  467.                                 case 0x7d:        
  468.                                         num4=0;        //切换闹钟铃声 一直响                                       
  469.                                         break;
  470.                         }
  471.             }
  472.         }
  473.         P3=0xfb;
  474.         temp=P3;
  475.         temp=temp&0xf0;
  476.         if(temp!=0xf0)
  477.         {
  478.                 delay(10);
  479.                 temp=P3;
  480.                 temp=temp&0xf0;
  481.                 if(temp!=0xf0)
  482.                 {
  483.                          temp=P3;
  484.                         switch(temp)
  485.                         {
  486.                                 case 0xeb:
  487.                                         num4=1;        //切换闹钟铃声 间断响        
  488.                                         break;
  489.                                 case 0xdb:
  490.                                         qie=0;        //切换 秒表 正计时
  491.                                         break;
  492.                                 case 0xbb:
  493.                                         TR1=0;        //使秒表停止计时
  494.                                         break;
  495.                         }
  496.                 }
  497.         }
  498. }


  499. void shixu1()   //定时器1 秒表 正走时序
  500. {
  501.         if(a1==20)
  502.         {
  503.                 a1=0;
  504.                 miao1++;
  505.                 if(miao1==60)
  506.                 {
  507.                         miao1=0;
  508.                         fen1++;
  509.                         if(fen1==60)
  510.                         {
  511.                                 fen1=0;
  512.                                 shi2++;
  513.                         
  514.                                 if(shi2==10)
  515.                                 {
  516.                                         shi2=0;
  517.                                 }
  518.                                 write_com(0x80+0x40+9);//第二行数据指针位置调整
  519.                                 write_data(0x30+shi2);   //更改显示数据的个位
  520.                         }
  521.                         write_sfm(11,fen1);
  522.                 }
  523.                 write_sfm(14,miao1);
  524.         }        
  525. }
  526. void shixu2()          //定时器1 秒表 倒走时序
  527. {
  528.         if(a1==20)
  529.         {
  530.                 a1=0;
  531.                 miao1--;
  532.                 if(miao1==0&&fen1>=1&&shi2>=1)         //如果在秒为0,时和分钟不为零的情况下
  533.                 {
  534.                         miao1=59;
  535.                         fen1--;
  536.                         if(fen1==0&&shi2>=1)         //如果在分为0,分钟不为零的情况下
  537.                         {
  538.                                 fen1=59;
  539.                                 shi2--;

  540.                                 write_com(0x80+0x40+9);//第二行数据指针位置调整
  541.                                 write_data(0x30+shi2);   //更改显示数据的个位
  542.                         }
  543.                         write_sfm(11,fen1);
  544.                 }
  545.                 write_sfm(14,miao1);
  546.         }        
  547. }

  548. void shixu()   //日历走时序
  549. {
  550.         if(a==20)
  551.         {
  552.                 a=0;
  553.                 miao++;
  554.                 if(miao==60)
  555.                 {
  556.                         miao=0;
  557.                         fen++;
  558.                         if(fen==60)
  559.                         {
  560.                                 fen=0;
  561.                                 shi++;
  562.                                 if(shi==24)
  563.                                 {
  564.                                         shi=0;
  565.                                         day++;
  566.                                         week++;
  567.                                         if(week==7)
  568.                                         {
  569.                                                 week=1;        
  570.                                         }
  571.                                         if(year%4==0&&year%100!=0)        //如果是闰年
  572.                                         {
  573.                                                 if(mon==2)
  574.                                                 {
  575.                                                         if(day==30)
  576.                                                         {
  577.                                                                 day=1;
  578.                                                                 mon++;        
  579.                                                                
  580.                                                                 write_md(5,mon);                                                
  581.                                                         }
  582.                                                 }
  583.                                         }
  584.                                         if((year%4==0&&year%100==0)||(year%4!=0)) //如果不是闰年
  585.                                         {
  586.                                                 if(mon==29)
  587.                                                 {
  588.                                                         if(day==30)
  589.                                                         {
  590.                                                                 day=1;
  591.                                                                 mon++;
  592.                                                                
  593.                                                                 write_md(5,mon);                                                        
  594.                                                         }
  595.                                                 }
  596.                                         }        

  597.                                         if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)
  598.                                         {
  599.                                                 if(day==32)
  600.                                                 {
  601.                                                         day=1;
  602.                                                         mon++;        
  603.                                                         
  604.                                                         write_md(5,mon);                                                
  605.                                                 }
  606.                                         }
  607.                                         if(mon==4||mon==6||mon==9||mon==11)
  608.                                         {
  609.                                                 if(day==31)
  610.                                                 {
  611.                                                         day=1;
  612.                                                         mon++;
  613.                                                         
  614.                                                         write_md(5,mon);                                                        
  615.                                                 }
  616.                                         }
  617.                                 
  618.                                         if(mon==13)
  619.                                         {
  620.                                                 mon=1;
  621.                                                 year++;

  622.                                             write_y(1,year);
  623.                                         }
  624.                                         write_com(0x80+14);   //位置
  625.                                         write_data(0x30+week);  //显示数据
  626. //                                        zhuanhua();
  627.                                         write_md(8,day);                                                                                
  628.                                 }
  629.                                 if(flag1==0)        //切换至24小时模式
  630.                                 {
  631.                                         write_sfm(0,shi);
  632.                                 }
  633.                                 if(flag1==1) //切换至12小时模式
  634.                                 {
  635.                                         if(shi==0)
  636.                                         {
  637.                                                 shi=12;
  638.                                         }
  639.                                         if((shi<=12)&&(shi>=1))
  640.                                         {
  641.                                                 shi1=shi;
  642.                                         }
  643.                                         if(shi>12)
  644.                                         {
  645.                                                 shi1=shi-12;
  646.                                         }
  647.                                         write_sfm(0,shi1);        
  648.                                 }
  649.                         }
  650.                         write_sfm(3,fen);
  651.                 }
  652.                 write_sfm(6,miao);
  653.         }
  654. }
  655.          
  656. void main()
  657. {        
  658.         TMOD=0x11;
  659.         TH0=(65536-45872)/256;
  660.         TL0=(65536-45872)%256;
  661.         TH1=(65536-45872)/256;
  662.         TL1=(65536-45872)%256;
  663.         EA=1;
  664.         ET0=1;
  665.         TR0=1; //定时器0
  666.         ET1=1;
  667.         TR1=0;                        //定时器1,初始关闭运行
  668.         EX0=1;        //外部中断0中断允许位
  669.         IT0=0;        //外部中断0电平触发方式

  670.         shi=19;                //日历初值
  671.         fen=29;
  672.         miao=55;
  673.         day=6;
  674.         mon=11;
  675.         year=2018;
  676.         week=3;

  677.         flag1=0;  //小时为24制
  678.         num4=0;         //闹钟声为1号
  679.         qie=0;        //秒表开启时先为正走

  680.         dula=0;        //关闭段选
  681.         wela=0;        //关闭位选

  682.         lcden=0;           //使能端制0


  683.         write_com(0x38);
  684.         write_com(0x0c);  //开显示,不显示光标
  685.         write_com(0x06);   //写一个地址之后,指针加一
  686.         write_com(0x01);        //显示清0,数据指针清0

  687.         write_com(0x80);        //第一个行显示
  688.         {
  689.                 for(num=0;num<15;num++)
  690.                 {
  691.                         write_data(table[num]);
  692.                         delay(5);               
  693.                 }
  694.                 write_com(0x80+0x40);  //第一个行显示,左边显示数组
  695.                 for(num=0;num<13;num++)
  696.                 {                                                                                                                              
  697.                         write_data(table1[num]);
  698.                         delay(5);                        
  699.                 }
  700.         }
  701.                 write_com(0x80+0x40+9);         //第一个行显示,右边显示数组
  702.                 for(num=0;num<13;num++)
  703.                 {                                                                                                                              
  704.                         write_data(table2[num]);
  705.                         delay(5);                        
  706.                 }        
  707. //                zhuanhua();
  708.         while(1)
  709.         {        
  710.                 jianpan();
  711.                 shixu();

  712.                 if(qie==0)
  713.                 {
  714.                         shixu1(); //秒表正走
  715.                 }
  716.                 if(qie==1)
  717.                 {
  718.                         shixu2();         //秒表倒走
  719.                         if(shi2==0&&fen1==0&&miao1==0)//如果走到0,那么定时器1 暂停k
  720.                         {                        
  721.                                 TR1=0;
  722.                         }
  723.                 }
  724.         }
  725. }
  726.   
  727. void T0_time() interrupt 1        //定时器 中断服务程序k
  728. {
  729.         TH0=(65536-45872)/256;
  730.         TL0=(65536-45872)%256;
  731.         a++;

  732.         if((shi==19&&fen==30)&&(miao<3&&miao>=0))        //如果是在下午19点,30分,那么闹钟响铃3分钟k
  733.         {
  734.                 if(num4==0)                //闹钟铃声1,一直响k
  735.                 {
  736.                         {
  737.                                 beep=0;
  738.                         }
  739.                 }
  740.                 if(num4==1)          //闹钟铃声2,响一秒间断一秒再一秒k
  741.                 {
  742.                         if(miao==0)
  743.                         {
  744.                                 beep=0;
  745.                         }
  746.                         if(miao==1)
  747.                         {
  748.                                 beep=1;
  749.                         }
  750.                         if(miao==2)
  751.                         {
  752.                                 beep=0;
  753.                         }
  754.                 }
  755.         }

  756.         if(shi==19&&fen==30&&miao==3)
  757.         {
  758.                 beep=1;
  759.         }

  760. }

  761. void T1_time() interrupt 3        //定时器1 中断服务程序k
  762. {
  763.         TH1=(65536-45872)/256;
  764.         TL1=(65536-45872)%256;
  765.         a1++;
  766. }

  767.         

  768. void INT0_0() interrupt 0  //外部中断默认中断级别最高A
  769. {
  770. //   TR1=0;        
  771. }



复制代码

所有资料51hei提供下载:
日历.docx (19.08 KB, 下载次数: 11)



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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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