微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 6位LED显示单片机控制电子钟/计数器

6位LED显示单片机控制电子钟/计数器

时间:11-10 来源:互联网 点击:

#############################################################################################################################################

产品2:采用AT89C2051的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则计数器清零。

采用AT89C2051的6位LED电子钟(计数器)散件每套28元

以下是部分C语言源程序,购买产品后可以向我们索要完整的单片机C语言源程序、烧写文件和说明书。

#include

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

bit key1_enter=0,key2_enter=0,key3_enter=0,countdown_mark=0,stopwatch_mark=0,count_mark=0,bell_mark=0; //状态标志
unsigned char program=0,program_variable=0,count_bit=0,count=0;
unsigned char hour=10,minute=10,second=0; //时间变量
unsigned char delayed_hour=22,delayed_minute=10,delayed_second=0; //定时变量
unsigned char count_hour=0,count_minute=0,count_second=0; //计时计数变量
unsigned int count_time=0,count_count=0;

void delay(unsigned int t) //延时子程序
{
unsigned int i,j;
for(i=0;ifor(j=0;j<10;j++)
;
}

void time0_init(void){ //定时计数0器初始化
EA=0;
TR0=0;
TMOD=0x02;
TH0=0x4;
TL0=0x4;
ET0=1;
TR0=1;
EA=1;
}

static void timer0_isr(void) interrupt TF0_VECTOR using 1 //定时计数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;
else P3_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;
else P3_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;
}
}
}
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top