找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机定时器时钟及Proteus仿真图

[复制链接]
跳转到指定楼层
楼主
51定时器时钟及protues仿真


单片机源程序如下:
  1. /**************************************************************************************       
  2. 实验现象:下载程序后,数码管右3位显示0,按K1键将数据写入到EEPROM内保存,
  3.                   按K2键读取EEPROM内保存的数据,按K3键显示数据加1,按K4键显示数据清零,
  4.                   最大能写入的数据是255。
  5. 注意事项:                                                                                                                                                                  
  6. ***************************************************************************************/
  7. #include "public.h"
  8. #include "24c02.h"
  9. #include "lcd1602.h"
  10. #include "stdio.h"


  11. #define EEPROM_ADDRESS        0        //定义数据存入EEPROM的起始地址
  12. sbit s1=P3^0;
  13. sbit s2=P3^1;
  14. sbit s3=P3^2;
  15. sbit beep=P2^3;
  16. u8 count,s1num;
  17. char miao,shi,fen;
  18. char code table[]=" 2008-9-30 MON";
  19. void di()
  20. {
  21.         beep=0;
  22.         delay_ms(100);
  23.         beep=1;
  24. }
  25. void write_sfm(u8 add,u8 date)
  26. {
  27.         u8 shi,ge;
  28.         shi=date/10;
  29.         ge=date%10;
  30.         lcd1602_write_cmd(0x80+0x40+add);
  31.         lcd1602_write_data(0x30+shi);
  32.         lcd1602_write_data(0x30+ge);
  33. }
  34. void keyscan()
  35. {
  36.         if(s1==0)
  37.         {
  38.                 delay_ms(5);
  39.                 if(s1==0)
  40.                 {
  41.                         s1num++;
  42.                         while(!s1);
  43.                         di();
  44.                         if(s1num==1)
  45.                         {
  46.                                 TR0=0;
  47.                                 lcd1602_write_cmd(0x80+0x40+10);
  48.                                 lcd1602_write_cmd(0x0f);
  49.                         }
  50.                         if(s1num==2)
  51.                         {
  52.                                 lcd1602_write_cmd(0x80+0x40+7);
  53.                         }
  54.                         if(s1num==3)
  55.                         {
  56.                                 lcd1602_write_cmd(0x80+0x40+4);
  57.                         }
  58.                         if(s1num==4)
  59.                         {
  60.                                 s1num=0;
  61.                                 lcd1602_write_cmd(0x0c);
  62.                                 TR0=1;
  63.                         }
  64.                 }
  65.         }
  66.         if(s1num!=0)
  67.         {
  68.                 if(s2==0)
  69.                 {
  70.                         delay_ms(5);
  71.                         if(s2==0)
  72.                         {
  73.                                 while(!s2);
  74.                                 di();
  75.                                 if(s1num==1)
  76.                                 {
  77.                                         miao++;
  78.                                         if(miao==60)
  79.                                                 miao=0;
  80.                                         write_sfm(10,miao);
  81.                                         lcd1602_write_cmd(0x80+0x40+10);
  82.                                         at24c02_write_one_byte(1,miao);
  83.                                 }
  84.                                 if(s1num==2)
  85.                                 {
  86.                                         fen++;
  87.                                         if(fen==60)
  88.                                                 fen=0;
  89.                                         write_sfm(7,fen);
  90.                                         lcd1602_write_cmd(0x80+0x40+7);
  91.                                         at24c02_write_one_byte(2,fen);
  92.                                 }
  93.                                 if(s1num==3)
  94.                                 {
  95.                                         shi++;
  96.                                         if(shi==24)
  97.                                                 shi=0;
  98.                                         write_sfm(4,shi);
  99.                                         lcd1602_write_cmd(0x80+0x40+4);
  100.                                         at24c02_write_one_byte(3,shi);
  101.                                 }
  102.                         }       
  103.                 }
  104.                 if(s3==0)
  105.                 {
  106.                         delay_ms(5);
  107.                         if(s3==0)
  108.                         {
  109.                                 while(!s3);
  110.                                 di();
  111.                                 if(s1num==1)
  112.                                 {
  113.                                         miao--;
  114.                                         if(miao==-1)
  115.                                                 miao=59;
  116.                                         write_sfm(10,miao);
  117.                                         lcd1602_write_cmd(0x80+0x40+10);
  118.                                         at24c02_write_one_byte(1,shi);
  119.                                 }
  120.                                 if(s1num==2)
  121.                                 {
  122.                                         fen--;
  123.                                         if(fen==-1)
  124.                                                 fen=59;
  125.                                         write_sfm(7,fen);
  126.                                         lcd1602_write_cmd(0x80+0x40+7);
  127.                                         at24c02_write_one_byte(2,fen);
  128.                                 }
  129.                                 if(s1num==3)
  130.                                 {
  131.                                         shi--;
  132.                                         if(shi==-1)
  133.                                                 fen=23;
  134.                                         write_sfm(7,shi);
  135.                                         lcd1602_write_cmd(0x80+0x40+4);
  136.                                         at24c02_write_one_byte(3,shi);
  137.                                 }
  138.                         }
  139.                                
  140.                 }
  141.         }
  142. }
  143. /*******************************************************************************
  144. * 函 数 名       : main
  145. * 函数功能                 : 主函数
  146. * 输    入       : 无
  147. * 输    出             : 无
  148. *******************************************************************************/
  149. void main()
  150. {       
  151.         u8 num;
  152.         lcd1602_init();//LCD1602初始化
  153.        
  154.         fen=0;
  155.         miao=0;
  156.         shi=0;
  157.         count=0;
  158.         s1num=0;
  159.         for(num=0;num<15;num++)
  160.         {
  161.                 lcd1602_write_data(table[num]);       
  162.                 delay_ms(5);
  163.         }
  164.         lcd1602_write_cmd(0x80+0x40+6);
  165.         lcd1602_write_data(':');
  166.         delay_ms(5);
  167.         lcd1602_write_cmd(0x80+0x40+9);
  168.         lcd1602_write_data(':');
  169.         delay_ms(5);
  170.         miao=at24c02_read_one_byte(1);
  171.         fen=at24c02_read_one_byte(2);
  172.         shi=at24c02_read_one_byte(3);
  173.         write_sfm(10,miao);
  174.         write_sfm(7,fen);
  175.         write_sfm(4,shi);
  176.         TMOD=0x01;
  177.         TH0=(65536-50000)/256;
  178.         TL0=(65536-50000)%256;
  179.         EA=1;
  180.         ET0=1;
  181.         TR0=1;
  182.         //lcd1602_show_string(0,0,"24c02save");//第二行显示
  183.         while(1)
  184.         {       
  185.                 keyscan();               
  186.                 //sprintf(buffer,"%d%d%d",save_buf[0],save_buf[1],save_buf[2]);
  187.                 //lcd1602_show_string(0,1,buffer);//第二行显示
  188.         }
  189.                
  190. }
  191. void timer0() interrupt 1
  192. {
  193.         TH0=(65536-50000)/256;
  194.         TL0=(65536-50000)%256;
  195.         count++;
  196.         if(count==20)
  197.         {
  198.                 count=0;
  199.                 miao++;
  200.                 if(miao==60)
  201.                 {
  202.                         miao=0;
  203.                         fen++;
  204.                         if(fen==60)
  205.                         {
  206.                                 fen=0;
  207.                                 shi++;
  208.                                 if(shi==24)
  209.                                 {
  210.                                         shi=0;
  211.                                 }
  212.                                 write_sfm(4,shi);
  213.                                 at24c02_write_one_byte(3,shi);
  214.                         }
  215.                         write_sfm(7,fen);
  216.                         at24c02_write_one_byte(2,fen);
  217.                 }
  218.                 write_sfm(10,miao);
  219.                 at24c02_write_one_byte(1,miao);
  220.         }       
  221. }
复制代码

Keil代码与Proteus8.13仿真下载:
定时器时钟LCD显示protues仿真.7z (75.91 KB, 下载次数: 31)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:66461 发表于 2023-8-7 22:04 | 只看该作者
版本8.6 的 我打不开。。。
回复

使用道具 举报

板凳
ID:66461 发表于 2023-8-7 22:05 | 只看该作者
版本8.6的我打不开。。。
回复

使用道具 举报

地板
ID:57095 发表于 2024-4-18 13:43 来自手机 | 只看该作者
17951 发表于 2023-8-7 22:04
版本8.6 的 我打不开。。。

用816版本
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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