找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机电子时钟程序

[复制链接]
跳转到指定楼层
楼主
ID:217514 发表于 2017-7-6 00:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
采用的一本教材上的算法,原封不动,没有修改,仅供学习使用,侵删。

下载:
电子时钟.docx (12.77 KB, 下载次数: 6)

  1. #include<reg51.h>
  2. #include<LCD1602.H>
  3. #include<DS1302.h>
  4. #include<reg51.h>

  5. #define uchar unsigned char
  6. #define unit unsigned int
  7. bit key_flag1=0,key_flag2=0;
  8. SYSTEMTIME adjusted;

  9. uchar sec_add=0,min_add=0,hou_add=0,day_add=0,mon_add=0,yea_add=0,wee_add=0;
  10. uchar data_alarm[7]={0};

  11. int key_scan()
  12. {
  13.         int i=0;
  14.         uint temp;
  15.         P1=0xf0;
  16.         temp=P1;
  17.         if(temp!=0xf0)
  18.         {
  19.                 i=1;
  20.         }
  21.         else
  22.         {
  23.                 i=0;
  24.         }
  25.         return i;
  26. }

  27. uchar key_value()
  28. {
  29.         uint m=0,n=0,temp;
  30.         uchar value;
  31.         uchar v[4][3]={'2','1','0','5','4','3','8','7','6','b','a','9'} ;
  32.         P1=0xfe;temp=P1;if(temp!=0xfe)m=0;
  33.         P1=0xfd;temp=P1;if(temp!=0xfd)m=1;
  34.         P1=0xfb;temp=P1;if(temp!=0xfb)m=2;
  35.         P1=0xf7;temp=P1;if(temp!=0xf7)m=3;
  36.         P1=0xef;temp=P1;if(temp!=0xef)n=0;
  37.         P1=0xdf;temp=P1;if(temp!=0xdf)n=1;
  38.         P1=0xbf;temp=P1;if(temp!=0xbf)n=2;
  39.         value=v[m][n];
  40.         return value;
  41. }

  42. void adjust(void)
  43. {
  44.         if(key_scan()&&key_flag1)
  45.                 switch(key_value())
  46.                 {
  47.                         case'0':sec_add++;break;
  48.                         case'1':min_add++;break;
  49.                         case'2':hou_add++;break;
  50.                         case'3':day_add++;break;
  51.                         case'4':mon_add++;break;
  52.                         case'5':yea_add++;break;
  53.                         case'6':wee_add++;break;
  54.                         default:break;
  55.                 }
  56.         adjusted.Second+=sec_add;
  57.         adjusted.Minute+=min_add;
  58.         adjusted.Hour+=hou_add;
  59.         adjusted.Day+=day_add;
  60.         adjusted.Month+=mon_add;
  61.         adjusted.Year+=yea_add;
  62.   adjusted.Week+=wee_add;
  63.         if(adjusted.Second>59)
  64.         {
  65.                 adjusted.Second=adjusted.Second%60;
  66.                 adjusted.Minute++;
  67.         }
  68.         if(adjusted.Minute>59)
  69.         {
  70.                 adjusted.Minute=adjusted.Minute%60;
  71.                 adjusted.Hour++;
  72.         }
  73.         if(adjusted.Hour>23)
  74.         {
  75.     adjusted.Hour=adjusted.Hour%24;
  76.     adjusted.Day++;
  77.   }
  78.         if(adjusted.Day>31)
  79.                 adjusted.Day=adjusted.Day%31+1;
  80.         if(adjusted.Month>12)
  81.                 adjusted.Month=adjusted.Month%12+1;
  82.         if(adjusted.Year>100)
  83.                 adjusted.Year=adjusted.Year%100;
  84.         if(adjusted.Week>7)
  85.                 adjusted.Week=adjusted.Week%7;
  86. }
  87.                
  88. void changing(void) interrupt 0
  89. {
  90.         if(key_flag1)
  91.                 key_flag1=0;
  92.         else
  93.                 key_flag1=1;
  94. }

  95. void main()
  96. {
  97.         uint i;
  98.         uchar p1[]="D:",p2[]="T:";
  99.         SYSTEMTIME T;
  100.        
  101.         EA=1;
  102.         EX0=1;
  103.         IT0=1;
  104.         EA=1;
  105.         EX1=1;
  106.         IT1=1;
  107.         init1602();
  108.         Initial_DS1302();
  109.        
  110.         while(1)
  111.         {
  112.                 write_com(0x80);
  113.                 write_string(p1,2);
  114.                 write_com(0xc0);
  115.                 write_string(p2,2);
  116.                 DS1302_GetTime(&T);
  117.                 adjusted.Second=T.Second;
  118.                 adjusted.Minute=T.Minute;
  119.                 adjusted.Hour=T.Hour;
  120.                 adjusted.Week=T.Week;
  121.                 adjusted.Day=T.Day;
  122.                 adjusted.Month=T.Month;
  123.                 adjusted.Year=T.Year;
  124.                 adjusted.Week=T.Week;
  125.                 for(i=0;i<12;i++)
  126.                 {
  127.                         adjusted.DateString[i]=T.DateString[i];
  128.                         adjusted.TimeString[i]=T.TimeString[i];
  129.                 }
  130.                 adjust();
  131.                 DateToStr(&adjusted);
  132.                 TimeToStr(&adjusted);
  133.                 write_com(0x82);
  134.                 write_string(adjusted.DateString,11);
  135.                 write_com(0xc2);
  136.                 write_string(adjusted.TimeString,8);
  137.                 delay(10);
  138.         }
  139. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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