6位LED电子钟.docx

上传人:b****6 文档编号:2994145 上传时间:2022-11-16 格式:DOCX 页数:12 大小:156.54KB
下载 相关 举报
6位LED电子钟.docx_第1页
第1页 / 共12页
6位LED电子钟.docx_第2页
第2页 / 共12页
6位LED电子钟.docx_第3页
第3页 / 共12页
6位LED电子钟.docx_第4页
第4页 / 共12页
6位LED电子钟.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

6位LED电子钟.docx

《6位LED电子钟.docx》由会员分享,可在线阅读,更多相关《6位LED电子钟.docx(12页珍藏版)》请在冰豆网上搜索。

6位LED电子钟.docx

6位LED电子钟

6位LED电子钟

一、原理说明:

1、显示原理:

显示部分主要器件为2位共阳红色数码管,驱动采用PNP型三极管驱动,各端口配有限流电阻,驱动方式为扫描,占用P1.0~P1.6端口。

冒号部分采用4个Φ3.0的红色发光,驱动方式为独立端口驱动,占用P1.7端口。

2、键盘原理:

按键S1~S3采用复用的方式与显示部分的P3.5、P3.4、P3.2口复用。

其工作方式为,在相应端口输出高电平时读取按键的状态并由单片机支除抖动并赋予相应的键值。

3、迅响电路及输入、输出电路原理:

迅响电路由有源蜂鸣器和PNP型三极管组成。

其工作原理是当PNP型三极管导通后有源蜂鸣器立即发出定频声响。

驱动方式为独立端口驱动,占用P3.7端口。

输出电路是与迅响电路复合作用的,其电路结构为有源蜂鸣器,5.1K定值电阻R6,排针J3并联。

当有源蜂鸣器无迅响时J3输出低电平,当有源蜂鸣器发出声响时J3输出高电平,J3可接入数字电路等各种需要。

驱动方式为迅响复合输出,不占端口。

输入电路是与迅响电路复合作用的,其电路结构是在迅响电路的PNP型三极管的基极电路中接入排针J2。

引脚排针可改变单片机I/O口的电平状态,从而达到输入的目的。

驱动方式为复合端口驱动,占用P3.7端口。

4、单片机系统:

本产品采用AT89C2051为核心器件(AT89C2051烧写程序必须借助专用编程器,我们提供的单片机已经写入程序),并配合所有的必须的电路,只具有上电复位的功能,无手动复位功能。

二、使用说明:

1、功能按键说明:

S1为功能选择按键,S2为功能扩展按键,S3为数值加一按键。

2、功能及操作说明:

操作时,连续短时间(小于1秒)按动S1,即可在以上的6个功能中连续循环。

中途如果长按(大于2秒)S1,则立即回到时钟功能的状态。

1、时钟功能:

上电后即显示10:

10:

00,寓意十全十美。

2、校时功能:

短按一次S1,即当前时间和冒号为闪烁状态,按动S2则小时位加1,按动S3则分钟位加1,秒时不可调。

3、闹钟功能:

短按二次S1,显示状态为22:

10:

00,冒号为长亮。

按动S2刚小时位加1,按动S3则分钟位加1,秒时不可调。

当按动小时位超过23时则会显示--:

--:

--,这个表示关闭闹钟功能。

闹铃声为蜂鸣器长鸣3秒钟。

4、倒计时功能:

短按三次S1,显示状态为0,冒号为长灭。

按动S2则从低位依此显示高位,按动S3则相应位加1,当S2按到第6次时会在所设定的时间状态下开始倒计时,再次按动S2将再次进入调整功能,并且停止倒计时。

5、秒表功能:

短按四次S1,显示状态为00:

00:

00,冒号为长亮。

按动S2则开始秒表计时,再次按动S2则停止计时,当停止计时的时候按动S3则秒表清零。

6、计数器功能:

短按五次S1,显示状态为00:

00:

00,冒号为长灭,按动S2则计数器加1,按动S3则计数器清零。

 

 

 

程序:

#include

codesenen_seg[10]={0x81,0xe7,0x92,0xa2,0xe4,0xa8,0x88,0xe3,0x80,0xa0};//P1.7(冒号)口高电平

bitkey1_enter=0,key2_enter=0,key3_enter=0,countdown_mark=0,stopwatch_mark=0,count_mark=0,bell_mark=0;//状态标志

unsignedcharprogram=0,program_variable=0,count_bit=0,count=0;

unsignedcharhour=10,minute=10,second=0;//时间变量

unsignedchardelayed_hour=22,delayed_minute=10,delayed_second=0;//定时变量

unsignedcharcount_hour=0,count_minute=0,count_second=0;//计时计数变量

unsignedintcount_time=0,count_count=0;

voiddelay(unsignedintt)//延时子程序

{

unsignedinti,j;

for(i=0;ifor(j=0;j<10;j++)

;

}

voidtime0_init(void){//定时计数0器初始化

EA=0;

TR0=0;

TMOD=0x02;

TH0=0x4;

TL0=0x4;

ET0=1;

TR0=1;

EA=1;

}

staticvoidtimer0_isr(void)interruptTF0_VECTORusing1//定时计数0器中断函数

{

count_time++;//时钟计时程序

if(count_time>=4020){

count_time=0;

second++;

if(second>=60){

second=0;

minute++;

if(minute>=60){

minute=0;

hour++;

if(hour>=24)hour=0;

}

}

}

if(delayed_hour==hour&&delayed_minute==minute&&second<4)P3_7=0;

elseP3_7=1;

if(countdown_mark==1){//倒计时程序

count_count++;

if(count_count>=4000&&(count_second!

=0|count_minute!

=0|count_hour!

=0)){

count_count=0;

count_second--;

if(count_second>=60){

count_second=59;

count_minute--;

if(count_minute>=60){

count_minute=59;

count_hour--;

if(count_hour>=100)count_hour=99;

}

}

}

if(count_second==0&&count_minute==0&&count_hour==0&&count_count<=12000)P3_7=0;

elseP3_7=1;

if(count_count>=15000)count_count=14000;

}

if(stopwatch_mark==1){//秒表程序

count_count++;

if(count_count>=40){

count_count=0;

count_second++;

if(count_second>=100){

count_second=0;

count_minute++;

if(count_minute>=60){

count_minute=0;

count_hour++;

if(count_hour>=60)count_hour=0;

}

}

}

}

}

unsignedcharshow_key(void){

unsignedcharx=0,y=0;

switch(program){

case0:

P1&=senen_seg[second%10];//时钟秒的个位

break;

case1:

if(count_time>=2000)P1&=senen_seg[second%10];//校正秒的个位

break;

case2:

if(delayed_hour==24)P1=0xfe;//闹钟秒的个位

elseP1&=senen_seg[delayed_second%10];

break;

case3:

if(count_bit>=0)P1&=senen_seg[count_second%10];//倒计时秒的个位

elseP1=0xff;

break;

case4:

P1&=senen_seg[count_second%10];//秒表秒的个位

break;

case5:

P1&=senen_seg[count_second%10];//计数器个位

break;

}

P3_3=0;

delay(10);

if(P3_5==0){//功能键1识别

key1_enter=1;

if(count<=254)count++;

}

if(P3_4==0)key2_enter=1;//功能键2识别

if(P3_2==0)key3_enter=1;//功能键3识别

P3_3=1;

P1|=0xff;

switch(program){

case0:

P1&=senen_seg[second/10];//时钟秒的十位

break;

case1:

if(count_time>=2000)P1&=senen_seg[second/10];//校正秒的十位

break;

case2:

if(delayed_hour==24)P1=0xfe;//闹钟秒的十位

elseP1&=senen_seg[delayed_second/10];

break;

case3:

if(count_bit>=1)P1&=senen_seg[count_second/10];//倒计时秒的十位

elseP1=0xff;

break;

case4:

P1&=senen_seg[count_second/10];//秒表秒的十位

break;

case5:

P1&=senen_seg[count_second/10];//计数器十位

break;

}

P3_1=0;

delay(10);

P3_1=1;

P1|=0xff;

switch(program){

case0:

P1&=senen_seg[minute%10];//时钟分的个位

break;

case1:

if(count_time>=2000)P1&=senen_seg[minute%10];//校正分的个位

break;

case2:

if(delayed_hour==24)P1=0xfe;//闹钟分的个位

elseP1&=senen_seg[delayed_minute%10];

break;

case3:

if(count_bit>=2)P1&=senen_seg[count_minute%10];//倒计时分的个位

elseP1=0xff;

break;

case4:

P1&=senen_seg[count_minute%10];//秒表分的个位

break;

case5:

P1&=senen_seg[count_minute%10];//计数器百位

break;

}

P3_2=0;

delay(10);

P3_2=1;

P1|=0xff;

switch(program){

case0:

P1&=senen_seg[minute/10];//时钟秒的个位

break;

case1:

if(count_time>=2000)P1&=senen_seg[minute/10];//校正秒的个位

break;

case2:

if(delayed_hour==24)P1=0xfe;//闹钟秒的个位

elseP1&=senen_seg[delayed_minute/10];

break;

case3:

if(count_bit>=3)P1&=senen_seg[count_minute/10];//倒计时秒的个位

elseP

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1