|
近些天圖書館收書,規(guī)定人離開座位不能超過15分鐘不然就會(huì)把書收走,所以制作了一個(gè)計(jì)時(shí)器,用來指示人離開的時(shí)長(zhǎng),按照最簡(jiǎn)需求設(shè)計(jì),計(jì)時(shí)時(shí)長(zhǎng)為1小時(shí),超出時(shí)間清零。
附帶了一個(gè)按鍵,用于計(jì)時(shí)過程中的暫停,這樣這個(gè)計(jì)時(shí)器可以當(dāng)作秒表使用了,做個(gè)題什么的限制一下時(shí)間又不用占用手機(jī)。而且最關(guān)鍵的是小巧,看起來不會(huì)太蠢...
1539009750357.jpg (3.6 MB, 下載次數(shù): 80)
下載附件
2018-10-8 22:46 上傳
1539009807142.jpg (3.87 MB, 下載次數(shù): 90)
下載附件
2018-10-8 22:46 上傳
說明:
1.單片機(jī)使用STC15F104W,共有6個(gè)I/O
2.數(shù)碼管為時(shí)鐘樣式的數(shù)碼管,中間帶有“:”的,焊接時(shí)按照最短路徑焊接,移植程序請(qǐng)考慮修改smgduan[10]的段選值
3.程序定時(shí)器0初始值是在12MHz晶振下的初始值,移植程序時(shí)請(qǐng)注意修改
4.數(shù)碼管采用74HC138+74HC595驅(qū)動(dòng),595典型連接方式到單片機(jī)普通I/O,138改為2-4線驅(qū)動(dòng),S2=0,Y0~Y3進(jìn)行位選
5.清零操作就重新上電就好啦,畢竟是最簡(jiǎn)需求嘛
6.整個(gè)板子需要4根跳線,分別是
74HC595的SRCLR'到VCC
74HC138的S2到GND
板子連接時(shí)138譯碼器GND到供電地的跳線
板子背面使用較硬鐵絲(剪下的元件引線)連接數(shù)碼管第4位到138譯碼器Y3
程序設(shè)計(jì)思路:
初始化一個(gè)5ms的定時(shí)器,每計(jì)數(shù)200次為1s,每秒將時(shí)間值變量加一,在主程序中循環(huán)處理這個(gè)數(shù)據(jù),對(duì)60取模得到分鐘數(shù),取余得到秒數(shù)。
將所取到的分鐘和秒按位取出,得到待顯示的每一位數(shù)據(jù),存放在Display_time[4]數(shù)組中。調(diào)用數(shù)碼管顯示函數(shù)進(jìn)行顯示。
在循環(huán)中加入一個(gè)按鍵檢測(cè),如果按鍵按下,就將定時(shí)器運(yùn)行位取反,實(shí)現(xiàn)暫停效果。
設(shè)定一個(gè)標(biāo)志位point,每秒的前一半令其為1,后一半令其為0,在顯示函數(shù)中對(duì)這一位進(jìn)行判斷,決定數(shù)碼管小數(shù)點(diǎn)位是否亮。
注意:時(shí)鐘數(shù)碼管的中間“:”是第二位小數(shù)點(diǎn),但是為了簡(jiǎn)便,將所有小數(shù)點(diǎn)全部點(diǎn)亮了。
- #include<STC15.H>
- #include<intrins.h>
- sbit S1=P3^0;
- sbit S2=P3^5;
- sbit SER=P3^1;
- sbit RCLK=P3^2;
- sbit SRCLK=P3^3;//74HC595管腳定義
- sbit KEY=P3^4;
- //全局變量表
- unsigned char code smgduan[10]={0xf5,0x05,0xb3,0x97,0x47,0xd6,0xf6,0x85,0xf7,0xd7};//給74HC595的段選值
- unsigned char Display_Time[4]={0,0,0,0};
- unsigned int time=0;
- unsigned char cnt=0;//定時(shí)器周期計(jì)數(shù)
- bit point=1;
- /*##############################################################################################
- 設(shè)計(jì)名稱:簡(jiǎn)易一小時(shí)計(jì)時(shí)器
- 設(shè)計(jì)者:清河
- 平臺(tái):STC15F104W
- 硬件部分
- 數(shù)碼管顯示:位選使用74HC138改為2-4線譯碼、段選使用74HC595減少IO口使用
- 使用4位共陰極數(shù)碼管,時(shí)鐘數(shù)碼管,顯示無(wú)符號(hào)位
- 注意:為盡可能保證精度,晶振選取12MHz
- ##############################################################################################*/
- void delay(unsigned int cnt)//調(diào)用該函數(shù)進(jìn)行一段時(shí)間的延時(shí)
- {
- while(cnt--);
- }
- void Timer0Init(void) //5毫秒@12.000MHz
- {
- EA=1;
- ET0=1;
- AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
- TMOD &= 0xF0; //設(shè)置定時(shí)器模式
- TL0 = 0xA0; //設(shè)置定時(shí)初值
- TH0 = 0x15; //設(shè)置定時(shí)初值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
- }
- void hc595send(unsigned char dat)//使用SPI向74HC595發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
- {
- unsigned char a;
- SRCLK=0;
- RCLK=0;
- for(a=0;a<8;a++)
- {
- SER=dat>>7;
- dat<<=1;
- SRCLK=1;
- _nop_();
- _nop_();
- SRCLK=0;
- }
- RCLK=1;
- _nop_();
- _nop_();
- RCLK=0;
- }
- void smgdisplay()//數(shù)碼管顯示函數(shù),參數(shù)為需要顯示的數(shù)組
- {
- unsigned char i;
- for(i=0;i<4;i++)
- {
- switch(i)//位選,選擇點(diǎn)亮的數(shù)碼管
- {
- case(0):
- S1=0;S2=1; break;
- case(1):
- S1=1;S2=0; break;
- case(2):
- S1=0;S2=0; break;
- case(3):
- S1=1;S2=1; break;
- }
- if(point)
- {
- hc595send(smgduan[Display_Time[i]]|0x08);
- }
- else
- {
- hc595send(smgduan[Display_Time[i]]);
- }
- delay(10); //間隔一段時(shí)間掃描
- hc595send(0x00);//消隱
- }
- }
- void main()
- {
- Timer0Init();
- while(1)
- {
- Display_Time[0]=(time/60)/10;
- Display_Time[1]=(time/60)%10;
- Display_Time[2]=(time%60)/10;
- Display_Time[3]=(time%60)%10;
- smgdisplay();
-
- if(KEY==0)
- {
- delay(5000);
- if(KEY==0)
- {
- TR0=!TR0;
- point=1;
- }
- while(!KEY);
- }
- }
- }
- void Timer0() interrupt 1
- {
- TL0 = 0xA0; //設(shè)置定時(shí)初值
- TH0 = 0x15; //設(shè)置定時(shí)初值
-
- if(cnt==200)//計(jì)數(shù)到1s
- {
- cnt=0;//清空
- point=1;//秒閃爍:亮
- time++;//時(shí)間加1秒
- }
- else
- {
- if(cnt==100)//當(dāng)計(jì)數(shù)半秒
- {
- point=0;//秒閃爍:滅
- }
- cnt++;
- }
-
- if(time==3600)//滿值清空
- {
- time=0;
- }
- }
復(fù)制代碼 插入的代碼似乎格式有問題,復(fù)制應(yīng)該不影響編譯,但建議下載源代碼。
備注:由于該作品的耗電量很小,故使用“充滿自!钡囊苿(dòng)電源供電時(shí),可能會(huì)出現(xiàn)一段時(shí)間后自動(dòng)停止供電的情況,解決辦法是使用無(wú)充電保護(hù)的移動(dòng)電源或者增加作品負(fù)載(加幾個(gè)燈什么的...)
凌凈清河
雖然程序很簡(jiǎn)單,不用回帖就可以下載,但是還是很期待大家的評(píng)論呢!
簡(jiǎn)易一小時(shí)計(jì)時(shí)器 凌凈清河.zip
(23.53 KB, 下載次數(shù): 42)
2018-10-8 22:48 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|