找回密码
 立即注册

QQ登录

只需一步,快速开始

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

1602+24c02定时器时钟单片机仿真

[复制链接]
跳转到指定楼层
楼主
定时器时间可调,时间显示正常,但美中不足之处程序有点瑕疵,望高手指点


单片机源程序如下:
  1. #include<REG52.h>
  2. #include<24c02.h>
  3. #include<1602.h>

  4. sbit s1=P3^2;//光标移位     
  5. sbit s2=P3^3;//加键     
  6. sbit s3=P3^4;//减键   
  7. sbit beep=P1^0;//蜂鸣器

  8. unsigned char count,s1num;
  9. unsigned char miao,shi,fen;

  10. void delayms(unsigned int time)
  11. {
  12.         unsigned int x,y;
  13.         for(x=time;x>0;x--)
  14.             for(y=110;y>0;y--);        
  15.       }       
  16.                                
  17. void di()  
  18. {
  19.         beep=0;
  20.         delayms(100);
  21.         beep=1;
  22. }

  23. void write_sfm(uchar add,uchar date)   
  24. {
  25.                 uchar shi,ge;
  26.                 shi=date/10;
  27.                 ge=date%10;
  28.                 write_Com(0x80+0x40+add);   
  29.                 write_Date(0x30+shi);        
  30.                 write_Date(0x30+ge);         
  31. }

  32. void InitTimer0(void)
  33. {
  34.     TMOD = 0x01;
  35.     TH0=(65536-50000)/256;
  36.           TL0=(65536-50000)%256;
  37.     EA = 1;
  38.     ET0 = 1;
  39.     TR0 = 1;
  40. }

  41. void keyscan()
  42. {
  43.         if(s1==0)//0是高电平,开
  44.         {
  45.                 delayms(5);
  46.                 if(s1==0)   
  47.                 {
  48.                  s1num++;   
  49.                  while(!s1);
  50.                  di();
  51.                        
  52.                  if(s1num==1)
  53.                  {
  54.                         TR0=0;   
  55.                         write_Com(0x80+0x40+10);  
  56.                         write_Com(0x0f);   
  57.                  }
  58.                  
  59.                  if(s1num==2)  
  60.                  {
  61.                         write_Com(0x80+0x40+7);
  62.                  }
  63.                  
  64.                  if(s1num==3)  
  65.                  {
  66.                         write_Com(0x80+0x40+4);
  67.                  }
  68.                  
  69.                  if(s1num==4)  
  70.                  {
  71.                         s1num=0; //记录键清零  
  72.                         write_Com(0x0c);  
  73.                         TR0=1; //到第四次启动定时器开始走   
  74.                  }
  75.                 }
  76.         }
  77. /********************************/
  78.         if(s1num!=0) //按完S1才能激活S2   
  79.         {
  80. /********************************/       
  81.                 if(s2==0)
  82.                 {
  83.                  delayms(5);
  84.                  if(s2==0)
  85.                  {
  86.                         while(!s2);
  87.                         di();
  88.                          
  89.                         if(s1num==1)//按下每秒加1   
  90.                         {
  91.                          miao++;
  92.                          if(miao==60)
  93.                                 miao=0;
  94.                          write_sfm(10,miao);//每调节一次送液晶显示一次
  95.                          write_Com(0x80+0x40+10);//显示输入地址
  96.                          write_add(1,miao);//调节完毕数据立即保存  
  97.                         }
  98.                        
  99.                         if(s1num==2)//按下每分加1
  100.                         {
  101.                          fen++;
  102.                          if(fen==60)
  103.                                 fen=0;
  104.                          write_sfm(7,fen);//每调节一次送液晶显示一次
  105.                          write_Com(0x80+0x40+7);//显示输入地址
  106.                          write_add(2,fen);//调节完毕数据立即保存
  107.                         }
  108.                        
  109.                         if(s1num==3)//按下每时加1
  110.                         {
  111.                          shi++;
  112.                          if(shi==24)
  113.                                 shi=0;
  114.                          write_sfm(4,shi);//每调节一次送液晶显示一次
  115.                          write_Com(0x80+0x40+4);//显示输入地址
  116.                          write_add(3,shi);//调节完毕数据立即保存
  117.                         }
  118.                  }
  119.                 }
  120.                
  121. /********************************/               
  122.                 if(s3==0)
  123.                 {
  124.                  delayms(5);
  125.                  if(s3==0)
  126.                  {
  127.                         while(!s3);
  128.                         di();
  129.                          
  130.                         if(s1num==1)//按下每秒减1
  131.                         {
  132.                          miao--;
  133.                          if(miao==-1)
  134.                                 miao=59;
  135.                          write_sfm(10,miao);//每调节一次送液晶显示一次
  136.                          write_Com(0x80+0x40+10);//显示输入地址
  137.                          write_add(1,miao);//调节完毕数据立即保存
  138.                         }
  139.                        
  140.                         if(s1num==2)//按下每分减1
  141.                         {
  142.                          fen--;
  143.                          if(fen==-1)
  144.                                 fen=59;
  145.                          write_sfm(7,fen);//每调节一次送液晶显示一次
  146.                          write_Com(0x80+0x40+7);//显示输入地址
  147.                          write_add(2,fen);//调节完毕数据立即保存
  148.                         }
  149.                        
  150.                         if(s1num==3)//按下每时减1
  151.                         {
  152.                          shi--;
  153.                          if(shi==-1)
  154.                                 shi=23;
  155.                          write_sfm(4,shi);//每调节一次送液晶显示一次
  156.                          write_Com(0x80+0x40+4);//显示输入地址
  157.                          write_add(3,shi);//调节完毕数据立即保存
  158.       }
  159.      }
  160.     }
  161.   }
  162. }

  163. void main()  
  164. {
  165.         P0=0X00;
  166.         dula=0;
  167.         wela=0;
  168.         init();
  169.         lcdinit();
  170.         InitTimer0();
  171.         miao=read_add(1);
  172.         fen=read_add(2);
  173.         shi=read_add(3);
  174.        
  175.         LCD_Write_String(1,2,"2017-6-17-MON");
  176.         LCD_Write_String(0,5,"16-26-00");
  177.         while(1)
  178.         {
  179.                 keyscan();               
  180.    }
  181.   }

  182. void timer0() interrupt 1   
  183. {
  184.         TH0=(65536-50000)/256;
  185.         TL0=(65536-50000)%256;
  186.         count++;
  187.         if(count==20)
  188.         {
  189.   count=0;
  190.                
  191.   miao++;
  192.   if(miao==60)
  193.   {
  194.    miao=0;
  195.                
  196.    fen++;
  197.    if(fen==60)
  198. ……………………

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

所有资料51hei提供下载:
1602 24c02 定时器时间.zip (57.67 KB, 下载次数: 45)



评分

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

查看全部评分

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

使用道具 举报

沙发
ID:135253 发表于 2017-6-19 08:45 | 只看该作者
24C02没有看到,图文程序似乎不太一致!
回复

使用道具 举报

板凳
ID:836287 发表于 2020-10-29 19:01 | 只看该作者
加了24c02.h,烧写程序的时候烧不进去怎么回事?
回复

使用道具 举报

地板
ID:728202 发表于 2020-10-31 10:46 | 只看该作者
没有AT24C02啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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