找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4838|回复: 1
收起左侧

51单片机LCD12864万年历源程序+Proteus仿真 年月日 星期 温度显示

  [复制链接]
ID:662089 发表于 2020-7-7 14:32 | 显示全部楼层 |阅读模式
这是一个电子时钟,具有显示温度调时,闹钟等功能。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
11.png

单片机源程序如下:
  1. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器        
  2. #include<show.h>
  3. #include<beep.h>
  4. typedef unsigned int u16;          //对数据类型进行声明定义
  5. typedef unsigned char u8;
  6. unsigned int  State=0;//读时间标志
  7. sbit K1=P0^0;
  8. sbit K2=P0^1;
  9. sbit K3=P0^2;
  10. sbit K4=P0^3;
  11. sbit led2=P0^4;
  12. void delay(unsigned int ms);
  13. void button();//按键扫描函数
  14. void compare();//闹铃函?

  15. void alarmshow();
  16. unsigned char d;
  17. void delay(unsigned int ms)
  18.   {
  19.      while(ms--);//大约为10us
  20.   }


  21. void main()
  22. {
  23. u8 temperature[2];        
  24. Lcd_Initial();
  25. DS1302_Init();
  26. led2=0;
  27.         while(1)
  28.         {
  29.         if(State==0)DS1302_R();
  30.         button();
  31.         show();
  32.         compare();
  33.         Sensor_Fresh(temperature);        
  34.         Lcd_Temperture(temperature);

  35.         }               
  36. }

  37. unsigned int onf,kk;//闹钟开启标志位
  38.         unsigned int State;
  39.   unsigned int SetPlace=0;//调时选择标志位
  40.   unsigned int alack=0;//闹铃选择标志位
  41.   unsigned int MH;        //月份选择
  42.   unsigned int YB;//年份标志
  43.   unsigned char a1,a2,a3,a4,a5;
  44.   unsigned char a6,a7,a8,a9;

  45. void button()
  46. {
  47.   if(a1==0)
  48.   {
  49.   if(K1==0&&a9==1)
  50.   {
  51.   delay(1000);
  52.   if(K1==0&&a9==1){d=0;a9=0;a8=0;a=0;AFlag[alack]=1;}
  53.   while(!K1);         
  54.   }
  55. if(K1==0&&a2==0)
  56.   {
  57.   delay(1000);
  58.   if(K1==0&&a2==0){;}
  59.   while(!K1);         
  60.   }
  61.   if(K1==0&&a2==1){
  62.   delay(1000);
  63.   if(K1==0&&a2==1){
  64.   led2=~led2;a4=0;DS1302_Init();a2=0;a5=0;CFlag[SetPlace]=1;}while(!K1);}
  65.   }

  66.   if(a3==0)
  67. {
  68.   if(K2==0&&a4==0)                                                                                                                                          
  69.   {
  70.   delay(1000);
  71.   if(K2==0&&a4==0){State=~State;a4=1;a2=1;}
  72.   while(!K2);
  73.   }
  74.     if(K2==0&&a4==1)                                                                                                                                          
  75.   {
  76.   delay(1000);
  77.   if(K2==0&&a4==1){SetPlace++;CFlag[SetPlace]=0;CFlag[SetPlace-1]=1;if(SetPlace>7)SetPlace=0;a5=1;}
  78.   while(!K2);
  79.   }
  80. }
  81. if(a6==0)
  82. {
  83.   if(K3==0&&a5==0)
  84.   {
  85.   delay(1000);
  86.   if(K3==0&&a5==0){a=1;alack++;AFlag[alack]=0;AFlag[alack-1]=1;if(alack>3)alack=0;
  87.   d=1;a8=1;}while(!K3);}
  88.   if(K3==0&&a5==1)
  89.   {
  90.   delay(1000);
  91.   if(K3==0&&a5==1){TIME[(SetPlace-1)]++;
  92.   if((TIME[(SetPlace-1)]&0x0f)>9)TIME[(SetPlace-1)]=TIME[(SetPlace-1)]+6;
  93.   if(SetPlace<=2&&TIME[(SetPlace-1)]>=0x60){TIME[(SetPlace-1)]=0;}
  94.   if(SetPlace==3&&TIME[(SetPlace-1)]>=0x24){TIME[(SetPlace-1)]=0;}
  95.   if(SetPlace==4&&(TIME[4]==1||TIME[4]==3
  96.   ||TIME[4]==5||TIME[4]==7||TIME[4]==8)&&TIME[SetPlace-1]>0x31){TIME[SetPlace-1]=1;}
  97.   if(SetPlace==4&&(TIME[4]==4||TIME[4]==6
  98.   ||TIME[4]==9)&&TIME[SetPlace-1]>0x30){TIME[SetPlace-1]=1;}
  99.   if(SetPlace==5&&TIME[SetPlace-1]>0x12){TIME[SetPlace-1]=1;}
  100.   if(SetPlace==6&&TIME[SetPlace-1]>0x07){TIME[SetPlace-1]=1;}
  101.   if(SetPlace==7&&TIME[SetPlace-1]>0x99){TIME[SetPlace-1]=0;}
  102.    if(TIME[4]==2&&twoflag==0&&TIME[SetPlace-1]>0x28)TIME[SetPlace-1]=0x01;
  103.    if(TIME[4]==2&&twoflag==1&&TIME[SetPlace-1]>0x29)TIME[SetPlace-1]=0x01;
  104.   
  105.    }
  106.   while(!K3);
  107.   }
  108. }
  109.    if(a7==0)
  110. {

  111.   if(K4==0&&a5==1)
  112.   {
  113.   delay(1000);
  114.   if(K4==0&&a5==1){TIME[(SetPlace-1)]--;
  115.   if((TIME[(SetPlace-1)]&0x0f)>9)TIME[(SetPlace-1)]=TIME[(SetPlace-1)]-6;
  116.   if((TIME[4]==4||TIME[4]==6||TIME[4]==9)&&(TIME[SetPlace-1]<0x01))TIME[SetPlace-1]=0x30;
  117.   if((TIME[4]==1||TIME[4]==3||TIME[4]==5)&&(TIME[SetPlace-1]<0x01))TIME[SetPlace-1]=0x31;
  118.   if(TIME[4]==2&&twoflag==1&&TIME[SetPlace-1]<0x01)TIME[SetPlace-1]=0x29;
  119.   if(TIME[4]==2&&twoflag==0&&TIME[SetPlace-1]<0x01)TIME[SetPlace-1]=0x28;
  120.   }
  121.   while(!K4);
  122.   }
  123. if(K4==0&&a8==1)
  124.   {
  125.   delay(1000);
  126.   if(K4==0&&a8==1){alck[(alack-1)]++;
  127.   if((alck[(alack-1)]&0x0f)>9)alck[(alack-1)]=alck[(alack-1)]+6;
  128.   if(alack<=2){if(alck[(alack-1)]>=0x60){alck[(alack-1)]=0;}}
  129.   if(alack==3&&alck[alack-1]>=0x24){alck[(alack-1)]=0;}a9=1;
  130.   }
  131.   while(!K4);
  132.   }
  133. }
  134. if(K4==0&&kk==0)
  135.   {
  136.   delay(1000);
  137.   if(K4==0&&kk==0){onf=~onf;  led2=~led2;
  138.   }
  139.   while(!K4);
  140.   }

  141. }

  142. void compare()
  143. {
  144. if(!onf){
  145. ……………………

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

所有资料51hei提供下载:
设计.rar (1.55 MB, 下载次数: 210)

评分

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

查看全部评分

回复

使用道具 举报

ID:891154 发表于 2021-7-15 20:38 | 显示全部楼层
SetPlace++;是什么意思
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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