找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的时钟静态显示Proteus仿真程序

[复制链接]
跳转到指定楼层
楼主
要求用定时器实现时钟的模拟,并用数码管显示当前模拟时钟,时钟的显示格式位12:01:02,即显示小时:分:秒。

学习了解定时器的结构特点,设计并编程实现模拟时钟。
二、实验要求
1.设计出STC89C51的模拟时钟电路。
2.编程实现数码管显示时钟,观察实验现象。
三、可供选择实验仪器
51开发板、数码管、USB转串口下载线、Keil软件等
四、实验提示
要求用定时器实现时钟的模拟,并用数码管显示当前模拟时钟,时钟的显示格式位12:01:02,即显示小时:分:秒。
五、实验电路

学会用定时器实现时钟的模拟,并用数码管显示当前模拟时钟,时钟的显示到小时:分:秒。
但是篇幅过长,还需要学习更简单的写法0

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

源代码

  1. #include "reg52.h"                        
  2. typedef unsigned int u16;         
  3. typedef unsigned char u8;
  4. sbit LSA=P2^2;
  5. sbit LSB=P2^3;
  6. sbit LSC=P2^4;
  7. unsigned char SegNo[8]={0};
  8. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  9.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
  10. unsigned char Cnt=0;
  11. unsigned char Sec=0;
  12. unsigned char Min=0;
  13. unsigned char Hour=0;
  14. char Sec1=24;
  15. void delay(u16 i)
  16. {
  17.         while(i--);        
  18. }
  19. void DigDisplay()
  20. {
  21.         u8 i;
  22.         for(i=0;i<8;i++)
  23.         {
  24.                 switch(i)         //位选,选择点亮的数码管,
  25.                 {
  26.                         case(0):
  27.                                 LSA=0;LSB=0;LSC=0; break;//显示第0位
  28.                         case(1):
  29.                                 LSA=1;LSB=0;LSC=0; break;//显示第1位
  30.                         case(2):
  31.                                 LSA=0;LSB=1;LSC=0; break;//显示第2位
  32.                         case(3):
  33.                                 LSA=1;LSB=1;LSC=0; break;//显示第3位
  34.                         case(4):
  35.                                 LSA=0;LSB=0;LSC=1; break;//显示第4位
  36.                         case(5):
  37.                                 LSA=1;LSB=0;LSC=1; break;//显示第5位
  38.                         case(6):
  39.                                 LSA=0;LSB=1;LSC=1; break;//显示第6位
  40.                         case(7):
  41.                                 LSA=1;LSB=1;LSC=1; break;//显示第7位        
  42.                 }
  43.                 P0=SegNo[i];//发送段码
  44.                 delay(100); //间隔一段时间扫描        
  45.                 P0=0x00;//消隐
  46.         }
  47. }

  48. void main()
  49. {        
  50.         // 1 定时器初始化
  51.         TMOD=0X01;// 0001 0001
  52.         TH0=(65536-50000)/256;
  53.         TL0=(65536-50000)%256;
  54.         IE=0X82;  //EA=1;ET0=1; ET1=1; //1000 1010
  55.         TR0=1;
  56.         while(1)
  57.         {        
  58.                 //3 秒的显示
  59.                 SegNo[0]=smgduan[Hour/10];
  60.                 SegNo[1]=smgduan[Hour%10];
  61.                 SegNo[2]=0x40;
  62.                 SegNo[3]=smgduan[Min/10];
  63.                 SegNo[4]=smgduan[Min%10];
  64.                 SegNo[5]=0x40;
  65.                 SegNo[6]=smgduan[Sec/10];
  66.                 SegNo[7]=smgduan[Sec%10];
  67.                 DigDisplay();  //数码管显示函数        
  68.         }               
  69. }
  70. //2定时器中断得到秒
  71. void Timer0_ISR() interrupt 1
  72. {
  73.         //重新装载初始值
  74.         TH0=(65536-50000)/256;
  75.         TL0=(65536-50000)%256;
  76.         Cnt++;
  77.         if(Cnt==20)
  78.         {
  79.                 Cnt=0;
  80.                 Sec++;
  81.         }
  82.         if(Sec==60)
  83.         {
  84.           Sec=0;
  85.                 Min++;
  86.         }
  87.         if(Min==60)
  88.   {
  89.           Min=0;
  90.           Hour++;
  91.         }
  92.   if(Hour==24)
  93.         {
  94.           Hour=0;
  95.                
  96.         }
  97. }
复制代码

全部资料51hei下载地址:
时钟不可调.zip (364.62 KB, 下载次数: 18)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:447331 发表于 2019-12-24 10:07 | 只看该作者
博主很棒 解我之需 希望多发发这么好 的内容 学习到了!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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