標(biāo)題: 小白菜的學(xué)習(xí)之路系列之四—?dú)g天喜地?fù)u搖棒 [打印本頁(yè)]
作者: jiujiu 時(shí)間: 2014-12-20 18:22
標(biāo)題: 小白菜的學(xué)習(xí)之路系列之四—?dú)g天喜地?fù)u搖棒
一 背景
話(huà)說(shuō)年就要過(guò)去了,某人的生日也快到了。送個(gè)什么東西好呢?小白菜開(kāi)始思考了,上次送是一條小白菜自己設(shè)計(jì)定做的項(xiàng)鏈(銀的,不貴的,同學(xué)們可以試一下哦,保證讓小女生感動(dòng)的不得了……咳咳,有點(diǎn)跑題了。),這次嘛,送個(gè)什么好,想啊想,要不就送個(gè)閃字搖搖棒吧。搖搖棒又好玩,而且能親手做(表達(dá)心意嘛),還能鍛煉一下動(dòng)手能力,最主要的是自己親手做的東西是天下獨(dú)一份的哦。恩,說(shuō)做就做!
小白菜會(huì)把這次DIY過(guò)程的全部資料無(wú)私奉獻(xiàn)!鼓掌。。】墒牵@是為什么呢?因?yàn)楝F(xiàn)在地里的白菜8分錢(qián)一斤沒(méi)人要啊,還不如白送吶!!!哈哈。開(kāi)玩笑!不過(guò)種白菜的今年吃苦頭了,希望他們?cè)缛者^(guò)上好日子……
二 應(yīng)用需求 做一個(gè)搖搖棒!
三 過(guò)程分析
手不停的左右搖晃,利用人眼的視覺(jué)暫留來(lái)顯示一幅畫(huà)面,其原理和數(shù)碼管、點(diǎn)陣的動(dòng)態(tài)掃描相同。因此需要LED和單片機(jī),還需要一個(gè)啟動(dòng)顯示的裝置,并且在搖到一定的位置時(shí)來(lái)觸發(fā)這個(gè)裝置,這個(gè)裝置就是慣性開(kāi)關(guān)。別的沒(méi)了……
四 硬件分析
單片機(jī)及外圍電路必不可少。單片機(jī)就先STC90C52RC,為什么?因?yàn)槲沂稚蠒簳r(shí)就只有這一片能用的了。16個(gè)LED可以顯示漢字,通過(guò)電阻連接到VCC,另一端接IO口。
難點(diǎn)來(lái)了,慣性開(kāi)關(guān)!小白菜手上沒(méi)有水銀開(kāi)關(guān),就用加了點(diǎn)焊錫的銅線(xiàn)來(lái)充當(dāng)吧。見(jiàn)圖4.1.1。
電池?當(dāng)然要有!省電???需要稍微考慮一下。附錄1是較為詳細(xì)的制作過(guò)程。
202254u1515cggizi5pewt.jpg.thumb.jpg (10.59 KB, 下載次數(shù): 202)
下載附件
2014-12-20 18:56 上傳
圖4.1.1 DIY“水銀開(kāi)關(guān)”示意圖
五 軟件分析
通過(guò)過(guò)程分析,小白菜了解了一個(gè)重要的地方,觸發(fā)顯示。但小白菜喜歡把功能拆分開(kāi),于是就需要兩個(gè)函數(shù)來(lái)處理,觸發(fā)函數(shù)和顯示函數(shù)。
1 司令部——觸發(fā)函數(shù)
通過(guò)檢測(cè)慣性開(kāi)關(guān)來(lái)決定是否起動(dòng)顯示,這是發(fā)命允顯示命令的函數(shù),因此是司令部!既然是允許顯示,那就起名App_YYB_Disp_Enable()吧(App是什么?小白菜的應(yīng)用層函數(shù)的前綴)。
2 作戰(zhàn)部隊(duì)——顯示函數(shù)
顯示函數(shù)只負(fù)責(zé)顯示。當(dāng)司令部觸發(fā)函數(shù)發(fā)布顯示允許命令后,該函數(shù)把一幅圖片顯示出來(lái)(就算是漢字,其實(shí)也是一幅點(diǎn)陣圖片)。這就像作戰(zhàn)部隊(duì)接到命令后進(jìn)行執(zhí)行一樣。軟件起名App_ YYB_Disp()。
3作戰(zhàn)內(nèi)容——顯示內(nèi)容
找個(gè)取模軟件把要顯示的東西取個(gè)模,然后把數(shù)據(jù)放到code區(qū)。盡量放在code區(qū)哦。
六 代碼編寫(xiě) 略
七 成果展示
“誰(shuí)知盤(pán)中餐,粒粒皆辛苦。”成果出來(lái)的那一刻,小白菜心里巨激動(dòng)!畢竟是個(gè)人的勞動(dòng)成果嘛。話(huà)不多說(shuō),直接上圖。
2028022wl8g50t08l3g0g3.bmp (438.8 KB, 下載次數(shù): 168)
下載附件
2014-12-20 18:56 上傳
202748thiynnu1iiu4bk1l.bmp (231.3 KB, 下載次數(shù): 163)
下載附件
2014-12-20 18:56 上傳
圖7.1.1 效果圖
八 總結(jié)
1 一開(kāi)始測(cè)試時(shí),不要急于顯示漢字,因?yàn)闈h字是相對(duì)復(fù)雜的圖案?梢韵赛c(diǎn)亮一行或一列。循序漸進(jìn)!延時(shí)要自己進(jìn)行測(cè)試。一開(kāi)始小白菜在顯示列時(shí)用的是毫秒級(jí)延時(shí),后來(lái)發(fā)現(xiàn)時(shí)間太長(zhǎng),于是改用了微秒級(jí)延時(shí)。
2 由于手在來(lái)回?cái)[動(dòng)的時(shí)候不是勻速的,在最邊上時(shí)速度最慢,所以在觸發(fā)后要先延時(shí)一段時(shí)間,待行進(jìn)到較為勻速區(qū)之后再開(kāi)始顯示。當(dāng)然,你也可以動(dòng)態(tài)的進(jìn)行延時(shí)來(lái)處理這個(gè)問(wèn)題。
3慣性開(kāi)關(guān)可以做成雙向觸發(fā)的(類(lèi)似于單刀雙擲開(kāi)關(guān))。由兩個(gè)IO口來(lái)確定兩個(gè)邊的位置。如圖8.3.1所示。軟件也要做相應(yīng)的更改。如左邊觸發(fā)時(shí),正序顯示,右邊觸發(fā)時(shí),逆序顯示。(兩個(gè)都觸發(fā)時(shí)?可以忽略或者取一邊有效。)要注意顯示時(shí)把握好延時(shí)。
4顯示方式可改變。我們一般都是一次送出8位LED數(shù)據(jù)到Pn口,這是因?yàn)槲覀兊挠布С治覀冞@們做,如圖8.4.1所示,各個(gè)LED間互不影響。
是否有其他顯示方式?其實(shí)我們可以每次只送出一個(gè)LED的數(shù)據(jù),然后把Pn口的8位數(shù)據(jù)依次送出,之后顯示下一字節(jié)。既然一次只點(diǎn)亮一個(gè)數(shù)據(jù),那個(gè)我們可以只用一個(gè)限流電阻,如圖8.4.2所示。此時(shí)一定要保證一次只點(diǎn)亮一個(gè)LED,否則亮度下降,注意不要燒毀0.25W的電阻。
203006yux6tdmcy3dmegtt.bmp (857.71 KB, 下載次數(shù): 186)
下載附件
2014-12-20 18:56 上傳
圖8.3.1雙向觸發(fā)慣性開(kāi)關(guān)
203034l25rc0vzozms9j05.bmp (949.92 KB, 下載次數(shù): 188)
下載附件
2014-12-20 18:56 上傳
圖8.4.1 普通LED接線(xiàn)方式
202954t8nyry009090jtb9.bmp (696.15 KB, 下載次數(shù): 152)
下載附件
2014-12-20 18:56 上傳
圖8.4.2 無(wú)實(shí)用價(jià)值的改進(jìn)型LED接線(xiàn)方式
九 附件
內(nèi)有硬件原理圖,源代碼,以及本文的PDF版本。
十 聯(lián)系小白菜
QQ = 1062509507
3htech
我是一顆小白菜~
======================================================================
附錄1:搖搖棒硬件制作過(guò)程,一定要先畫(huà)原理圖。
2033079avyavoxrva9hcom.bmp (1.65 MB, 下載次數(shù): 171)
下載附件
2014-12-20 18:56 上傳
原理圖
1 焊接LED,數(shù)目自己定。之后焊接電阻,最好用直插元件,小白菜這里都是貼片的……小白菜又測(cè)量了下電阻值(1k,5%精度)。
203545hhvzsjrr4djjcp7j.bmp (535.37 KB, 下載次數(shù): 177)
下載附件
2014-12-20 18:56 上傳
圖F1.1.1 焊接LED
20234529x3g1z3dz44f984.bmp (808.47 KB, 下載次數(shù): 162)
下載附件
2014-12-20 18:56 上傳
圖F1.1.2焊接限流電阻
202341wcswl93vnuv77klu.jpg.thumb.jpg (31.68 KB, 下載次數(shù): 182)
下載附件
2014-12-20 18:56 上傳
圖F1.1.3 檢查電阻焊接質(zhì)量
2 焊接DIP40座和單片機(jī)的復(fù)位電路,晶振電路。還是貼片的……
203728lrypyxbxegex0gew.jpg (52.64 KB, 下載次數(shù): 190)
下載附件
2014-12-20 18:56 上傳
203742ju3ooboxnnnq2703.jpg.thumb.jpg (46.87 KB, 下載次數(shù): 178)
下載附件
2014-12-20 18:56 上傳
圖F1.2.1焊接DIP40座 圖F1.2.2焊接復(fù)位電路和時(shí)鐘電路
3 焊接慣性開(kāi)關(guān)。由于怕慣性開(kāi)關(guān)自身質(zhì)量太小,所以加了個(gè)焊錫球。為了不讓它上下活動(dòng),我加了一個(gè)小罩子,這樣就能保證只在一定的范圍內(nèi)活動(dòng)。
2023478gdedo849xw8zgge.jpg (60.82 KB, 下載次數(shù): 167)
下載附件
2014-12-20 18:56 上傳
圖F1.3.1慣性開(kāi)關(guān)
4 用排線(xiàn)連接LED和單片機(jī)以及開(kāi)關(guān)。如圖F1.4.1。
5 焊接電池座和電源地線(xiàn)。整機(jī)焊接完成。如圖F1.5.1。這里我強(qiáng)壓了一個(gè)DIP40座,方便我取下單片機(jī)下程序。兩個(gè)電池串聯(lián)的,電壓6V。正好。效果圖如圖F1.5.2和圖F1.5.3。
20410281jc9l9uzxulvxv5.jpg.thumb.jpg (21.26 KB, 下載次數(shù): 166)
下載附件
2014-12-20 18:56 上傳
204155t4mttqqmzq8sistn.jpg.thumb.jpg (13.92 KB, 下載次數(shù): 167)
下載附件
2014-12-20 18:56 上傳
圖F1.4.1背面連線(xiàn)圖 圖F1.5.1 整機(jī)正面圖
圖F1.5.2 效果圖1 圖F1.5.3 效果圖2
歡天喜地?fù)u搖棒.rar
(3.34 MB, 下載次數(shù): 2870)
2014-12-20 18:18 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: jiujiu 時(shí)間: 2014-12-20 18:24
主程序預(yù)覽:
- #include "Config.H"
- //========================================================================//
- // 慣性開(kāi)關(guān) //
- //========================================================================//
- sbit InertiaSwitch = P2^7; // 為0時(shí)表示開(kāi)關(guān)閉合了。
- //========================================================================//
- // 顯示允許函數(shù) (對(duì)外提供服務(wù))
- //函數(shù)名稱(chēng):App_YYB_Disp_Enable ()
- //函數(shù)功能:檢查當(dāng)前是否允許顯示
- //入口參數(shù):無(wú)。
- //出口參數(shù):TRUE = 運(yùn)動(dòng)到最左邊,口線(xiàn)電平被拉低,允許啟動(dòng)顯示。FALSE = 其他位置,不允許顯示。
- //重要說(shuō)明:
- //編寫(xiě)日期:2012-11-29
- //測(cè)試結(jié)果:
- //========================================================================//
- // 函數(shù)返回值:
- extern uint8 App_YYB_Disp_Enable(void)
- {
- // 閉合后口線(xiàn)電平為低
- if(0 == InertiaSwitch)
- {
- Delay_MS(30); // 在剛觸發(fā)時(shí),搖搖棒剛行進(jìn)到最左邊,此時(shí)速度很低,因而若立即啟動(dòng)顯示,則必然會(huì)使字顯示的很少,所以延時(shí)一段時(shí)間。
- // 在搖搖棒速度上來(lái)之后再啟動(dòng)顯示。
- return TRUE;
- }
- else
- {
- return FALSE;
- }
- }
- //========================================================================//
- // 顯示部分 //
- //========================================================================//
- //========================================================================//
- //變量名稱(chēng):u8Picture
- //變量功能:保存需要顯示的數(shù)據(jù)
- //作用域 :全局變量、僅限本文件
- //重要說(shuō)明:,僅適用于本程序。
- //========================================================================//
- static uint8 code u8Picture[4][32] =
- {
- 0xFF,0xFF,0xFF,0xEF,0xFF,0xEF,0xFE,0xEF,0x00,0x6F,0x80,0xEF,0xEE,0xEF,0xEE,0xEF, // 與
- 0xEE,0xEF,0xEE,0xEF,0xEE,0xCF,0xEE,0xED,0xEE,0xFC,0xCE,0x01,0xFC,0x03,0xFE,0xFF,
- 0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xBE,0xFF,0xBE,0xFF,0xBE,0xFD,0xBE,0xFD, // 子
- 0xB8,0x00,0xB0,0x01,0xA6,0xFF,0x8E,0xFF,0x1E,0xFF,0xBE,0xFF,0xFC,0xFF,0xFE,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0x01,0xB7,0xFF,0xB4,0x07,0xB6,0x0F,0xB6,0xEF, // 同
- 0xB6,0xEF,0xB6,0x07,0xA4,0x0D,0xB6,0xFD,0x80,0x00,0x00,0x01,0xBF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFB,0xDF,0xF7,0xBF,0xCE,0x00,0x18,0x01,0xBD,0xFF,0xFF,0xFF,0xFB,0xFF, // 行
- 0xBB,0xFF,0xBB,0xFD,0xBB,0xFD,0xB8,0x00,0xB8,0x01,0x3B,0xFF,0xB3,0xFF,0xFB,0xFF,
- };
- //========================================================================//
- // 顯示一列數(shù)據(jù)函數(shù) (對(duì)外提供服務(wù))
- //函數(shù)名稱(chēng):App_YYB_Disp_Colum ()
- //函數(shù)功能:顯示一列數(shù)據(jù)。
- //入口參數(shù):u8UpByte為16位的上半部分?jǐn)?shù)據(jù),u8DownByte為下半部分?jǐn)?shù)據(jù)
- //出口參數(shù):無(wú)。
- //重要說(shuō)明:
- //編寫(xiě)日期:2012-11-29
- //測(cè)試結(jié)果:
- //========================================================================//
- static void App_YYB_Disp_Colum(uint8 u8UpByte, uint8 u8DownByte)
- {
- P1 = u8UpByte;
- P0 = u8DownByte;
- Delay_50us(10); // 延時(shí)500us,可自行調(diào)節(jié)
- P1 = 0xFF; // 關(guān)閉顯示
- P0 = 0xFF;
- }
- //========================================================================//
- // 顯示圖像函數(shù) (對(duì)外提供服務(wù))
- //函數(shù)名稱(chēng):App_YYB_Disp()
- //函數(shù)功能:顯示一幅圖片。漢字點(diǎn)陣實(shí)際上也是一幅圖片
- //入口參數(shù):u8disp_Enable:是否起動(dòng)顯示。TRUE = 允許起動(dòng)顯示,F(xiàn)ALSE = 不允許顯示。
- //出口參數(shù):無(wú)。
- //重要說(shuō)明:
- //編寫(xiě)日期:2012-11-29
- //測(cè)試結(jié)果:
- //========================================================================//
- extern void App_YYB_Disp(uint8 u8disp_Enable)
- {
- uint8 i, k;
- if(FALSE == u8disp_Enable)
- {
- return; // 一個(gè)函數(shù)最好只有一個(gè)出口,顯然,這里不符合要求。
- }
- for(i = 0; i < 4; i++) // 要顯示的4個(gè)漢字
- {
- for(k = 0; k < 16; k++) // 這里,一個(gè)漢字有16列
- {
- App_YYB_Disp_Colum(u8Picture[i][2*k], u8Picture[i][2*k + 1]);
- }
- Delay_MS(1);
- }
- Delay_MS(20);
- }
- //========================================================================//
- // 主函數(shù) //
- //========================================================================//
- void main(void)
- {
- uint8 u8State;
- while(1)
- {
- u8State = App_YYB_Disp_Enable();
- App_YYB_Disp(u8State);
- }
- }
復(fù)制代碼
作者: jiujiu 時(shí)間: 2014-12-20 18:26
TypeRedefine.H文件:
- /*
- ********************************************************************************
- * WIT
- * 淄博威特電氣有限公司
- *
- * 地址:山東省淄博市張店區(qū)淄博市高新技術(shù)開(kāi)發(fā)區(qū)政通路135號(hào)高創(chuàng)中心E座2層
- * (c) Copyright 2012, All Rights Reserved
- * www.weitedq.com
- * 開(kāi)發(fā)環(huán)境 : Keil4
- * 文件名 : TypeRedefine.H
- * 程序員 : 3htech
- * 開(kāi)發(fā)時(shí)間 : 2012-06-04
- * 描述 : 類(lèi)型重新定義。
- * 生存條件 : 自由存在。
- *-------------------------------------------------------------------------------
- * 修 改 :
- * 日 期 :
- * 描 述 :
- *-------------------------------------------------------------------------------
- ********************************************************************************
- */
- //------------------------------ 文件開(kāi)關(guān) ------------------------------//
- // 防止文件包含時(shí)多次編本文件,與本文件結(jié)尾處的endif對(duì)應(yīng)。
- #ifndef _TYPEREDEFINE_H_
- #define _TYPEREDEFINE_H_
- //----------------------------------------------------------------------------//
- //------------------------------ 系統(tǒng)頭文件包含 ------------------------------//
- #include<stdio.H> // 為了使用NULL的定義。
- //----------------------------- 自定義頭文件包含 -----------------------------//
- //無(wú)
- //-------------------------------- 類(lèi)型聲明 --------------------------------//
- //----------------------------------------------------------------------------//
- //類(lèi)型名稱(chēng):
- //類(lèi)型功能:
- //成員詳解:
- //重要說(shuō)明:
- //----------------------------------------------------------------------------//
- //------------------------------ 全局變量定義 ------------------------------//
- //無(wú)
- //--------------------------------------------------------------//
- // 類(lèi)型重新定義
- //名稱(chēng):類(lèi)型重新定義
- //功能:
- // 51系列單片機(jī)應(yīng)用下的類(lèi)型重新定義。
- // 使用的是8位單片機(jī),因此char是8位,int為16位,long為32位
- //--------------------------------------------------------------//
- typedef bit bdata uint1; // 無(wú)符號(hào)1 位整型變量需要加前綴u1
- typedef unsigned char uint8; // 無(wú)符號(hào)8 位整型,前綴u8
- typedef signed char int8; // 有符號(hào)8 位整型,前綴i8
- typedef unsigned int uint16; // 無(wú)符號(hào)16位整型,前綴u16
- typedef signed int int16; // 有符號(hào)16位整型,前綴i16
- typedef unsigned long uint32; // 無(wú)符號(hào)32位整型,前綴u32
- typedef signed long int32; // 有符號(hào)32位整型,前綴i32
- typedef float flt32; // 單精度浮點(diǎn)數(shù)(32位長(zhǎng)度),前綴f32
- //------------------------------- 宏定義 ---------------------------------//
- //----------------------------------------------------------------------------//
- //宏名 :TURE, FALSE
- //功能 :錯(cuò)誤標(biāo)志或操作完成標(biāo)志。
- //重要說(shuō)明:無(wú)
- //----------------------------------------------------------------------------//
- #ifndef TRUE
- #define TRUE 0
- #endif
- #ifndef FALSE
- #define FALSE 1
- #endif
- //------------------------------ 文件開(kāi)關(guān) ------------------------------//
- // 防止文件包含時(shí)多次編本文件,與本文件開(kāi)頭處的 #ifndef 對(duì)應(yīng)。
- #endif
- //----------------------------------------------------------------------------//
- //------------------------------ 文件結(jié)束 ------------------------------//
復(fù)制代碼
作者: jiujiu 時(shí)間: 2014-12-20 18:27
Delay.c文件:
作者: 曼濤1314 時(shí)間: 2015-1-8 17:06
不錯(cuò)不錯(cuò)
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产精品久久久久久妇女6080
|
久久久久久免费毛片精品
|
亚洲午夜av久久乱码
|
av手机在线
|
精品一区国产
|
一二区电影
|
亚洲成av人片在线观看
|
国产在线精品一区二区
|
荷兰欧美一级毛片
|
欧美亚洲国产日韩
|
天堂综合网|
天天爽夜夜操
|
亚洲欧洲成人在线
|
啪啪免费
|
www日本高清视频
|
国产成人免费视频网站高清观看视频
|
夜夜爽99久久国产综合精品女不卡
|
国产探花在线精品一区二区
|
亚洲婷婷六月天
|
日本a级大片
|
精品亚洲一区二区三区四区五区
|
久久中文视频
|
色综合久久久久
|
久久亚洲国产精品
|
aaa一区|
欧美xxxⅹ性欧美大片
|
国产精品资源在线
|
午夜精品一区二区三区在线视频
|
亚洲福利
|
免费不卡av
|
欧美日韩国产精品一区二区
|
久久99视频这里只有精品
|
国产精品国产三级国产a
|
欧美性另类
|
中国美女撒尿txxxxx视频
|
不卡一区二区在线观看
|
在线一区二区三区
|
九九热精品视频
|
日本免费一区二区三区视频
|
先锋av资源在线
|
国产色婷婷|