一旦时间到则发出声响。
程序执行后工作指示灯LED闪动,表示程序开始执行,显示器显示“0000”,按下 *** 作键K1~K4动作如下:
(1) K1—设置现在的时间。
(2) K2—显示闹钟设置的时间。
(3) K3—设置闹铃的时间。
(4) K4—闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声。
设置当前时间或闹铃时间如下。
(1) K1—时调整。
(2) K2—分调整。
(3) K3—设置完成。
(4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。
//头文件#include<reg51.h>
//数据类型定义
#define ui unsigned int
#define uc unsigned char
//定义蜂鸣器管脚是BEEP
//数码管显示查表
uc code tab[]=
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,0xbf,0x89,0xc7,0xff}
uc t0,a,b,c,d,e,f,miao,fen,xs,n
void display(uc,uc,uc)
//延时1ms函数
void delay(ui z)//延时1毫秒
{
ui a,b
for(a=za>0a--)
for(b=100b>0b--)
}
void init()
void keyscan()
void main() //主函数,在主函数中设置定时的时间,当时间到达预定值时,蜂鸣器响起
{
BEEP=1
init()
while(1)
{
keyscan()
display(xs,fen,miao)
if(xs==7&&fen==0&&miao==0)
{
n=5
while(n--)
{
BEEP=0
delay(500)
BEEP=1
delay(500)
}
}
}
}
void keyscan() //键盘扫描子函数,通过按键来实现相应的动作
{
P3=0x7f
while(P3!=0x7f)
{
delay(10)
while(P3!=0x7f)
{
switch(P3)//按键检测程序段 可以一同按键来更改秒分时的数值
{
case 0x7e:{miao++if(miao==60)miao=0}//如果加到头了 就变0
break
case 0x7d:{miao--if(miao==0xff)miao=59}//如果减到头了 就变59
break
case 0x7b:{fen++if(fen==60)fen=0}//同上
break
case 0x77:{fen--if(fen==0xff)fen=59}//同上
break
}
while(P3!=0x7f)
delay(10)
while(P3!=0x7f)
}
}
P3=0xbf
while(P3!=0xbf)
{
delay(10)
while(P3!=0xbf)
{
switch(P3)
{
case 0xbe:{xs++if(xs==24)xs=0}//如果加到头了 就变0
break
case 0xbd:{xs--if(xs==0xff)xs=23}//如果减到头 就变23 因为小时最大为24 其实24:00=0:00
break
}
while(P3!=0xbf)
delay(10)
while(P3!=0xbf)
}
}
}
void init() //系统初始化开启定时器0中断
{
TMOD=0x01
TH0=(65536-50000)/256
TL0=(65536-50000)%256
EA=1ET0=1TR0=1
}
//秒 分 时 变量的实时计数 运用tmer1中断来实现 50ms中断一次 中断20次就是1s
void timer0() interrupt 1 //定时器1中断子程序,实现正常的走秒
{
TH0=(65536-50000)/256
TL0=(65536-50000)%256
t0++
if(t0==20)
{
t0=0
miao++
if(miao==60)
{
miao=0
fen++
if(fen==60)
{
fen=0
xs++
if(xs==24)
xs=0
}
}
}
}
//运用数码管的动态扫描方式,来驱动数码管
void display(uc xs,uc fen,uc miao) //显示函数,把数送到数码管显示
{
P2=0xfe//选择该位
P0=tab[miao%10]// 显示段码
delay(1)//延时
P0=0xff//断码关掉 防止扫描出现幻影 后面的同上 以此类推
P2=0xfd
P0=tab[miao/10]
delay(1)
P0=0xff
P2=0xfb
P0=tab[16]
delay(1)
P0=0xff
P2=0xf7
P0=tab[fen%10]
delay(1)
P0=0xff
P2=0xef
P0=tab[fen/10]
delay(1)
P0=0xff
P2=0xdf
P0=tab[16]
delay(1)
P0=0xff
P2=0xbf
P0=tab[xs%10]
delay(1)
P0=0xff
P2=0x7f
P0=tab[xs/10]
delay(1)
P0=0xff
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)