找回密码
 立即注册

QQ登录

只需一步,快速开始

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

自己折腾了几天做的万年历 代码已打包 有视频

[复制链接]
跳转到指定楼层
楼主
自己前几天闲着无事想做点东西,就做这么一个万年历,自己新手一个,写的不咋地,讲究看吧!





单片机源程序
  1. #include<reg52.h>
  2. #include"DS18b20.h"
  3. #include"ds1302.h"
  4. #include"LCD1602.h"

  5. uchar naozhong[16] = {" -~ 00:00:00    "};

  6. uchar c=0,d=0,flag=0,flag1=0,e1=0,e2=0,e3=0,e4=0;
  7. uint aa=0;
  8. bit temp=0,temp1=0,temp2=0,temp3=0;
  9. sbit k1=P3^2;
  10. sbit k3=P3^3;
  11. sbit k2=P3^7;
  12. sbit beep=P3^1;

  13. void LcdDisplay();
  14. void datapros(int temp);
  15. void keys();
  16. void Int0Configuration();
  17. void dingnao();
  18. void jiance();

  19. void main()
  20. {
  21.         beep=0;
  22.         Int0Configuration();
  23.     LcdInit();
  24.         Ds18b20Init();
  25. //        Ds1302Init();
  26.         Ds18b20ReadTemp();
  27.         Delay1ms(20);
  28.         Ds18b20ReadTemp();
  29.         Ds1302ReadTime();
  30.         Delay1ms(20);
  31.         Delay1ms(1500);
  32.         
  33.         while(1)
  34.         {
  35.                 // 55 AA
  36.                 datapros(Ds18b20ReadTemp());
  37.                 Ds1302ReadTime();
  38.                 LcdDisplay();
  39.                 keys();
  40.                 dingnao();
  41.                 jiance();        
  42.         }        
  43. }

  44. void Int0() interrupt 0                 
  45. {
  46.         beep=0;
  47.         Delay1ms(20);
  48.         if((k1==0)&(temp==0))
  49.         {        
  50.                 while(k1==0);        
  51.                 flag++;
  52.                 if(flag>=8) flag=0;               
  53.         }
  54.         if((k1==0)&(temp==1))
  55.         {        
  56.                 while(k1==0);        
  57.                 flag1++;
  58.                 if(flag1>=5)
  59.                 {
  60.                         flag1=0;
  61.                         LcdWriteCom(0x0c);
  62.                 }               
  63.         }
  64. }

  65. void Int1() interrupt 2                 
  66. {
  67.         beep=0;
  68.         Delay1ms(20);
  69.         if((k3==0)&(flag==0)&(flag1==0))
  70.         {        
  71.                 while(k3==0);        
  72.                 temp=~temp;
  73.                 temp1=1;
  74.         }
  75. }

  76. void jiance()
  77. {
  78.         if(naozhong[3]=='*')
  79.         {
  80.                  LcdWriteCom(0x80);
  81.                  LcdWriteData('*');
  82.                  if(naozhong[4]=='0'+(TIME[2]/16))
  83.                  {
  84.                          if(naozhong[5]=='0'+(TIME[2]&0x0f))
  85.                          {
  86.                                  if(naozhong[7]=='0'+(TIME[1]/16))
  87.                                  {
  88.                                          if(naozhong[8]=='0'+(TIME[1]&0x0f))
  89.                                          {
  90.                                                  if(naozhong[10]=='0'+(TIME[0]/16))
  91.                                                  {
  92.                                                          if(naozhong[11]=='0'+(TIME[0]&0x0f))
  93.                                                          {
  94.                                                                  beep=1;
  95.                                                          }
  96.                                                  }
  97.                                          }
  98.                                  }
  99.                          }
  100.                  }
  101.         }
  102.         if(beep==1)
  103.         {
  104.                 if((k1==0)||(k2==0)||(k3==0)) beep=1;
  105.                 aa++;
  106.                 if(aa>1000)
  107.                 {
  108.                         aa=0;
  109.                         beep=0;
  110.                 }
  111.         }        
  112. }

  113. void dingnao()
  114. {
  115.         while(temp)
  116.         {
  117.                 uchar i;
  118.                 if(temp1==1)
  119.                 {
  120.                         temp1=0;
  121.                         LcdWriteCom(0x07);
  122.                         LcdWriteCom(0x80+0X10);
  123.                         for(i=0;i<16;i++) LcdWriteData(0x02);
  124.                         LcdWriteCom(0x06);
  125.                         LcdWriteCom(0x80+0X50);
  126.                         for(i=0;i<16;i++)
  127.                         {
  128.                                 LcdWriteData(naozhong[i]);        
  129.                         }
  130.                 }               
  131.                 temp3=1;temp2=1;
  132.                         /************/
  133.                 if(flag1!=0)
  134.                 {
  135.                         LcdWriteCom(0x0f);
  136.                         if(flag1==1)
  137.                         {
  138.                                 LcdWriteCom(0x80+0X53);
  139.                                 if(k2==0)
  140.                                 {
  141.                                         Delay1ms(10);
  142.                                         if(k2==0)
  143.                                         {                                                
  144.                                                 e1++;
  145.                                                 if(e1==60) e1=0;
  146.                                                 if(e1%2==0)
  147.                                                 {
  148.                                                         naozhong[3]='*';
  149.                                                 LcdWriteData('@');
  150.                                                 }
  151.                                                 else
  152.                                                 {
  153.                                                          naozhong[3]=' ';
  154.                                                 }
  155.                                                 LcdWriteCom(0x80+0X50);
  156.                                                 for(i=0;i<16;i++)
  157.                                                 {
  158.                                                         LcdWriteData(naozhong[i]);        
  159.                                                 }
  160.                                                 LcdWriteCom(0x80+0X53);
  161.                                         }                                
  162.                                 }                        
  163.                         }
  164.                         if(flag1==2)
  165.                         {
  166.                                 LcdWriteCom(0x80+0X55);
  167.                                 if(k2==0)
  168.                                 {
  169.                                         Delay1ms(10);
  170.                                         if(k2==0)
  171.                                         {                                                
  172.                                                 e2++;
  173.                                                 if(e2==24) e2=0;
  174.                                                 naozhong[4]=e2/10+'0';
  175.                                                 naozhong[5]=e2%10+'0';
  176.                                         }
  177.                                         LcdWriteCom(0x80+0X50);
  178.                                         for(i=0;i<16;i++)
  179.                                         {
  180.                                                 LcdWriteData(naozhong[i]);        
  181.                                         }
  182.                                         LcdWriteCom(0x80+0X55);                                
  183.                                 }        
  184.                         }
  185.                         if(flag1==3)
  186.                         {
  187.                                 LcdWriteCom(0x80+0X58);
  188.                                 if(k2==0)
  189.                                 {
  190.                                         Delay1ms(10);
  191.                                         if(k2==0)
  192.                                         {
  193.                                                 e3++;
  194.                                                 if(e3==60) e3=0;
  195.                                                 naozhong[7]=e3/10+'0';
  196.                                                 naozhong[8]=e3%10+'0';
  197.                                         }
  198.                                         LcdWriteCom(0x80+0X50);
  199.                                         for(i=0;i<16;i++)
  200.                                         {
  201.                                                 LcdWriteData(naozhong[i]);        
  202.                                         }
  203.                                         LcdWriteCom(0x80+0X58);
  204.                                                                         
  205.                                 }               
  206.                         }
  207.                         if(flag1==4)
  208.                         {
  209.                                 LcdWriteCom(0x80+0X5b);
  210.                                 if(k2==0)
  211.                                 {
  212.                                         Delay1ms(10);
  213.                                         if(k2==0)
  214.                                         {
  215.                                                 e4++;
  216.                                                 if(e4==60) e4=0;
  217.                                                 naozhong[10]=e4/10+'0';
  218.                                                 naozhong[11]=e4%10+'0';
  219.                                         }
  220.                                         LcdWriteCom(0x80+0X50);
  221.                                         for(i=0;i<16;i++)
  222.                                         {
  223.                                                 LcdWriteData(naozhong[i]);        
  224.                                         }
  225.                                         LcdWriteCom(0x80+0X5b);                                
  226.                                 }               
  227.                         }
  228.                 }
  229.         }
  230.         if(temp3==1)
  231.         {
  232.                 EA=0;
  233.                 temp3=0;
  234.                 LcdWriteCom(0x01);
  235.                 LcdWriteCom(0x02);
  236.                 EA=1;                                
  237.         }        
  238. }

  239. void Int0Configuration()
  240. {
  241.         //设置INT0
  242.         IT0=1;
  243.         IT1=1;//跳变沿出发方式(下降沿)
  244.         EX0=1;
  245.         EX1=1;//打开INT0的中断允许。
  246.         EA=1;//打开总中断        
  247. }

  248. void datapros(int temp)         
  249. {           
  250.         float tp;  
  251.         if(temp < 0)                                //当温度值为负数
  252.           {
  253.                 LcdWriteCom(0x80+0X4b);
  254.                  LcdWriteData('+');   //温度+
  255.                 //因为读取的温度是实际温度的补码,所以减1,再取反求出原码
  256.                 temp=temp-1;
  257.                 temp=~temp;
  258.                 tp=temp;
  259.                 temp=tp*0.0625+0.5;        
  260.           }
  261.          else
  262.           {        
  263.                 LcdWriteCom(0x80+0X4b);
  264.                  LcdWriteData('+');   //温度+               
  265.                 tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
  266.                 temp=tp*0.0625+0.5;        
  267.         }
  268.         c=temp%100/10;
  269.         d=temp%10/1;
  270. }

  271. void LcdDisplay()
  272. {
  273.         LcdWriteCom(0x82);
  274.         LcdWriteData('2');
  275.         LcdWriteData('0');
  276.         LcdWriteData('0'+TIME[6]/16);                        //年
  277.         LcdWriteData('0'+(TIME[6]&0x0f));
  278.         LcdWriteData('-');
  279.         LcdWriteData('0'+TIME[5]/16);                        //月
  280.         LcdWriteData('0'+(TIME[5]&0x0f));
  281.         LcdWriteData('-');
  282.         LcdWriteData('0'+TIME[4]/16);                        //日
  283.         LcdWriteData('0'+(TIME[4]&0x0f));
  284.         LcdWriteCom(0x80+0X0e);
  285.         LcdWriteData(0x02);
  286.         LcdWriteData('0'+(TIME[3]&0x07));        //星期        
  287.         
  288.         LcdWriteCom(0x80+0X41);
  289.         LcdWriteData('0'+TIME[2]/16);                                //时
  290.         LcdWriteData('0'+(TIME[2]&0x0f));                                 
  291.         LcdWriteData(0x3a);
  292.         LcdWriteData('0'+TIME[1]/16);                                //分
  293.         LcdWriteData('0'+(TIME[1]&0x0f));        
  294.         LcdWriteData(0x3a);
  295.         LcdWriteData('0'+TIME[0]/16);                                //秒
  296.         LcdWriteData('0'+(TIME[0]&0x0f));
  297.         LcdWriteCom(0x80+0X4c);
  298.         LcdWriteData('0'+c);   //温度
  299.         LcdWriteData('0'+d);
  300.         LcdWriteData('C');                 
  301. }

  302. void keys()
  303. {
  304.         while(flag)
  305.         {
  306.                 LcdWriteCom(0x0f);
  307.                 if(flag==1)
  308.                 {
  309.                         LcdWriteCom(0x80+0x04);
  310.                         LcdWriteData('0'+TIME[6]/16);                        //年
  311.                         LcdWriteData('0'+(TIME[6]&0x0f));
  312.                         LcdWriteCom(0x80+0x05);
  313.                 }        
  314.                
  315.                 else if(flag==2)
  316.                 {
  317.                         LcdWriteCom(0x80+0x07);
  318.                         LcdWriteData('0'+TIME[5]/16);                        //月
  319.                         LcdWriteData('0'+(TIME[5]&0x0f));
  320.                         LcdWriteCom(0x80+0x08);        
  321.                 }
  322.                
  323.                 else if(flag==3)
  324.                 {
  325.                         LcdWriteCom(0x80+0x0a);
  326.                         LcdWriteData('0'+TIME[4]/16);                        //日
  327.                         LcdWriteData('0'+(TIME[4]&0x0f));
  328.                         LcdWriteCom(0x80+0x0b);               
  329.                 }
  330.                
  331.                 else if(flag==4)
  332.                 {
  333.                         LcdWriteCom(0x80+0x0f);                         //周
  334.                         LcdWriteData('0'+(TIME[3]&0x07));
  335.                         LcdWriteCom(0x80+0x0f);        
  336.                 }
  337.                
  338.                 else if(flag==5)
  339.                 {
  340.                         LcdWriteCom(0x80+0x41);
  341.                         LcdWriteData('0'+TIME[2]/16);                        //时
  342.                         LcdWriteData('0'+(TIME[2]&0x0f));
  343.                         LcdWriteCom(0x80+0x42);               
  344.                 }
  345.                
  346.                 else if(flag==6)
  347.                 {
  348.                         LcdWriteCom(0x80+0x44);
  349.                         LcdWriteData('0'+TIME[1]/16);                        //分
  350.                         LcdWriteData('0'+(TIME[1]&0x0f));
  351.                         LcdWriteCom(0x80+0x45);               
  352.                 }
  353.                
  354.                 else if(flag==7)
  355.                 {
  356.                         LcdWriteCom(0x80+0x47);
  357.                         LcdWriteData('0'+TIME[0]/16);                        //秒
  358.                         LcdWriteData('0'+(TIME[0]&0x0f));
  359.                         LcdWriteCom(0x80+0x48);
  360.                 }
  361.         /********************************************/
  362.                         if(k2==0)
  363.                         {
  364.                                 Delay1ms(30);
  365.                                 if(k2==0)
  366.                                 {
  367.                                         TIME[7-flag]++;
  368.                                         if((TIME[7-flag]&0x0f)>9)                                         //换成BCD码。
  369.                                         {
  370.                                                 TIME[7-flag]=TIME[7-flag]+6;
  371.                                          }
  372.                                         if((TIME[7-flag]>=0x99)&&(flag==1))                //年只能到99
  373.                                         {
  374.                                                 TIME[7-flag]=0;
  375.                                         }        
  376.                                         if((TIME[7-flag]>=0x13)&&(flag==2))                //月只能到12
  377.                                         {
  378.                                                 TIME[7-flag]=1;
  379.                                         }
  380.                                         if((TIME[7-flag]>=0x32)&&(flag==3))                //日只能到31
  381.                                         {
  382.                                                 TIME[7-flag]=1;        
  383.                                         }
  384.                                         if((TIME[7-flag]>=0x8)&&(flag==4))                //周只能到7
  385.                                         {
  386.                                                 TIME[7-flag]=1;
  387.                                         }
  388.                                         if((TIME[7-flag]>=0x24)&&(flag==5))                //小时只能到23
  389.                                         {
  390.                                                 TIME[7-flag]=0;
  391.                                         }
  392.                                         if((TIME[7-flag]>=0x60)&&(flag==6))                //分只能到59
  393.                                         {
  394.                                                 TIME[7-flag]=0;
  395.                                         }
  396.                                         if((TIME[7-flag]>=0x60)&&(flag==7))                //秒只能到59
  397.                                         {
  398.                                                 TIME[7-flag]=0;
  399.                                         }        

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

下载:
万年历.rar (102.97 KB, 下载次数: 24)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2017-5-4 17:51 | 只看该作者
好东东 干得漂亮,51hei有你更精彩
回复

使用道具 举报

板凳
ID:193213 发表于 2017-5-5 12:29 | 只看该作者
感谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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