|
# 創(chuàng)新設(shè)計(jì)16個(gè)LED燈的搖搖棒,可顯示英文、圖形及漢字
# 僅需5種元器件(單片機(jī)、LED、導(dǎo)線、電池和塑料殼),讓DIY簡單、快速
# 往返雙程掃描,慢速搖動(dòng)也可清晰顯示
# 敲擊字幕切換功能,無需按鍵操作
# 在軟件上有很大的升級(jí)空間(包括雙色顯示、LED測光等)
-----------------------------------------------------------------------
[注意事項(xiàng)]
-----------------------------------------------------------------------
# HEX文件燒寫時(shí)需選擇“內(nèi)部RC時(shí)鐘”
# 本制作采用STC12C5A60S2單片機(jī),不可以用其他型號(hào)單片機(jī)替代
# 慣性開關(guān)在制作時(shí)注意靜止時(shí)開關(guān)柄到左右觸點(diǎn)間的距離應(yīng)盡量相等
# 本制作無開關(guān),不用時(shí)需取下電池或在電池間塞入絕緣紙片
單片機(jī)采用STC12C5A60S2(1pcs)
- 0805型貼片式LED燈(16pcs)
- CR2032鈕扣電池(2pcs)
- 具有一定彈性的導(dǎo)線和廢棄的元器件引腳
- 用來包裝DIP40腳單片機(jī)的塑料殼(1pcs)
- 確保單片機(jī)可以放入并有較大余地
- 用鉗子將P0、P2接口所在一側(cè)的引腳全部向外彎折
- 目的是保證將單片機(jī)放入塑料殼時(shí)不會(huì)左右亂竄
- 彎折時(shí)盡量不斷放入塑料殼中比對(duì)
- 擦拭彎折后的引腳表面 確保無污物可以順利上錫
- 用攝子取出貼片LED燈并焊接在單片機(jī)引腳上
- 從P2.0引腳開始焊接 左邊焊LED負(fù)極(P2.0負(fù)極、P2.1正極)
- 依次焊接16個(gè)LED燈到P0.2引腳為止
- 將一支廢棄元器件引腳對(duì)折并焊接在彈性導(dǎo)線上
- 彈性導(dǎo)線的另一端焊接在單片機(jī)的第20腳上(GND) 注意掌握導(dǎo)線長度
- 將P1.3引腳彎折至芯片底部 再用廢棄元器件引腳向上延長P1.2引腳
- 使之形成慣性開關(guān)的兩個(gè)觸點(diǎn) 再把P1.4引腳略向內(nèi)彎曲形成側(cè)撞觸點(diǎn)
- 把一支廢棄的元器件引腳焊接在單片機(jī)的第40腳上(VCC)
- 再取一段導(dǎo)線將一端焊接在單片機(jī)的第20腳上(GND)
- 導(dǎo)線另一端的接頭處掛大量的錫
- 用膠帶固定導(dǎo)線 使之在搖動(dòng)時(shí)不易亂竄
- 此時(shí)在單片機(jī)一側(cè)形成了電源的正、負(fù)極接口
將鈕扣電池重疊后放入正、負(fù)極接口處
- 最后將單片機(jī)連同電池一并塞進(jìn)塑料殼中
- 用透明膠帶把開口處包好 - 因搖動(dòng)時(shí)的離心力向上所以單片機(jī)及電池不會(huì)向下滑落 無需設(shè)計(jì)下方固定
- /*********************************************************************************************
- 程序名: SHOOK16搖搖棒控制程序
- 編寫人: 杜洋
- 硬件支持: STC12C5A60S2 內(nèi)部RC時(shí)鐘
- 接口說明: 單片機(jī)P0、P2側(cè)并行排列16個(gè)貼片LED(自P2.0開始(-))
- 修改日志:
- [TEST測試版]
- 1-200911122244 在主函數(shù)寫入簡單程序測試慣性開關(guān)是否正常,通過測試并備份。(備)
- 2-200911130112 往返搖動(dòng)雙重顯示實(shí)驗(yàn)成功,目前已經(jīng)達(dá)到搖搖棒功能的基本要求。(備)
- [V1正式版]
- 3-200911130309 加入了3個(gè)字幕內(nèi)容,通過敲擊切換字幕。(備)
- 4-200911131910 為網(wǎng)站照片重新設(shè)計(jì)方案并重定義了IO接口。(備)
- /*********************************************************************************************
- 說明:
- 了解字幕的修改方法,請(qǐng)參考《mini1608字模設(shè)計(jì)方法》
- V1正式版
- # 硬件制作只需要單片機(jī)、LED、電池和導(dǎo)線,制作非常簡單。
- # 采用STC增強(qiáng)型單片機(jī)。
- /*********************************************************************************************/
- #include <STC12C5A60S2.H> //單片機(jī)頭文件
- unsigned char MENU;
- #define DY_DELAY 5 //設(shè)置每一個(gè)點(diǎn)顯示的時(shí)間長度(1~20)
- sbit KEY1 = P1 ^ 2; //搖動(dòng)慣性開關(guān)
- sbit KEY2 = P1 ^ 3;
- sbit KEY3 = P1 ^ 4; //選擇鍵(大力橫向碰擊觸發(fā))
- sbit LED1 = P0 ^ 3; //LED燈定義,低電平時(shí)亮(自上到下)
- sbit LED2 = P0 ^ 4;
- sbit LED3 = P0 ^ 5;
- sbit LED4 = P0 ^ 6;
- sbit LED5 = P0 ^ 7;
- sbit LED6 = P4 ^ 6;
- sbit LED7 = P4 ^ 5;
- sbit LED8 = P4 ^ 4;
- sbit LED9 = P2 ^ 7;
- sbit LED10 = P2 ^ 6;
- sbit LED11 = P2 ^ 5;
- sbit LED12 = P2 ^ 4;
- sbit LED13 = P2 ^ 3;
- sbit LED14 = P2 ^ 2;
- sbit LED15 = P2 ^ 1;
- sbit LED16 = P2 ^ 0;
- /*********************************************************************************************/
- unsigned char code logo[] = { // (取碼:從上到下從左到右,縱向8位下高位)
- 0x00,0x00,0x10,0x0E,0xD0,0x01,0xFF,0xFF,//杜
- 0xFF,0xFF,0x90,0x01,0x10,0x43,0x40,0x40,
- 0x40,0x40,0x40,0x40,0xFF,0x7F,0xFE,0x7F,
- 0x40,0x40,0x60,0x40,0x40,0x60,0x00,0x40,
- 0x00,0x00,0x10,0x04,0xE1,0x78,0x4E,0xFE,//洋
- 0x8C,0x63,0x60,0x00,0x00,0x04,0x49,0x04,
- 0x4A,0x04,0x4E,0x04,0xF8,0xFF,0xFC,0xFF,
- 0x4E,0x04,0x6B,0x04,0x4A,0x06,0x00,0x04,
- 0x00,0x00,0x00,0x40,0x04,0x40,0x04,0x40,//工
- 0x04,0x40,0x04,0x40,0x04,0x40,0xFC,0x7F,
- 0xFC,0x7F,0x04,0x40,0x04,0x40,0x04,0x40,
- 0x06,0x40,0x04,0x60,0x00,0x40,0x00,0x00,
- 0x00,0x00,0x80,0x00,0x60,0x00,0xF8,0xFF,//作
- 0xEF,0x7F,0x06,0x00,0x40,0x00,0x30,0x00,
- 0x1C,0x00,0xFF,0xFF,0xFA,0xFF,0x48,0x04,
- 0x48,0x04,0x68,0x04,0x4C,0x06,0x08,0x04,
- 0x00,0x00,0x08,0x00,0x1C,0x80,0x0E,0x81,//室
- 0x94,0x8B,0xD4,0x89,0x75,0x89,0x37,0xFF,
- 0x16,0xFF,0x34,0x89,0xD4,0x89,0x94,0x8B,
- 0x1C,0x81,0x0E,0xC0,0x04,0x80,0x00,0x00
- };
- /*********************************************************************************************/
- unsigned char code logo1[] = { // “DoYoung” (取碼:從上到下從左到右,縱向8位下高位)
- 0x04,0x08,0xFC,0x0F,0xFC,0x0F,0x04,0x08, // -D-
- 0x0C,0x0C,0xF8,0x07,0xF0,0x03,0x00,0x00,
- 0xC0,0x07,0xE0,0x0F,0x20,0x08,0x20,0x08, // -o-
- 0x20,0x08,0xE0,0x0F,0xC0,0x07,0x00,0x00,
- 0x00,0x00,0x3C,0x00,0x7C,0x08,0xC0,0x0F, // -Y-
- 0xC0,0x0F,0x7C,0x08,0x3C,0x00,0x00,0x00,
- 0xC0,0x07,0xE0,0x0F,0x20,0x08,0x20,0x08, // -o-
- 0x20,0x08,0xE0,0x0F,0xC0,0x07,0x00,0x00,
- 0xE0,0x07,0xE0,0x0F,0x00,0x08,0x00,0x08, // -u-
- 0xE0,0x07,0xE0,0x0F,0x00,0x08,0x00,0x00,
- 0x20,0x00,0xE0,0x0F,0xC0,0x0F,0x20,0x00, // -n-
- 0x20,0x00,0xE0,0x0F,0xC0,0x0F,0x00,0x00,
- 0xC0,0x27,0xE0,0x6F,0x20,0x48,0x20,0x48, // -g-
- 0xC0,0x7F,0xE0,0x3F,0x20,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空格
- 0x18,0x06,0x3C,0x0E,0x64,0x08,0x44,0x08, // -S-
- 0xC4,0x08,0x9C,0x0F,0x18,0x07,0x00,0x00,
- 0x20,0x00,0x20,0x00,0xF8,0x07,0xFC,0x0F, // -t-
- 0x20,0x08,0x20,0x0C,0x00,0x04,0x00,0x00,
- 0xE0,0x07,0xE0,0x0F,0x00,0x08,0x00,0x08, // -u-
- 0xE0,0x07,0xE0,0x0F,0x00,0x08,0x00,0x00,
- 0x80,0x07,0xC0,0x0F,0x60,0x08,0x24,0x08, // -d-
- 0xFC,0x07,0xFC,0x0F,0x00,0x08,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x20,0x08,0xEC,0x0F, // -i-
- 0xEC,0x0F,0x00,0x08,0x00,0x00,0x00,0x00,
- 0xC0,0x07,0xE0,0x0F,0x20,0x08,0x20,0x08, // -o-
- 0x20,0x08,0xE0,0x0F,0xC0,0x07,0x00,0x00,
- };
- /*********************************************************************************************/
- unsigned char code logo2[] = { // “與電子愛好者同行” (取碼:從上到下從左到右,縱向8位下高位)
- 0x00,0x00,0x00,0x08,0x00,0x08,0x80,0x08,
- 0xFF,0x09,0xFE,0x08,0x88,0x08,0x88,0x08,
- 0x88,0x08,0x88,0x08,0x88,0x0C,0x88,0x48,
- 0x88,0xC0,0x8C,0x7F,0xC8,0x3F,0x80,0x00,
- 0x00,0x00,0x00,0x00,0xF8,0x0F,0xF0,0x07,
- 0x90,0x04,0x90,0x04,0x90,0x04,0xFF,0x7F,
- 0xFE,0xFF,0x90,0xC4,0x90,0xC4,0x90,0xC4,
- 0xF0,0xCF,0xF8,0xC7,0x10,0xF0,0x00,0x40,
- 0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
- 0x82,0x00,0x82,0x00,0x82,0x40,0x82,0x40,
- 0xE2,0xFF,0xF2,0x7F,0x9A,0x00,0x8E,0x00,
- 0x87,0x00,0x82,0x00,0xC0,0x00,0x80,0x00,
- 0x00,0x00,0x40,0x00,0xE0,0x40,0x74,0x20,
- 0xA4,0x98,0xAC,0x8E,0xFA,0x47,0xE2,0x6F,
- 0xBE,0x3A,0xAA,0x12,0xB2,0x3A,0xBF,0x6E,
- 0xAB,0x67,0xE2,0xC2,0x70,0xC0,0x20,0x40,
- 0x00,0x00,0x20,0x80,0x20,0x63,0xF8,0x37,
- 0xFF,0x1C,0x26,0x0F,0xF0,0x7B,0xE0,0x30,
- 0x82,0x00,0x82,0x20,0x82,0x40,0xF2,0xFF,
- 0xEA,0x7F,0x8E,0x00,0xC7,0x00,0x82,0x00,
- 0x00,0x00,0x40,0x04,0x40,0x04,0x44,0x02,
- 0x44,0xFF,0x44,0x7F,0xC4,0x49,0xFF,0x49,
- 0x7F,0x49,0x64,0x49,0x66,0x49,0x54,0xFF,
- 0xD8,0x7F,0x4E,0x01,0x64,0x00,0x40,0x00,
- 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0x7F,
- 0x12,0x00,0xD2,0x1F,0x92,0x0F,0x92,0x08,
- 0x92,0x08,0x92,0x1F,0xDA,0x4F,0x92,0x40,
- 0xFE,0xFF,0xFF,0x7F,0x02,0x00,0x00,0x00,
- 0x00,0x00,0x20,0x04,0x10,0x02,0x8C,0xFF,
- 0xE7,0x7F,0x42,0x00,0x00,0x00,0x20,0x00,
- 0x22,0x00,0x22,0x40,0x22,0x40,0xE2,0xFF,
- 0xE2,0x7F,0x23,0x00,0x32,0x00,0x20,0x00
- };
- /*********************************************************************************************
- 函數(shù)名:LED顯示用延時(shí)函數(shù)
- 調(diào) 用:delay(?);
- 參 數(shù):1~65535(參數(shù)不可為0)
- 返回值:無
- 結(jié) 果:占用CPU方式延時(shí)與參數(shù)數(shù)值相同的毫秒時(shí)間
- 備 注:應(yīng)用于1T單片機(jī)時(shí)i<600,應(yīng)用于12T單片機(jī)時(shí)i<125
- /*********************************************************************************************/
- void delay (unsigned int a){ // 用于點(diǎn)掃描的延時(shí)
- unsigned int i;
- while( --a != 0){
- for(i = 0; i < 1; i++);
- }
- }
- /*********************************************************************************************/
- /*********************************************************************************************
- 函數(shù)名:毫秒級(jí)CPU延時(shí)函數(shù)
- 調(diào) 用:DELAY_MS (?);
- 參 數(shù):1~65535(參數(shù)不可為0)
- 返回值:無
- 結(jié) 果:占用CPU方式延時(shí)與參數(shù)數(shù)值相同的毫秒時(shí)間
- 備 注:應(yīng)用于1T單片機(jī)時(shí)i<600,應(yīng)用于12T單片機(jī)時(shí)i<125
- /*********************************************************************************************/
- void DELAY_MS (unsigned int a){
- unsigned int i;
- while( --a != 0){
- for(i = 0; i < 600; i++);
- }
- }
- /*********************************************************************************************/
- /*********************************************************************************************
- 函數(shù)名:關(guān)閉所有LED燈(操作硬件)
- 調(diào) 用:DISPLAY_OFF();
- 參 數(shù):無
- 返回值:無
- 結(jié) 果:所有LED燈熄滅
- 備 注:
- /**********************************************************************************************/
- void DISPLAY_OFF (void){
- delay(DY_DELAY);//顯示停留
- P0 = 0xff;
- P2 = 0xff;
- P4 = 0xff;
- }
- /**********************************************************************************************/
- /*********************************************************************************************
- 函數(shù)名:單幀數(shù)據(jù)送入顯示(操作硬件)
- 調(diào) 用:DISPLAY_PIN(?,?);
- 參 數(shù):16位顯示數(shù)據(jù)(下高位)(d:上面8位,e:下面8位)
- 返回值:無
- 結(jié) 果:點(diǎn)亮對(duì)應(yīng)數(shù)據(jù)的LED燈
- 備 注:
- /**********************************************************************************************/
- void DISPLAY_PIN (unsigned char d,unsigned char e){ //第1列橫向顯示程序
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){LED1 = 0;}DISPLAY_OFF();
- i = d & 0x02;
- if(i == 0x02){LED2 = 0;}DISPLAY_OFF();
- i = d & 0x04;
- if(i == 0x04){LED3 = 0;}DISPLAY_OFF();
- i = d & 0x08;
- if(i == 0x08){LED4 = 0;}DISPLAY_OFF();
- i = d & 0x10;
- if(i == 0x10){LED5 = 0;}DISPLAY_OFF();
- i = d & 0x20;
- if(i == 0x20){LED6 = 0;}DISPLAY_OFF();
- i = d & 0x40;
- if(i == 0x40){LED7 = 0;}DISPLAY_OFF();
- i = d & 0x80;
- if(i == 0x80){LED8 = 0;}DISPLAY_OFF();
- i = e & 0x01;
- if(i == 0x01){LED9 = 0;}DISPLAY_OFF();
- i = e & 0x02;
- if(i == 0x02){LED10 = 0;}DISPLAY_OFF();
- i = e & 0x04;
- if(i == 0x04){LED11 = 0;}DISPLAY_OFF();
- i = e & 0x08;
- if(i == 0x08){LED12 = 0;}DISPLAY_OFF();
- i = e & 0x10;
- if(i == 0x10){LED13 = 0;}DISPLAY_OFF();
- i = e & 0x20;
- if(i == 0x20){LED14 = 0;}DISPLAY_OFF();
- i = e & 0x40;
- if(i == 0x40){LED15 = 0;}DISPLAY_OFF();
- i = e & 0x80;
- if(i == 0x80){LED16 = 0;}DISPLAY_OFF();
- }
- /*********************************************************************************************
- 函數(shù)名:初始化程序
- 調(diào) 用:init();
- 參 數(shù):無
- 返回值:無
- 結(jié) 果:設(shè)計(jì)IO接口為強(qiáng)推方式并全部置1
- 備 注:
- /**********************************************************************************************/
- void init (void){
- P4SW = 0xff; //啟動(dòng)P4接口
- P0M0 = 0xff; //接口設(shè)置為強(qiáng)推
- P2M0 = 0xff;
- P4M0 = 0xff;
- P1 = 0xff; //初始IO接口狀態(tài)
- P0 = 0xff;
- P2 = 0xff;
- P4 = 0xff;
- }
- /**********************************************************************************************/
- /*********************************************************************************************
- 函數(shù)名:主函數(shù)
- 調(diào) 用:無
- 參 數(shù):無
- 返回值:無
- 結(jié) 果:程序開始處,無限循環(huán)
- 備 注:
- /**********************************************************************************************/
- void main (void){
- unsigned char a,c;
- init();//初始程序
- while(1){
- if(MENU > 2){
- MENU = 0;
- }
- if(MENU == 0){ //字幕1
- if(KEY2 == 0){
- DELAY_MS(20);
- while(KEY2 == 0);
- c = 0;
- for(a=1;a<80;a++){ //這里的“80”是這個(gè)字幕需要掃描的列數(shù),修改字幕時(shí)必須修改此參數(shù)。
- DISPLAY_PIN (logo[c],logo[c+1]); //“LOGO”是第一個(gè)字幕的數(shù)據(jù)表名
- c=c+2;//產(chǎn)生顯示行移位
- }
- }
- if(KEY1 == 0){
- DELAY_MS(20);
- while(KEY1 == 0);
- c = 158;
- for(a=1;a<80;a++){
- DISPLAY_PIN (logo[c],logo[c+1]);
- c=c-2;//產(chǎn)生顯示行移位
- }
- }
- if(KEY3 == 0){
- DELAY_MS(20);
- while(KEY3 == 0);
- MENU++;
- }
- }
- if(MENU == 1){ //字幕2
- if(KEY2 == 0){
- DELAY_MS(20);
- while(KEY2 == 0);
- c = 0;
- for(a=1;a<108;a++){
- DISPLAY_PIN (logo1[c],logo1[c+1]);
- c=c+2;//產(chǎn)生顯示行移位
- }
- }
- if(KEY1 == 0){
- DELAY_MS(20);
- while(KEY1 == 0);
- c = 214;
- for(a=1;a<108;a++){
- DISPLAY_PIN (logo1[c],logo1[c+1]);
- c=c-2;//產(chǎn)生顯示行移位
- }
- }
- if(KEY3 == 0){
- DELAY_MS(20);
- while(KEY3 == 0);
- MENU++;
- }
- }
- if(MENU == 2){ //字幕3
- if(KEY2 == 0){
- DELAY_MS(20);
- while(KEY2 == 0);
- c = 0;
- for(a=1;a<128;a++){
- DISPLAY_PIN (logo2[c],logo2[c+1]);
- c=c+2;//產(chǎn)生顯示行移位
- }
- }
- if(KEY1 == 0){
- DELAY_MS(20);
- while(KEY1 == 0);
- c = 254;
- for(a=1;a<128;a++){
- DISPLAY_PIN (logo2[c],logo2[c+1]);
- c=c-2;//產(chǎn)生顯示行移位
- }
- }
- if(KEY3 == 0){
- DELAY_MS(20);
- while(KEY3 == 0);
- MENU++;
- }
- }
- }
- }
- /**********************************************************************************************
- /**********************************************************************************************/
- /*************************************************************
- * 杜洋工作室 DoYoung Studio
- /*************************************************************/
復(fù)制代碼
|
-
-
SHOOK16_SC_V1.zip
2016-9-8 14:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
24.28 KB, 下載次數(shù): 39, 下載積分: 黑幣 -5
-
-
SHOOK16_V1_HEX.rar
2016-9-8 14:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
1.34 KB, 下載次數(shù): 23, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|