|
“搖搖棒”是基于人眼視覺暫留原理而產(chǎn)生的, 當(dāng)進(jìn)行搖動時(shí),由于人的視覺暫留會在發(fā)光二極管搖動區(qū)域產(chǎn)生一個(gè)視覺平面,從而達(dá)到在該視覺平面上傳達(dá)信息的作用。本文介紹了以STC89C52單片機(jī)控制為主控芯片、配合高亮度LED二極管以及水銀開關(guān)構(gòu)成簡易搖搖棒的設(shè)計(jì)過程,通過分時(shí)刷新20個(gè)發(fā)光二極管來顯示輸出文字或圖案等信息。并在此基礎(chǔ)上,利用DS1302時(shí)鐘芯片顯示當(dāng)前時(shí)間,可通過按鍵對時(shí)間進(jìn)行設(shè)置
第一章 基本原理
1.1視覺暫留現(xiàn)象
。╒isual staying phenomenon,duration of vision)
人眼在觀察景物時(shí),光信號傳入大腦神經(jīng),需經(jīng)過一段短暫的時(shí)間,光的作用結(jié)束后,視覺形象并不立即消失,這種殘留的視覺稱“后像”,視覺的這一現(xiàn)象則被稱為“視覺暫留”。
是光對視網(wǎng)膜所產(chǎn)生的視覺在光停止作用后,仍保留一段時(shí)間的現(xiàn)象,其具體應(yīng)用是電影的拍攝和放映。原因是由視神經(jīng)的反應(yīng)速度造成的.其時(shí)值是二十四分之一秒。是動畫、電影等視覺媒體形成和傳播的根據(jù)。
視覺實(shí)際上是靠眼睛的晶狀體成像,感光細(xì)胞感光,并且將光信號轉(zhuǎn)換為神經(jīng)電流,傳回大腦引起人體視覺。感光細(xì)胞的感光是靠一些感光色素,感光色素的形成是需要一定時(shí)間的,這就形成了視覺暫停的機(jī)理。
物體在快速運(yùn)動時(shí), 當(dāng)人眼所看到的影像消失后,人眼仍能繼續(xù)保留其影像0.1-0.4秒左右的圖像,這種現(xiàn)象被稱為視覺暫留現(xiàn)象。是人眼具有的一種性質(zhì)。人眼觀看物體時(shí),成像于視網(wǎng)膜上,并由視神經(jīng)輸入人腦,感覺到物體的像。但當(dāng)物體移去時(shí),視神經(jīng)對物體的印象不會立即消失,而要延續(xù)0.1 -0.4秒的時(shí)間,人眼的這種性質(zhì)被稱為“眼睛的視覺暫留”。
1.2 STC單片機(jī)簡介
STC單片機(jī)是一款增強(qiáng)型51單片機(jī),完全兼容MCS-51,還增加了新的功能,比如新增兩級中斷優(yōu)先級,多一個(gè)外中斷,內(nèi)置EEPROM,硬件看門狗,具有掉電模式,512B內(nèi)存等。還支持ISP下載,不用編程器,只要一個(gè)MAX232和一些廉價(jià)的元件就能寫程可擦寫10萬次。
單片機(jī)最小系統(tǒng):2
圖(1) 單片機(jī)最小系統(tǒng)電路圖
1.3 水銀開關(guān)
搖搖棒在搖動時(shí),只能在朝某一方向搖動時(shí)顯示,否則會出現(xiàn)鏡像字或鏡像畫面。所以通過接一個(gè)水銀開關(guān)來控制,使搖搖棒從左向右搖動時(shí)將內(nèi)容正確顯示出來。
圖(2) 水銀開關(guān)結(jié)構(gòu)圖
1510414z8s4inzj2znginu.png (151.91 KB, 下載次數(shù): 170)
下載附件
2017-3-7 03:24 上傳
圖(3)水銀開關(guān)實(shí)物圖1
水銀開關(guān)里的水銀柱很活躍,導(dǎo)致在接通時(shí)容易產(chǎn)生抖動。所以將水銀開關(guān)斜向上放置(尖端朝斜上方45°角),靠水銀自身重力的作用減少抖動。
因?yàn)橹亓Φ年P(guān)系,水銀水珠會隨容器中較低的地方流去,如果同時(shí)接觸到兩個(gè)電極的話,開關(guān)便會將電路閉合,開啟開關(guān)。
主要作用:
1. 觸發(fā)EXT1中斷,在中斷程序中顯示畫面。
2. 水銀開關(guān)斷開時(shí),進(jìn)入設(shè)置狀態(tài)。(
1.4 時(shí)鐘芯片
DS1302是美國DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號和RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小與31天時(shí)可以自動調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.5~5.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。
圖(4) DS1302引腳分配圖)
各引腳的功能為:
8、Vcc1:備用電池端;
1、Vcc2:5V電源。當(dāng)Vcc2>Vcc1+0.2V時(shí),由Vcc2向DS1302供電,當(dāng)Vcc2< Vcc1時(shí),由Vcc1向DS1302供電。
7、SCLK:串行時(shí)鐘,輸入;
6、I/O:數(shù)據(jù)輸入輸出口;
5、CE/RST:復(fù)位腳
2、3、X1、X2 是外接晶振腳 (32.768KHZ的晶振)
4、地(GND)
基本電路:
151041uk056o6r0vviboa6.jpg (27.56 KB, 下載次數(shù): 158)
下載附件
2017-3-7 03:24 上傳
:
圖(5) DS1302電路圖
1.5 按鍵
圖(6)按鍵外觀/
主要作用:切換畫面以及時(shí)間設(shè)置。
1.6 LED
LED是發(fā)光二極管(Light Emitting Diode,LED)的簡稱,也稱作發(fā)光二極管。這種半導(dǎo)體組件可以作為指示燈、顯示板,它不但能夠高效率地直接講點(diǎn)能轉(zhuǎn)化為光能,而且擁有最長達(dá)數(shù)萬小時(shí)的使用壽命,同時(shí)具備不如傳統(tǒng)燈泡易碎,節(jié)能省電等優(yōu)點(diǎn)。
在設(shè)計(jì)中的作用:作為此設(shè)計(jì)的顯示模塊,進(jìn)行字符的顯示。
圖(7) LED結(jié)構(gòu)圖
第二章 原理圖;
圖(8)總原理圖
第三章 實(shí)物說明圖
0.png (257.78 KB, 下載次數(shù): 145)
下載附件
2017-3-7 03:27 上傳
圖(9)總體實(shí)物圖
1. 水銀開關(guān):傳感器
2. 20位LED:顯示器
3. DS1302: 時(shí)鐘芯片
4. STC89C52單片機(jī):主控芯片
5. 電源開關(guān):供電
6. 功能按鍵(四個(gè)):○1切換畫面!2設(shè)置時(shí)間。 ○3時(shí)間加。 ○4時(shí)間減。
7. 時(shí)鐘芯片備用電池:當(dāng)電源關(guān)閉時(shí)為時(shí)鐘芯片供電,保證時(shí)間的實(shí)時(shí)性。
151043l62om2ztlcn2lv2h.png (155.15 KB, 下載次數(shù): 158)
下載附件
2017-3-7 03:24 上傳
圖(10) IC座里隱藏元件
IC座里隱藏元件,這樣做既美觀又能節(jié)省空間,還可以保護(hù)元件。
第四章 使用說明
步驟一:將電源連接好。
151044lr7ni99czn68u6l5.png (180.07 KB, 下載次數(shù): 175)
下載附件
2017-3-7 03:24 上傳
圖(11)電源開關(guān)及按鍵
步驟二:將電源開關(guān)打開。
此時(shí)20位LED開始閃爍,搖動搖搖棒將會看到如下效果:
151046vyuvqmvbbd1m3b6a.png.thumb.jpg (318.22 KB, 下載次數(shù): 139)
下載附件
2017-3-7 03:24 上傳
圖(12)初始效果圖
步驟三:進(jìn)入按鍵功能狀態(tài)。
方法如下:
將搖搖棒LED一側(cè)向下放置,即使水銀開關(guān)兩個(gè)引腳不導(dǎo)通(如圖13)。(此狀態(tài)是實(shí)現(xiàn)所有按鍵功能的通用狀態(tài)。若不在此狀態(tài),按鍵將都不可用。時(shí)間設(shè)置同樣是在此狀態(tài)下進(jìn)行的)。
圖(13)按鍵功能狀態(tài)
此時(shí)按下【換字】鍵,再搖動搖搖棒,畫面會切換,將會看到如下效果(如圖14):
151048r8h4k7lrrl38pwpr.png.thumb.jpg (303.58 KB, 下載次數(shù): 142)
下載附件
2017-3-7 03:24 上傳
圖(14)切換畫面
本搖搖棒系統(tǒng)共存儲5個(gè)畫面,通過【換字】按鍵進(jìn)行循環(huán)切換。其中第五個(gè)換面顯示的是實(shí)時(shí)時(shí)間,時(shí)間信息由時(shí)鐘芯片提供。
步驟四:設(shè)置時(shí)間
首先進(jìn)入按鍵功能狀態(tài)!緦u搖棒LED一側(cè)向下放置,即使水銀開關(guān)兩個(gè)引腳不導(dǎo)通(如圖13)】。
設(shè)置狀態(tài)下LED顯示說明:
如下圖所示,從右至左四個(gè)LED分別表示:調(diào)秒標(biāo)志位、調(diào)分標(biāo)志位、調(diào)時(shí)標(biāo)志位、設(shè)置狀態(tài)標(biāo)志位。時(shí)間信息的個(gè)位和十位分別由四個(gè)LED以二進(jìn)制碼的形式顯示。
1510527tity6m66u6623qt.png.thumb.jpg (224.18 KB, 下載次數(shù): 147)
下載附件
2017-3-7 03:24 上傳
圖(15)設(shè)置狀態(tài)下LED顯示說明圖
按下【設(shè)置】按鍵,設(shè)置狀態(tài)標(biāo)志位點(diǎn)亮,調(diào)時(shí)標(biāo)志位點(diǎn)亮,對小時(shí)設(shè)置。按【加】按鍵或【減】按鍵可以對小時(shí)進(jìn)行設(shè)置,時(shí)間信息以二進(jìn)制形式顯示。
再按下【設(shè)置】按鍵,設(shè)置狀態(tài)標(biāo)志位點(diǎn)亮,調(diào)分標(biāo)志位點(diǎn)亮,對分鐘設(shè)置。設(shè)置方法同上。
再按下【設(shè)置】按鍵,設(shè)置狀態(tài)標(biāo)志位點(diǎn)亮,調(diào)秒標(biāo)志位點(diǎn)亮,對秒設(shè)置。設(shè)置方法同上。
15105536k0cxw6x2cacy7m.png.thumb.jpg (236.64 KB, 下載次數(shù): 133)
下載附件
2017-3-7 03:24 上傳
圖(16)設(shè)置小時(shí)
151059apf58fnqizko7fxq.png.thumb.jpg (217.75 KB, 下載次數(shù): 138)
下載附件
2017-3-7 03:24 上傳
圖(17)設(shè)置分鐘
1511027m71k87t56ts17w6.png.thumb.jpg (242.73 KB, 下載次數(shù): 149)
下載附件
2017-3-7 03:24 上傳
圖(18)設(shè)置秒
步驟五:退出設(shè)置
設(shè)置完成后再按一下【設(shè)置】按鍵,退出設(shè)置狀態(tài),此時(shí)20個(gè)LED全滅。否則搖搖棒顯示將不正確。(
第五章 軟件設(shè)計(jì)3
5.1 設(shè)計(jì)思路-
由于搖搖棒在搖動時(shí),只能在朝某一方向搖動時(shí)顯示,否則會出現(xiàn)鏡像字或鏡像畫面,所以通過接一個(gè)水銀開關(guān)來控制。
在搖搖棒左向右搖動時(shí),水銀開關(guān)導(dǎo)通,觸發(fā)單片機(jī)的外部中斷,運(yùn)行中斷程顯示預(yù)設(shè)畫面。
在搖搖棒右向左搖動時(shí),水銀開關(guān)斷開,運(yùn)行主程檢測按鍵,實(shí)現(xiàn)畫面切換及時(shí)間設(shè)置。
5.2 系統(tǒng)工作流程
1.顯示預(yù)設(shè)圖形,并按鍵切換。
2.按鍵設(shè)置時(shí)間。
3.顯示時(shí)間。,
5.3主程序流程圖(
151104kuybl4gaklgudv71.png.thumb.jpg (58.22 KB, 下載次數(shù): 148)
下載附件
2017-3-7 03:24 上傳
圖(19)主程序流程圖"
第六章 部分效果圖
151106n5o7u1c2nm001rzo.png.thumb.jpg (302.11 KB, 下載次數(shù): 134)
下載附件
2017-3-7 03:24 上傳
圖(20)效果圖 電信0802班
151109r466hm4m4an0am6p.png.thumb.jpg (305.99 KB, 下載次數(shù): 155)
下載附件
2017-3-7 03:24 上傳
- /*************************************************************
- 旋轉(zhuǎn)LED字體程序
- 單片機(jī) STC89C52
- 字模軟件用的PC2002
- 逐列取模方式
- ***************************************************************/
- #include "SYSTEM.H"
- #include <reg52.h>
- #include <DIG.h>
- #define uchar unsigned char
- #define uint unsigned int //宏定義
- uint i=0 ;
- uint j=0 ;
- sbit key=P3^7;
- sbit she=P2^7;
- sbit shi=P2^6;
- sbit fen=P2^5;
- sbit mia=P2^4;
- uchar h1;
- uchar h2;
- uchar m1;
- uchar m2;
- uchar s1;
- uchar s2;
- uchar K1J,K2J,K3J; //鍵值
- //char Set_Mode = 0;
- extern uchar k;
- extern uchar Set; //調(diào)整值
- unsigned char code Disp_Tab[] = {0xff,0x7f,0xbf,0x3f,0xdf,0x5f,0x9f,0x1f,0xef,0x6f}; //段碼控制
- /*****n(us)延時(shí)子程序*****/
- void DelayUs(uint N)
- {
- uint x ;
- for(x=0;x<=N;x++);
- }
- /*--------------------------------------------------------------*/
- //鍵盤掃描
- void Keysan(void)
- {
- if(!key) //換字
- { DelayUs(7000);
- if(!key)
- {
- j++;
- }
- if(j==5) { j=0; }
- }
-
- if(~P2_3&K1J) { k++; }
- K1J=~(~P2_3);
- if(~P2_2&K2J) { Set=1; }
- K2J=~(~P2_2);
- if(~P2_1&K3J) { Set=-1; }
- K3J=~(~P2_1);
-
- if(k == 4) {k = 0; }
-
- switch(k)
- { //case 4: break;
- case 3: she=0;shi=1;fen=1;mia=0; DS1302_AddTime(DS1302_SECOND, Set);P1=Disp_Tab[s1];P0=Disp_Tab[s2];Set=0; break; //設(shè)置秒
- case 2: she=0;shi=1;fen=0;mia=1; DS1302_AddTime(DS1302_MINUTE, Set);P1=Disp_Tab[m1];P0=Disp_Tab[m2];Set=0; break; //設(shè)置分
- case 1: she=0;shi=0;fen=1;mia=1; DS1302_AddTime(DS1302_HOUR , Set);P1=Disp_Tab[h1];P0=Disp_Tab[h2];Set=0; break; //設(shè)置時(shí)
- case 0: P0=0xff;P1=0xff;P2=0xff;Set=0; break;
- default: break;
- }
- }
- /*****主函數(shù)*****/
- void main(void)
- { k=0;
- DS1302_Initial();//DS1302初始化
- while(1)
- {
- EA=1;//開總中斷
- EX0=1;//開外部中斷0
- //全滅
- P0=0xff;
- P1=0xff;
- P2=0xff;
- //讀出時(shí)間
- h1=(Read1302(DS1302_HOUR)&0x70)>>4;
- h2=(Read1302(DS1302_HOUR)&0x0f);
- m1=(Read1302(DS1302_MINUTE)&0x70)>>4;
- m2=(Read1302(DS1302_MINUTE)&0x0f);
- s1=(Read1302(DS1302_SECOND)&0x70)>>4;
- s2=(Read1302(DS1302_SECOND)&0x0f);
- Keysan();
- }
- }
- /*************外部中斷函數(shù)(顯示)*******************/
- void exter0() interrupt 0
- {
- for(i=0;i<160;i++)
- {
- switch(j)
- {case 0: P0=love0[i*3];P1=love0[i*3+1];P2=love0[i*3+2];DelayUs(30);break;
- case 1: P0=love1[i*3];P1=love1[i*3+1];P2=love1[i*3+2];DelayUs(30);break;
- case 2: P0=love2[i*3];P1=love2[i*3+1];P2=love2[i*3+2];DelayUs(20);break;
- case 3: P0=love3[i*3];P1=love3[i*3+1];P2=love3[i*3+2];DelayUs(30);break;
- case 4: if(i<50){P0=0xFF;P1=0xFF;P2=0xFF;DelayUs(20);}
- if((i>49)&&(i<60)){P0=dig[h1][(i-50)*3];P1=dig[h1][(i-50)*3+1];P2=dig[h1][(i-50)*3+2];DelayUs(20);}
- if((i>59)&&(i<70)){P0=dig[h2][(i-60)*3];P1=dig[h2][(i-60)*3+1];P2=dig[h2][(i-60)*3+2];DelayUs(20);}
- if((i>69)&&(i<80)){P0=dig[10][(i-70)*3];P1=dig[10][(i-70)*3+1];P2=dig[10][(i-70)*3+2];DelayUs(20);}
- if((i>79)&&(i<90)){P0=dig[m1][(i-80)*3];P1=dig[m1][(i-80)*3+1];P2=dig[m1][(i-80)*3+2];DelayUs(20);}
- if((i>89)&&(i<100)){P0=dig[m2][(i-90)*3];P1=dig[m2][(i-90)*3+1];P2=dig[m2][(i-90)*3+2];DelayUs(20);}
- if((i>99)&&(i<110)){P0=dig[10][(i-100)*3];P1=dig[10][(i-100)*3+1];P2=dig[10][(i-100)*3+2];DelayUs(20);}
- if((i>109)&&(i<120)){P0=dig[s1][(i-110)*3];P1=dig[s1][(i-110)*3+1];P2=dig[s1][(i-110)*3+2];DelayUs(20);}
- if((i>119)&&(i<130)){P0=dig[s2][(i-120)*3];P1=dig[s2][(i-120)*3+1];P2=dig[s2][(i-120)*3+2];DelayUs(20);}
- if(i>129){P0=0xFF;P1=0xFF;P2=0xFF;DelayUs(20);}
- break;
- }
- }
- }
復(fù)制代碼
0.png (69.66 KB, 下載次數(shù): 165)
下載附件
2017-3-7 03:25 上傳
代碼下載(Keil2工程文件):
搖搖棒2.3軟件版本3.1 時(shí)鐘顯示.7z
(16.53 KB, 下載次數(shù): 305)
2021-7-24 01:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|