采用AT89C2051的6位LED電子鐘/計(jì)數(shù)器散件
一、原理說明:
1、顯示原理:
顯示部分主要器件為2位共陽紅色數(shù)碼管,驅(qū)動(dòng)采用PNP型三極管驅(qū)動(dòng),各端口配有限流電阻,驅(qū)動(dòng)方式為掃描,占用P1.0~P1.6端口。冒號(hào)部分采用4個(gè)Φ3.0的紅色發(fā)光,驅(qū)動(dòng)方式為獨(dú)立端口驅(qū)動(dòng),占用P1.7端口。
2、鍵盤原理:
按鍵S1~S3采用復(fù)用的方式與顯示部分的P3.5、P3.4、P3.2口復(fù)用。其工作方式為,在相應(yīng)端口輸出高電平時(shí)讀取按鍵的狀態(tài)并由單片機(jī)支除抖動(dòng)并賦予相應(yīng)的鍵值。
3、迅響電路及輸入、輸出電路原理:
迅響電路由有源蜂鳴器和PNP型三極管組成。其工作原理是當(dāng)PNP型三極管導(dǎo)通后有源蜂鳴器立即發(fā)出定頻聲響。驅(qū)動(dòng)方式為獨(dú)立端口驅(qū)動(dòng),占用P3.7端口。
輸出電路是與迅響電路復(fù)合作用的,其電路結(jié)構(gòu)為有源蜂鳴器,5.1K定值電阻R6,排針J3并聯(lián)。當(dāng)有源蜂鳴器無迅響時(shí)J3輸出低電平,當(dāng)有源蜂鳴器發(fā)出聲響時(shí)J3輸出高電平,J3可接入數(shù)字電路等各種需要。驅(qū)動(dòng)方式為迅響復(fù)合輸出,不占端口。
輸入電路是與迅響電路復(fù)合作用的,其電路結(jié)構(gòu)是在迅響電路的PNP型三極管的基極電路中接入排針J2。引腳排針可改變單片機(jī)I/O口的電平狀態(tài),從而達(dá)到輸入的目的。驅(qū)動(dòng)方式為復(fù)合端口驅(qū)動(dòng),占用P3.7端口。
4、單片機(jī)系統(tǒng):
本產(chǎn)品采用AT89C2051為核心器件(AT89C2051燒寫程序必須借助專用編程器,我們提供的單片機(jī)已經(jīng)寫入程序),并配合所有的必須的電路,只具有上電復(fù)位的功能,無手動(dòng)復(fù)位功能。
二、使用說明:
1、功能按鍵說明: S1為功能選擇按鍵,S2為功能擴(kuò)展按鍵,S3為數(shù)值加一按鍵。
2、功能及操作說明:操作時(shí),連續(xù)短時(shí)間(小于1秒)按動(dòng)S1,即可在以上的6個(gè)功能中連續(xù)循環(huán)。中途如果長(zhǎng)按(大于2秒)S1,則立即回到時(shí)鐘功能的狀態(tài)。
1、時(shí)鐘功能:上電后即顯示10:10:00 ,寓意十全十美。
2、校時(shí)功能:短按一次S1,即當(dāng)前時(shí)間和冒號(hào)為閃爍狀態(tài),按動(dòng)S2則小時(shí)位加1,按動(dòng)S3則分鐘位加1,秒時(shí)不可調(diào)。
3、鬧鐘功能:短按二次S1,顯示狀態(tài)為22:10:00,冒號(hào)為長(zhǎng)亮。按動(dòng)S2剛小時(shí)位加1,按動(dòng)S3則分鐘位加1,秒時(shí)不可調(diào)。當(dāng)按動(dòng)小時(shí)位超過23時(shí)則會(huì)顯示--:--:--,這個(gè)表示關(guān)閉鬧鐘功能。鬧鈴聲為蜂鳴器長(zhǎng)鳴3秒鐘。
4、倒計(jì)時(shí)功能:短按三次S1,顯示狀態(tài)為 0,冒號(hào)為長(zhǎng)滅。按動(dòng)S2則從低位依此顯示高位,按動(dòng)S3則相應(yīng)位加1,當(dāng)S2按到第6次時(shí)會(huì)在所設(shè)定的時(shí)間狀態(tài)下開始倒計(jì)時(shí),再次按動(dòng)S2將再次進(jìn)入調(diào)整功能,并且停止倒計(jì)時(shí)。
5、秒表功能:短按四次S1,顯示狀態(tài)為00:00:00,冒號(hào)為長(zhǎng)亮。按動(dòng)S2則開始秒表計(jì)時(shí),再次按動(dòng)S2則停止計(jì)時(shí),當(dāng)停止計(jì)時(shí)的時(shí)候按動(dòng)S3則秒表清零。
6、計(jì)數(shù)器功能:短按五次S1,顯示狀態(tài)為00:00:00,冒號(hào)為長(zhǎng)滅,按動(dòng)S2則計(jì)數(shù)器加1,按動(dòng)S3則計(jì)數(shù)器清零。
采用AT89C2051的6位LED電子鐘(計(jì)數(shù)器)散件每套20元
以下是部分C語言源程序,購買產(chǎn)品后可以向我們索要完整的單片機(jī)C語言源程序、燒寫文件和說明書。
#include<REG2051.H>
code senen_seg[10]={0x81,0xe7,0x92,0xa2,0xe4,0xa8,0x88,0xe3,0x80,0xa0}; //P1.7(冒號(hào))口高電平
bit key1_enter=0,key2_enter=0,key3_enter=0,countdown_mark=0,stopwatch_mark=0,count_mark=0,bell_mark=0;
//狀態(tài)標(biāo)志
unsigned char program=0,program_variable=0,count_bit=0,count=0;
unsigned char hour=10,minute=10,second=0; //時(shí)間變量
unsigned char delayed_hour=22,delayed_minute=10,delayed_second=0; //定時(shí)變量
unsigned char count_hour=0,count_minute=0,count_second=0; //計(jì)時(shí)計(jì)數(shù)變量
unsigned int count_time=0,count_count=0;
void delay(unsigned int t) //延時(shí)子程序
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}
void time0_init(void){ //定時(shí)計(jì)數(shù)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 //定時(shí)計(jì)數(shù)0器中斷函數(shù)
{
count_time++; //時(shí)鐘計(jì)時(shí)程序
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){ //倒計(jì)時(shí)程序
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;
}
}
}
}
}
unsigned char show_key (void){
unsigned char x=0,y=0;
switch (program){
case 0: P1&=senen_seg[second%10]; //時(shí)鐘秒的個(gè)位
break;
case 1: if(count_time>=2000) P1&=senen_seg[second%10]; //校正秒的個(gè)位
break;
case 2: if(delayed_hour==24) P1=0xfe; //鬧鐘秒的個(gè)位
else P1&=senen_seg[delayed_second%10];
break;
case 3: if(count_bit>=0) P1&=senen_seg[count_second%10];//倒計(jì)時(shí)秒的個(gè)位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_second%10]; //秒表秒的個(gè)位
break;
case 5: P1&=senen_seg[count_second%10]; //計(jì)數(shù)器個(gè)位
break;
}
P3_3=0;
delay(10);
if(P3_5==0){ //功能鍵1識(shí)別
key1_enter=1;
if(count<=254)count++;
}
if(P3_4==0) key2_enter=1; //功能鍵2識(shí)別
if(P3_2==0) key3_enter=1; //功能鍵3識(shí)別
P3_3=1;
P1|=0xff;
switch (program){
case 0: P1&=senen_seg[second/10]; //時(shí)鐘秒的十位
break;
case 1: if(count_time>=2000) P1&=senen_seg[second/10]; //校正秒的十位
break;
case 2: if(delayed_hour==24) P1=0xfe; //鬧鐘秒的十位
else P1&=senen_seg[delayed_second/10];
break;
case 3: if(count_bit>=1) P1&=senen_seg[count_second/10];//倒計(jì)時(shí)秒的十位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_second/10]; //秒表秒的十位
break;
case 5: P1&=senen_seg[count_second/10]; //計(jì)數(shù)器十位
break;
}
P3_1=0;
delay(10);
P3_1=1;
P1|=0xff;
switch (program){
case 0: P1&=senen_seg[minute%10]; //時(shí)鐘分的個(gè)位
break;
case 1: if(count_time>=2000) P1&=senen_seg[minute%10]; //校正分的個(gè)位
break;
case 2: if(delayed_hour==24) P1=0xfe; //鬧鐘分的個(gè)位
else P1&=senen_seg[delayed_minute%10];
break;
case 3: if(count_bit>=2) P1&=senen_seg[count_minute%10];//倒計(jì)時(shí)分的個(gè)位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_minute%10]; //秒表分的個(gè)位
break;
case 5: P1&=senen_seg[count_minute%10]; //計(jì)數(shù)器百位
break;
}
P3_2=0;
delay(10);
P3_2=1;
P1|=0xff;
switch (program){
case 0: P1&=senen_seg[minute/10]; //時(shí)鐘秒的個(gè)位
break;
case 1: if(count_time>=2000) P1&=senen_seg[minute/10]; //校正秒的個(gè)位
break;
case 2: if(delayed_hour==24) P1=0xfe; //鬧鐘秒的個(gè)位
else P1&=senen_seg[delayed_minute/10];
break;
case 3: if(count_bit>=3) P1&=senen_seg[count_minute/10];//倒計(jì)時(shí)秒的個(gè)位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_minute/10]; //秒表秒的個(gè)位
break;
case 5: P1&=senen_seg[count_minute/10]; //計(jì)數(shù)器千位
break;
}
P3_5=0;
delay(10);
P3_5=1;
P1|=0xff;
switch (program){
case 0: P1&=senen_seg[hour%10]; //時(shí)鐘時(shí)的個(gè)位
break;
case 1: if(count_time>=2000) P1&=senen_seg[hour%10]; //校正時(shí)的個(gè)位
break;
case 2: if(delayed_hour==24) P1=0xfe; //鬧鐘時(shí)的個(gè)位
else P1&=senen_seg[delayed_hour%10];
break;
case 3: if(count_bit>=4) P1&=senen_seg[count_hour%10];//倒計(jì)時(shí)時(shí)的個(gè)位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_hour%10]; //秒表時(shí)的個(gè)位
break;
case 5: P1&=senen_seg[count_hour%10]; //計(jì)數(shù)器萬位
break;
}
P3_0=0;
delay(10);
if(P3_4==1 && key2_enter==1){
x=3; //確認(rèn)功能鍵2識(shí)別,返回3
key2_enter=0;
}
P3_0=1;
P1|=0xff;
switch (program){
case 0: P1&=senen_seg[hour/10]; //時(shí)鐘時(shí)的個(gè)位
break;
case 1: if(count_time>=2000) P1&=senen_seg[hour/10]; //校正時(shí)的個(gè)位
break;
case 2: if(delayed_hour==24) P1=0xfe; //鬧鐘時(shí)的個(gè)位
else P1&=senen_seg[delayed_hour/10];
break;
case 3: if(count_bit>=5)P1&=senen_seg[count_hour/10]; //倒計(jì)時(shí)時(shí)的個(gè)位
else P1=0xff;
break;
case 4: P1&=senen_seg[count_hour/10]; //秒表時(shí)的個(gè)位
break;
case 5: P1&=senen_seg[count_hour/10]; //計(jì)數(shù)器萬位
break;
}
P3_4=0;
delay(10);
if(P3_5==1 && key1_enter==1){ //確認(rèn)功能鍵1識(shí)別,執(zhí)行退出或進(jìn)入下一個(gè)功能
if(count>=127) x=1; //確認(rèn)功能鍵1為長(zhǎng)按,返回1
else x=2; //確認(rèn)功能鍵1為短按,返回2
key1_enter=0;
count=0;
}
if(P3_2==1 && key3_enter==1){
x=4; //確認(rèn)功能鍵3識(shí)別,返回4
key3_enter=0;
}
P3_4=1;
P1|=0xff;
if(program<=1 && count_time>=2000) P1&=0xff; //校時(shí)和顯示功能時(shí)鐘時(shí)冒號(hào)閃爍
if(program<=1 && count_time<=2000) P1&=0x7f;
if(program==2) P1&=0x7f; //設(shè)置鬧鐘功能時(shí)冒號(hào)長(zhǎng)亮
if(program==3) P1&=0xff; //設(shè)置倒計(jì)時(shí)功能時(shí)冒號(hào)長(zhǎng)滅
if(program==4) P1&=0x7f; //設(shè)置秒表功能時(shí)冒號(hào)長(zhǎng)亮
if(program==5) P1&=0xff; //設(shè)置計(jì)數(shù)時(shí)冒號(hào)長(zhǎng)滅
y=x;
x=0;
return y;
}
void main(){ //主程序
P1=0xff;
P3=0xff;
time0_init();
while(1){
switch(program){
case 0: while(program==0){ //時(shí)鐘菜單
switch(show_key()){
case 0: break;
case 1: program=0;
break;
case 2: program=1;
break;
}
}
break; //校時(shí)菜單
case 1: while(program==1){
switch(show_key()){
case 0: break;
case 1: program=0;
break;
case 2: program=2;
break;
case 3: hour++;
if(hour>=24)hour=0;
break;
case 4: minute++;
if(minute>=60)minute=0;
break;
}
}
break;
case 2: while(program==2){ //鬧鐘菜單
switch(show_key()){
case 0: break;
case 1: program=0;
break;
case 2: program=3;
break;
case 3: delayed_hour++;
if(delayed_hour>=25)delayed_hour=0;
break;
case 4: delayed_minute++;
if(delayed_minute>=60)delayed_minute=0;
break;
}
}
break;
case 3: while(program==3){ //倒計(jì)時(shí)菜單
switch(show_key()){
case 0: break;
case 1: program=0;
break;
case 2: program=4;
break;
case 3: count_bit++;
if(count_bit>=7)count_bit=0;
break;
case 4: switch(count_bit){
case 0: count_second+=1;
break;
case 1: count_second+=10;
break;
case 2: count_minute+=1;
break;
case 3: count_minute+=10;
break;
case 4: count_hour+=1;
break;
case 5: count_hour+=10;
break;
case 6: break;
}
if(count_hour>=100) count_hour-=100;
if(count_minute>=60) count_minute-=60;
if(count_second>=60) count_second-=60;
break;
}
if(count_bit==6) countdown_mark=1;
else countdown_mark=0;
}
break;
case 4: count_hour=0; //秒表菜單
count_minute=0;
count_second=0;
while(program==4){
switch(show_key()){
case 0: break;
case 1: program=0;
break;
case 2: program=5;
break;
case 3: stopwatch_mark=~stopwatch_mark;
break;
case 4: if(stopwatch_mark==0){
count_hour=0;
count_minute=0;
count_second=0;
}
break;
}
}
break; //計(jì)數(shù)器菜單
case 5: count_hour=0;
count_minute=0;
count_second=0;
while(program==5){
switch(show_key()){
case 0: break;
case 1: program=0;
break;
case 2: program=0;
break;
case 3: count_second++;
if(count_second>=100){
count_second=0;
count_minute++;
if(count_minute>=100){
count_minute=0;
count_hour++;
if(count_hour>=100)count_hour=0;
}
}
break;
case 4: count_hour=0;
count_minute=0;
count_second=0;
break;
}
if(P3_7==0){
while(P3_7==0) show_key();
count_second++;
if(count_second>=100){
count_second=0;
count_minute++;
if(count_minute>=100){
count_minute=0;
全部產(chǎn)品價(jià)格 銀行帳號(hào)及郵購需知 訂貨流程 立即訂貨!
小靈通:0513-83082087 電話/傳真:0513-83342087 聯(lián)系人:謝剛
辦公地址:郵編226200 江蘇省啟東市江海中路511號(hào)水晶苑 A1
電子制作實(shí)驗(yàn)室網(wǎng)站 www.xinjiapolvyou.cn 啟東剛成電子有限公司簡(jiǎn)介