摘要:“搖動(dòng)顯示裝置”,俗稱“搖搖棒”,是基于人的視覺(jué)暫留原理的,通過(guò)分時(shí)刷新32個(gè)發(fā)光二極管來(lái)顯示輸出文字或圖案等信息的顯示裝置。輸出信號(hào)頻率的控制通過(guò)單片機(jī)來(lái)實(shí)現(xiàn),用搖動(dòng)傳感器檢測(cè)當(dāng)前搖動(dòng)狀態(tài)。當(dāng)進(jìn)行搖動(dòng)時(shí),由于人的視覺(jué)暫留原理,會(huì)在發(fā)光二極管搖動(dòng)區(qū)域產(chǎn)生一個(gè)視覺(jué)平面,在視覺(jué)平面內(nèi)的二極管通過(guò)不同頻率的刷新,會(huì)在搖動(dòng)區(qū)域內(nèi)產(chǎn)生圖像,從而達(dá)到在該視覺(jué)平面上傳達(dá)信息的作用。 關(guān)鍵字:單片機(jī);搖搖棒;發(fā)光二極管 ;搖動(dòng)

前言:隨著人們物質(zhì)生活水平的提高,人們對(duì)精神生活的追求也愈加強(qiáng)烈,對(duì)信息的渴求已成為了人們必不可少的需要,更加簡(jiǎn)捷與新穎的信息傳遞方式無(wú)疑會(huì)給人們帶來(lái)耳目一新的感受。而現(xiàn)代工具務(wù)求簡(jiǎn)捷化、便攜化,因此,搖動(dòng)顯示裝置的到來(lái),必將會(huì)給人們帶來(lái)一種新的方便的文化傳遞方式。
一、系統(tǒng)硬件 系統(tǒng)功能主要體現(xiàn)在3個(gè)部分: (1)單片機(jī)控制(STC12C2052) 本裝置采用了STC12C2052單片機(jī),它支持直接通過(guò)串口線下載程序,對(duì)于本設(shè)計(jì)而言,顯示文字需經(jīng)常改變,STC12C2052方便許多,因此選擇STC12C2052作為本設(shè)計(jì)所用的單片機(jī)。 (2)顯示功能。(D1~D32) 信息傳遞主要由顯示來(lái)完成,本設(shè)計(jì)顯示功能由32個(gè)發(fā)光二極管來(lái)完成。32個(gè)發(fā)光二極管分為4組,以共陽(yáng)的方式連接,共用P1口作為數(shù)據(jù)輸出口。另外4條I/O口作為段選,通過(guò)三極管選通相應(yīng)段。 (3)傳感器系統(tǒng)。(S2) 硬件傳感器主要為搖動(dòng)傳感器,本設(shè)計(jì)的搖動(dòng)傳感器由滾珠開(kāi)關(guān)構(gòu)成。 可選搖動(dòng)開(kāi)關(guān)有水銀搖動(dòng)開(kāi)關(guān)和滾珠開(kāi)關(guān)兩種。水銀搖動(dòng)開(kāi)關(guān)穩(wěn)定性較高,但容易發(fā)生破裂,水銀外泄,安全性較差。滾珠開(kāi)關(guān)穩(wěn)定性稍差,但不容易損壞,安全度很高?紤]到實(shí)際應(yīng)用環(huán)境,故選用滾珠開(kāi)關(guān)作為系統(tǒng)的搖動(dòng)傳感器。由滾珠開(kāi)關(guān)帶來(lái)的不穩(wěn)定性可以通過(guò)軟件進(jìn)行彌補(bǔ)。

圖1:滾珠開(kāi)關(guān)內(nèi)部結(jié)構(gòu)圖
另外D_B1和D_B2為裝飾用的藍(lán)色發(fā)光二極管,J1為串口,供下載程序用。J2和J3為電池盒插座。

圖2:系統(tǒng)硬件原理圖
二、系統(tǒng)軟件 系統(tǒng)開(kāi)始運(yùn)行,內(nèi)部進(jìn)行初始化后,等待外部中斷。當(dāng)搖動(dòng)到指定位置時(shí),由滾珠開(kāi)關(guān)出觸發(fā)外部中斷,再經(jīng)過(guò)一段時(shí)間延時(shí)后開(kāi)始顯示。顯示完成返回主程序,等待下一個(gè)搖動(dòng)周期的到來(lái)。 程序清單如下: #include <reg52.h> #define uchar unsigned char #define uint unsigned int
#define out P1 //數(shù)據(jù)輸出端口 sbit led1=P3^2; //第1組LED sbit led2=P3^4; //第2組LED sbit led3=P3^5; //第3組LED sbit led4=P3^7; //第4組LED
uchar code disp_tab[]= {0xFF,0xFF, 0x0F,0xFF, 0xFF,0x9F, 0xFF,0xFF, 0xFF,0xCF, 0x00,0x80, 0xFF,0xE7, 0x00,0x80, 0xFF,0xF3, 0xEF,0xFF, 0xFF,0xF8, 0xDF,0xFF, 0x00,0xFC, 0x8F,0x9F, 0x00,0xFE, 0x81,0x9C, 0x7F,0xFC, 0xE1,0x9C, 0xFF,0xF9, 0xE7,0x9C, 0xFF,0xF3, 0x00,0x80, 0xFF,0xE7, 0x00,0x80, 0xFF,0xCF, 0xE7,0x9C, 0xFF,0x9F, 0xE7,0x9C, 0xFF,0xDF, 0xE7,0x9F, 0xFF,0xFF,0xFF,0xFF,
0xFF,0xDF, 0xFF,0xF7, 0xCF,0xCF, 0xE7,0xE7, 0xCF,0xE7, 0xE7,0xF3, 0xCF,0xF7, 0xE7,0xF9, 0xCF,0xE3, 0x67,0xF0, 0xCF,0xC9, 0x27,0xF2, 0xCE,0xDC, 0x07,0xF3, 0x48,0x9E, 0x00,0x80, 0x09,0x9F, 0x00,0x80, 0x8F,0x9F, 0x27,0xF3, 0x8F,0x9F, 0x67,0xF2, 0xCF,0x9F, 0xE7,0xF0, 0xCF,0x9F, 0xE7,0xF9, 0xCF,0x9F, 0xE7,0xF3, 0xFF,0x9F, 0xE7,0xF7, 0xFF,0xFF,0xFF,0xFF,
0xFF,0xFD, 0xFF,0xFF, 0xE7,0xFC, 0xFF,0xFD, 0x64,0xFE, 0xBB,0x85, 0x20,0x80, 0x2A,0x85, 0x01,0x80, 0x28,0xD4, 0x47,0xFC, 0xA9,0xD4, 0x3F,0x99, 0xAB,0xD5, 0xB3,0xCF, 0x03,0xD4, 0xF3,0xE3, 0x03,0xD4, 0x03,0xF0, 0xA9,0xD5, 0x03,0x9C, 0xA8,0xD4, 0xF3,0x9F, 0x2A,0x84, 0xF3,0x8F, 0x2B,0x85, 0x03,0xC0, 0xBB,0xFD, 0x03,0xE0, 0xFF,0xFD, 0xFF,0xFF,0xFF,0xFF};
void delay(n); //延時(shí)子程序 void display(); //顯示子程序
void main() { EX1=1; //開(kāi)放外部中斷1 IT1=0; //中斷1為邊沿觸發(fā)方式 EA=1; while(1); }
void display() {uchar i,n; n=0; //初始化數(shù)據(jù)表計(jì)數(shù) for(i=0;i<48;i++) //共顯示16*3=48列 { out=0xff; //清顯示 led4=1; //關(guān)閉第4組LED led1=0; //開(kāi)啟第1組LED out=disp_tab[n++]; //輸出數(shù)據(jù)到LED delay(20); //延時(shí)
out=0xff; //清顯示 led1=1; //關(guān)閉第1組LED led2=0; //開(kāi)啟第2組LED out=disp_tab[n++]; //輸出數(shù)據(jù)到LED delay(20); //延時(shí)
out=0xff; //清顯示 led2=1; //關(guān)閉第2組LED led3=0; //開(kāi)啟第3組LED out=disp_tab[n++]; //輸出數(shù)據(jù)到LED delay(20); //延時(shí)
out=0xff; //清顯示 led3=1; //關(guān)閉第3組LED led4=0; //開(kāi)啟第4組LED out=disp_tab[n++]; //輸出數(shù)據(jù)到LED delay(20); //延時(shí) } }
void delay(n) { uchar i; for(;n>0;n--) { for(i=0;i<7;i++); } }
void int1() interrupt 2 //使用外部中斷1 { uint i=5000; //延時(shí)一段時(shí)間開(kāi)始顯示 out=0xff; while(i--); display(); //顯示 }
三、“pctolcd2002”軟件使用方法 程序中“字符點(diǎn)陣數(shù)據(jù)表”中的數(shù)據(jù)是由“pctolcd2002”軟件生成的,下面介紹使用pctolcd2002生成3個(gè)×2行的漢字點(diǎn)陣數(shù)據(jù)的方法: 1、啟動(dòng)pctolcd2002軟件,“模式”設(shè)為“字符模式”。字寬和字高設(shè)為16*16!斑x項(xiàng)”中的“自定義格式”選擇“C51”格式。其它默認(rèn)即可。
2、輸入第一行的三個(gè)(或四個(gè))漢字,生成字模。 例如: {0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11} {0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22} {0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33} 3、將字模保存好,輸入第二行的三個(gè)(或四個(gè))漢字,生成字模。 例如: {0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44} {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55} {0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66} 4、由于搖搖棒是逐列掃描,需要將同一列上下兩行16位的數(shù)據(jù)組成一列32位數(shù)據(jù)。
按上面的數(shù)據(jù),組合后為: {0x11,0x11,0x44,0x44, 0x11,0x11,0x44,0x44, 0x11,0x11,0x44,0x44, 0x11,0x11,0x44,0x44, 0x22,0x22,0x55,0x55, 0x22,0x22,0x55,0x55, 0x22,0x22,0x55,0x55, 0x22,0x22,0x55,0x55, 0x33,0x33,0x66,0x66, 0x33,0x33,0x66,0x66, 0x33,0x33,0x66,0x66, 0x33,0x33,0x66,0x66}; 5、將數(shù)據(jù)替換,如每行顯示4個(gè)漢字則修改程序 for(i=0;i<48;i++)為 for(i=0;i<64;i++)
四、結(jié)論 本文以傳感器和單片機(jī)的實(shí)際應(yīng)用為背景,介紹了以單片機(jī)和傳感器為核心系統(tǒng)搖動(dòng)傳感器和顯示設(shè)計(jì)的基本結(jié)構(gòu)和基本原理。 本文將使用單片機(jī)對(duì)搖動(dòng)顯示進(jìn)行實(shí)例化,設(shè)計(jì)一個(gè)LED搖動(dòng)顯示器來(lái)顯示文字、圖像等信息。掌握利用8051型單片機(jī)對(duì)發(fā)光二極管陣列進(jìn)行搖動(dòng)控制的方法。輸出信號(hào)頻率的控制通過(guò)單片機(jī)來(lái)實(shí)現(xiàn),用搖動(dòng)傳感器檢測(cè)當(dāng)前搖動(dòng)狀態(tài),用32個(gè)發(fā)光二極管進(jìn)行不同頻率的亮滅刷新,通過(guò)手動(dòng)搖動(dòng)可顯示輸出文字及圖案等信息。當(dāng)進(jìn)行搖動(dòng)時(shí),由于人的視覺(jué)暫留原理,會(huì)在發(fā)光二極管搖動(dòng)區(qū)域產(chǎn)生一個(gè)視覺(jué)平面,在視覺(jué)平面內(nèi)的二極管通過(guò)不同頻率的刷新,會(huì)在搖動(dòng)區(qū)域內(nèi)產(chǎn)生圖像,從而達(dá)到在該視覺(jué)平面上傳達(dá)信息的作用。 設(shè)計(jì)具有市場(chǎng)前景,可滿足各種大型演出、集會(huì)、游行等宣傳需要,為人們的生活提供便利。
|