當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]我是電子制作愛好者,最近從網(wǎng)上看到這款單片機(jī)驅(qū)動(dòng)的發(fā)光二極管做的數(shù)碼管時(shí)鐘,作者:whw8099,以下是作者的介紹“以前做的數(shù)碼管時(shí)鐘,總覺得太小了,遠(yuǎn)處看不清,就用發(fā)光二極管自己制作了一個(gè)數(shù)碼管,這樣就亮多

我是電子制作愛好者,最近從網(wǎng)上看到這款單片機(jī)驅(qū)動(dòng)的發(fā)光二極管做的數(shù)碼管時(shí)鐘,作者:whw8099,以下是作者的介紹“以前做的數(shù)碼管時(shí)鐘,總覺得太小了,遠(yuǎn)處看不清,就用發(fā)光二極管自己制作了一個(gè)數(shù)碼管,這樣就亮多了。技術(shù)的含量不是很高,但是費(fèi)功夫,單片機(jī)程序是在書上看到的,作了一些小修改。硬件中沒有用DS1302,單片機(jī)晶振用12M(程序以12M晶振進(jìn)行計(jì)算的),走時(shí)比用DS1302還要準(zhǔn)?!碧卮耸占D(zhuǎn)載。

接口:
數(shù)碼管:P0^0~P0^7
位選:P2^0~P2^3
設(shè)置鍵P1^5~P1^7(短按:設(shè)置顯示時(shí)間,長按:設(shè)置鬧鐘時(shí)間)
加1鍵P1^6
減1鍵P1^7
BeepP3^7

//作者:whw8099
#include
#include
#define uchar unsigned char
#define uintunsigned int

#defineKSET0x60 //設(shè)置當(dāng)前時(shí)間鍵
#defineKSET_LONG0x61//設(shè)置鬧鈴時(shí)間鍵
#defineKINC0x50 //加1鍵
#defineKDEC0x30//減1鍵

sbitSPK=P3^7;//蜂鳴器控制引腳

uchar code MAX[2]={24,60};//時(shí)、分的最大值
uchar code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x8c,0xff};
uchar dbuf[4]={0,0,0,0};//4位顯示緩存
uintcount;//用于累加定時(shí)器T0的溢出中斷次數(shù),取值為0到4000

uchar time[3]={0,0,0}; //當(dāng)前時(shí)、分、秒
uchar ala[2]={0,0};//報(bào)警時(shí)、分
ucharstate;//state=0:正常走時(shí)方式;
//state=1:設(shè)置方式;
//state=2:正在鬧鈴

bitupdate;//時(shí)間更改標(biāo)志
uchar flash=00;//閃爍控制字
uchar disp_on=0xf0;//顯示控制位

void delay(void)
{ uchar i;
for(i=0;i<200;i++);
}

void hexbcd(uchar *tp)
{dbuf[3]=tp[0]/10;//將時(shí)拆分為BCD碼送顯示緩存
dbuf[2]=tp[0]|0x80;
dbuf[1]=tp[1]/10;//將分拆分為BCD碼送顯示緩存
dbuf[0]=tp[1];
}
void disp(void)
{ static ucharcn=0;
uchar n,bsel;
bsel=0xfe;//最初點(diǎn)亮最低位
for(n=0;n<4;n++)
{ P2=bsel|disp_on;//位選口
P0=segtab[dbuf[n]&0x7f];//顯示緩沖單元的數(shù)據(jù)查出字段碼表
if((dbuf[n]&0x80)!=0)
P0=P0&0x7f;
bsel=_crol_(bsel,1);//準(zhǔn)備顯示下一位
delay();//每位顯示約1毫秒
P0=0xff;//熄滅數(shù)碼管,防止當(dāng)前位在下一位置顯示出來
}
cn++;//每顯示一遍,cn加1
if(cn==200)
{ disp_on=disp_on^flash;
dbuf[2]=dbuf[2]^0x80;
cn=0;
}
}

voidtime0(void) interrupt 1using 1
{ static uintn=0,m=0;
count++;//中斷次數(shù)加1
if(count==4000)//滿1s
{ count=0;//count清0
time[2]++;//秒加1
if(time[2]==60)//滿60秒
{ time[2]=0;//秒清0
time[1]++;//分加1
if(state!=1) update=1; //更新標(biāo)志
if(time[1]==60)//滿60分
{ time[1]=0;//分清0
time[0]++;//時(shí)加1
if(time[0]==24)//滿24小時(shí)
time[0]=0;//時(shí)清0
}
}
if((state==0)&&(time[2]==0))//當(dāng)前為走時(shí)狀態(tài)且剛滿1分(60秒)
{ if((time[0]==ala[0])&&(time[1]==ala[1])) //鬧鈴時(shí)間到
{ flash=0x0f;//當(dāng)前時(shí)間閃爍
disp_on=0xf0;
state=2;//當(dāng)前狀態(tài)設(shè)置為正在鬧鈴
dbuf[2]=dbuf[2]|0x80;//將時(shí)與分的分隔符顯示出來
}
}
}
if(state==0x02)//如果當(dāng)前正在鬧鈴
{ if(count%2==0)//如果滿500?s(用來產(chǎn)生頻率為1KHZ的方波)
{n++;
if(n<500)//在1秒的前1/4秒內(nèi)
SPK=~SPK; //蜂鳴器發(fā)聲
else
SPK=1;//產(chǎn)生3/4秒的停頓
if(n==2000)//如果滿1 S(每次鳴叫間隔1S)
{n=0;//n清0,重新再由0計(jì)到2000(1S)
m++;//n計(jì)滿2000(1S)m加1
if(m==6)//如果滿6秒
{ state=0;//鬧鈴時(shí)間結(jié)束
m=0;//m清0
flash=0x00;//恢復(fù)正常顯示
disp_on=0xf0;
}
}
}
}
}

uchar getkey(void)
{ ucharkey;
uchart;
disp();
if((key=P1&0x70)==0x70) return 0xff;
for(t=0;t<5;t++) disp();
if((key=P1&0x70)==0x70) return 0xff;
while((P1&0x70)!=0x70)//檢測(cè)按鍵時(shí)間
{ disp();
if(t<250) t++;
}
if((t>200)&&(key==0x60)) return 0x61;
return key;
}
void set_time(uchar *tp)
{ uchar p=0;
uchar k;
state=1;//當(dāng)前為設(shè)置狀態(tài)
flash=0x0c;//LED顯示器最高2位(時(shí))閃爍
while(1)
{ hexbcd(tp);//將要設(shè)置的時(shí)、分轉(zhuǎn)換成BCD碼送顯示緩存
k=getkey();//讀取按鍵鍵值
if(k==KSET)//如果是SET鍵
{ p++;//調(diào)整下標(biāo)p,使其指向是時(shí)或分
p=p&0x01;//防止下標(biāo)出界
disp_on=0xf0;//恢復(fù)正常顯示
if(p==0x00) //如果指向的是時(shí)
flash=0x0c;//LED顯示器的高2位閃爍
else
flash=0x03;//LED顯示器的低2位閃爍
}
else if(k==KINC)//如果是加1鍵
{ tp[p]++;//時(shí)/分加1
if(tp[p]==MAX[p]) tp[p]=0;//檢查時(shí)/分是否超出范圍
}
else if(k==KDEC)//如果是減1鍵
{ tp[p]--;//時(shí)/分減1
if(tp[p]==0xff) tp[p]=MAX[p]-1;//檢查時(shí)/分是否超出范圍
}
else if(k==KSET_LONG)//如果長按SET鍵,準(zhǔn)備返回
break;
}
hexbcd(time);//恢復(fù)當(dāng)前時(shí)間的顯示
flash=0x00;//LED顯示器恢復(fù)正常顯示
disp_on=0xf0;
state=0;//當(dāng)前狀態(tài)恢復(fù)為正常走時(shí)狀態(tài)
}
voidmain(void)
{
uchark;
state=0;//正常顯示時(shí)鐘方式
count=0;//計(jì)數(shù)器清0
flash=0x00;//顯示器正常顯示
disp_on=0xf0;
time[0]=12;//初始化當(dāng)前時(shí)、分、秒
time[1]=25;
time[2]=55;
ala[0]=12;//初始化 時(shí)、分
ala[1]=26;
hexbcd(time); //將當(dāng)前時(shí)間轉(zhuǎn)換為BCD碼到顯示緩存
TMOD=0x02; //T0工作于定時(shí)方式2
TH0=-250;//T0的定時(shí)時(shí)間為250?s
TL0=-250;
ET0=1;//允許T0中斷
TR0=1;//啟動(dòng)定時(shí)
EA=1;//開中斷
while(1)
{ disp();
k=getkey();//讀取按鍵狀態(tài)
if(state==0x02)//如果當(dāng)前正在鬧鈴
{ if(k!=0xff)//只要有鍵按下
{ state=0x00; //退出鬧鈴方式,回到正常走時(shí)狀態(tài)
flash=0x00; //正常顯示,不閃爍
disp_on=0xf0;
}
}
else if (k==KSET_LONG)//如果長按SET鍵
{
set_time(ala);//設(shè)置報(bào)警時(shí)間
}
else if(k==KSET)//如果是SET鍵
{ TR0=0;//關(guān)閉定時(shí)器T0
set_time(time);//設(shè)置當(dāng)前時(shí)間
TR0=1;//重新開啟定時(shí)器
}
if(update==1)
{ update=0;
hexbcd(time);
}
}
}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉