51单片机实验三:数码管显示时钟 按键调节时间时闪烁提示

本文介绍了一个基于51单片机的时钟程序设计,通过使用定时器和三个独立按键实现了时分秒的动态显示及调节功能。程序包含定时器初始化、按键检测、数码管显示等功能模块。

功能效果:1.时分秒的动态显示。2.用三个按键实现时分秒的修改,调节的数字闪烁提示。

一、仿真图:

 

 二、源码

版本一:

#include <reg52.h>

#define u8 unsigned char
#define u16 unsigned int	

u8 WeiMa[6]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};
u8 DuanMa[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//函数声明
void Delay_ms(u16 xms);
void ShuMaGuan(u8 wei,u8 duan);
void Display_Timer(u8 hour,u8 min,u8 sec);
u8 Key_Scan();

//引脚定义
sbit SW1=P3^2;
sbit SW2=P3^3;
sbit SW3=P3^4;

//函数功能:定时器初始化
void Time0init()
{
	TMOD|=0x01;				//设置定时器模式
	TF0=0;					//清除TF0标志
	TH0=(65536-50000)/256;  //设置定时初值
	TL0=(65536-50000)%256;	//设置定时初值
	TR0=1;					//定时器0允许计时
	ET0=1;					//中断允许
	EA=1;					//CPU中断允许位打开
}

u8 Hour,Min,Sec;//全局变量,时分秒
u8 mode;//全局变量:状态切换,0:时钟显示,1:调节时;2:调节分;3:调节秒
bit flash_tip=1;//数码管闪烁标志,为0时数码管熄灭,为一时数码管显示

//主函数
void main()
{
	u8 keynum;
	Time0init();//定时器
	Hour=0;
	Min=0;
	Sec=0;
	mode=0;//初始化
	while(1)
	{
		keynum=Key_Scan();//按键返回值
		if(keynum)   //非0表示有按键按下
		{
			switch(keynum)  //判断是哪个按键按下,按键一调节模式,按键2自加,按键3自减
			{
				case 1:if(++mode>=4) mode=0;break;  //++mode为先自增再判断是否大于4
				case 2:
					if(mode==1) 
					{
						Hour++;
						if(Hour>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值