当前位置:   article > 正文

MCS-51单片机5:基于时钟的24小时计时器_51单片机做24小时时钟显示

51单片机做24小时时钟显示


前言

  本次主要介绍一下关于单片机的综合实验:基于时钟的24小时计时器。


一、应用系统的使用场景

  本人设计的是一个基于时钟的24小时计时器。它可以用作显示数字的钟表使用;由于它也显示秒数,故可以做秒表使用。

二、应用系统关键电子器件、应用系统原理图

   1. 应用系统关键电子器件有单片机,2个四位八段数码管,74HC245,74HC138,中断1。
   2. 应用系统的仿真原理图及其实物图如下:
在这里插入图片描述
在这里插入图片描述

三、应用系统功能原理

  我从应用系统的几个关键电子器件入手分析:
  1.2个四位八段数码管 从实物图上可以看出,从左往右数的前两位代表小时,三四位代表分钟,五六位代表秒。其中哪一位亮是由74HC138控制的;该位亮那个数字是由74HC245控制的。
  2.74hc245是兼容TTL器件引脚的高速CMOS总线收发器,典型的CMOS型三态缓冲门电路,八路信号收发器。其中它的16个管脚(除了接地和电源的)分别和单片机的P0的八个管脚以及2个四位八段数码管相连。
  3.74HC138,即译码器。输入信号的三个管脚分别于P2的2,3,4管脚相连,输出端于2个四位八段数码管相连。这三个输入信号的高低点平控制其中输出端的某位可以输出,进而影响四位八段数码管的哪一位亮。
  4.中断1:当计数器计数TFi溢出时,该位置“1”。此时使用中断方式1时,作为中断请求标志位,进入中断服务程序后由硬件自动清“0”。

四、应用系统功能程序代码

  代码如下(示例):

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
u8 m=0;//定义6个变量
u8 n=0;
u8 p=0;
u8 q=0;
u8 j=0;
u8 k=0;
u8 i=100;
sbit P2_2=P2^2;  //管脚进行声明定义
sbit P2_3=P2^3;
sbit P2_4=P2^4;
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //不带小数点的0到9
u8 code smgduan_dot[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef }; //带小数点的0到9

void delay(u16 i)  //延时函数,i=1 时,大约延时 10us
{
	while(i--);	
}
void Timer0Init()
{
	TMOD=0X01;//选择为定时器模式,工作方式1,仅用TR0打开启动。
TH0=0xd8;//给定时器赋初值,定时10ms
	TL0=0xf0; 
	ET0=1; //打开定时器中断允许
	EA=1;//打开总中断
TR0=1; //打开定时器
}
void main()
{	
	Timer0Init();  //定时器1初始化
	while(1)		
	{
       P2_2=0;P2_3=1; P2_4=0;//实物图从左往右,第6位亮
  	   P0=smgduan[n];
	   delay(100); //延时
       P2_2=1; P2_3=1;P2_4=0;// 第5位亮
	   P0=smgduan[m];
	   delay(100); //延时
	   P2_2=0; P2_3=0;P2_4=1;4位亮
	   P0=smgduan_dot[p];
	   delay(100);
	   P2_2=1; P2_3=0;P2_4=1;3位亮
	   P0=smgduan[q];
	   delay(100); //延时
       P2_2=0; P2_3=1;P2_4=1;2位亮
	   P0=smgduan_dot[j];
	   delay(100); //延时
	   P2_2=1; P2_3=1;P2_4=1;1位亮
	   P0=smgduan[k];
	   delay(100); //延时
       P0=0; //消隐
	 }
}
void Timer0() interrupt 1//中断程序
{
	TH0=0xd8; //重新赋初值
	TL0=0xf0;
	i--; //循环100次
	if(i==0)
	{
		i=100;
		n++;
		if(n==10) //n满10,m加1,重置n=0
		{
		  n=0;
		  m++;
		}
		if(m==6) //m满6,p加1,重置m=0
        {
          m=0;
          p++;
        }
        if(p==10) //p满10,q加1,重置p=0
        {
		  p=0;
		  q++;
		}
        if(q==6) //q满6,j加1,重置q=0
        {
		  q=0;
		  j++;
		}
        if(j==10) //j满10,k加1,重置q=0
        {
		  j=0;
		  k++;
		}
        if(n==9&&m==5&&p==9&&q==5&&j==3&&k==2)//时间满24小时,n,m,p,w,j,k置0
        {
           n=0;m=0;p=0;q=0;j=0;k=0;
        }
	}	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

五、应用系统设计经验总结

  1.进行程序的设计时,一定要先关注开发板的原理图,知道不同模块间管脚的连线方式,这样方便正确编写程序。同时要注意理解这学期和上学期的开发板的差别:上学期的开发板的管脚之间是通过外部线路进行自由搭配,而本学期的开发板管脚之间已经在内部电路固定连接,它的管脚连线是固定的。
  2.写程序时一定要认真,认真,再认真,我在写代码时因为一些小问题卡死了好几次

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/408610
推荐阅读
相关标签