题目要求
用按键设定时钟的时、分、秒。要求用4键方式,即选择、加、减、确认键,选择键用于选择修改起始时、分、秒值,每按一次,被修改数码管顺序移动并闪烁。用+,- 键修改数值,确认键确定修改结束。
用扫描方式动态显示时、分、秒,第2,4 数码管加小数点,并且要求第4数码管小数点每秒闪烁一次。
可以设置闹钟,到时间蜂鸣器报警。
功能
数码管闪烁,定时器,闹钟
源码
#include "reg52.h" //单片机寄存器
typedef unsigned int u16; //重命名无符号整形变量
typedef unsigned char u8; //重命名无符号字符型变量
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
sbit beep=P2^5;
u8 code lzl[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~F
u8 wei[8];
u8 ssec,sec,min,hour;
u8 model=0; //记录修改状态变量
u8 sign=0; //数码管闪烁标志变量
u8 sec1=50; //闹钟时间设定
u8 min1=12;
u8 hour1=6;
/******************************
* 延时函数
*******************************/
void delay(u16 i)
{
while(i--);
}
/******************************
* 定时器0初始化函数
*******************************/
void Time0_Init()
{
TMOD|=0x01; //选择定时器模式,工作方式1
TH0=0xd8; //给定时器赋初值,定时10ms
TL0=0xf0;
ET0=1; //打开定时器0中断
EA=1; //打开总中断
TR0=1; //暂时关闭定时器
}
/******************************
* 动态显示函数
*******************************/
void display()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=1;LSB=1;LSC=1; break;
case(1):
LSA=0;LSB=1;LSC=1; break;
case(2):
LSA=1;LSB=0;LSC=1; break;
case(3):
LSA=0