让51单片机闹钟响十秒怎样写程序?

让51单片机闹钟响十秒怎样写程序?,第1张

显示格式为“时时分分”。由分位闪动来做秒计数表示。

一旦时间到则发出声响。

程序执行后工作指示灯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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11064742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存