功能效果: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>

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






