




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、藍(lán)橋杯編程筆記(亞洲一條龍整理)近期和我們實驗室的小伙伴一起參加了第七屆藍(lán)橋杯單片機(jī)開發(fā)與設(shè)計組省賽,在這里將備賽期間的一些資料和經(jīng)驗總結(jié)一下,并分享給大家。藍(lán)橋杯單片機(jī)開發(fā)板是國信長天的CT107D單片機(jī)綜合訓(xùn)練平臺,個人感覺這塊開發(fā)板的設(shè)計還是很不錯的。之前一直用的普中的板子,自己也做過一些最小系統(tǒng)板,練習(xí)了藍(lán)橋杯的板子后根本不想再用普中的板子了。普中的板子將單片機(jī)的學(xué)習(xí)劃分成很多個模塊,操作各個模塊時需要手動接線,因此很適合初學(xué)者, 而藍(lán)橋杯的板子則不需要自己手動接線,開發(fā)板也沒有模塊劃的劃分,能夠讓我們對單片機(jī)編程有更深入的理解,適合進(jìn)階練習(xí)。雖然CT107D中使用了很多的鎖存器,電路
2、看起來比較復(fù)雜,但是熟悉之后會發(fā)現(xiàn)自己對之 前毫不在意的鎖存器有了更深刻的認(rèn)識,對于模塊化編程與代碼復(fù)用也有了更深入的認(rèn)識。通過這次比賽我對單片機(jī)編程也有了不同的認(rèn)識,學(xué)到一個很重要的單片機(jī)編程套路就是通過定時器來實現(xiàn)前后臺的編程思想,雖然以前也這么用過中斷來處理一些事務(wù),但是沒有這么深刻的認(rèn)識。同時,學(xué)會看芯片文檔對于你以后做開發(fā)會有很大的幫助??傊?,比賽過后有很多想要分享的東西,我會慢慢的寫好每一篇博客。在這一系列的筆記中,我會將自己藍(lán)橋杯備賽期間寫的一些代碼以及做過的一些模擬題與大 家進(jìn)行分享,歡迎大家與我交流心得。、流水燈I iiOEVCC亞丁PliU 工 孫 3I IPi 5 pm
3、%P第T跖 K“、率31)0 TUMI IMT55-nM74HCj UMIR圖1 LED部分電路原理圖分析根據(jù)上圖分析,要控制LED燈,首先我們需要了解 74HC573鎖存器,然后控制P0 口的輸出。根據(jù)74HC573的真值表,當(dāng)LE為高時,鎖存器左邊輸入什么右邊就輸出什么,當(dāng)LE為低時,鎖存器輸出的是上一次的值,即實現(xiàn)了鎖存。如下圖:0E-LEDQLHHHLHLLLLXQ0HXXZ圖2 74HC573真值表要實現(xiàn)流水燈則必須改變 74HC573的輸出,則必須將 Y4C置為高,給P0賦值后再將Y4c置 為低進(jìn)行鎖存。我們在原理圖中找到Y(jié)4c (如圖3),圖中 W* GN通跳帽連接起來,即WRM
4、氐電平0。圖 3 74HC138 與 74HC02如圖所示,Y4c由丫4和亞戲同控制,74HC02是一個4路2輸入或非門功能,W時低電平, 要使Y4c為高,則Y4必須為低電平,而 Y4又由74HC138譯碼器控制。74HC138譯碼器的真 值表(如圖4),要使得Y4為0,則三個輸入端應(yīng)該為 100,即P2A7=1,P2A6=0,P2A5=0 。又 只需要操作P2 口的這三位,不需要配置其他的五位,所以P2端口應(yīng)該配置為:P2 = (P2&0 x1f)|0 x80);74HC138集成譯碼器功能表輸入輸出E2E1A?A1AqY0Y1Y2Y3Y4Y5Y6Y7XHXXXXHHHHIITIHHXXHX
5、XXHHHHHHHHLXXXXXHHHHHHHHHLLLLLLHHHHHHHHLLLLHHLHHHHHHHLVLHVHHLHHHHHHLLLHHHHHLHHHHHLLHLLHHHHLHHHHLLHLHHHHHHLHHHLLHHLHHHHHHLHHLLHHHHHHHHHHL*H高電平L低電平X 一任意電平記 Ef為輸入使能端 A3 Al、A為二進(jìn)制數(shù)據(jù)輸入端而?彳為8個輸出信號字母上面的一號說明該輸入或輸出是低電平有效編寫代碼:while (1)(for (i= 0; i 8; i+)(P2 = (P2& 0 x1f )| 0 x80);/ 配置 74HC573 使其不鎖存P0 = (0 x01
6、i);/左移i位,按位取反P2 &= 0 x1f ;再次配置74HC573,使其鎖存delay();/適當(dāng)延時使LED亮得充分看到這里我們可能會感嘆點個LED燈都這么麻煩,但是只要你把這個思路理清了,之后的蜂鳴器、繼電器、數(shù)碼管都是這個套路,因為他們共用的P0和P2端口,且都用到了上圖 3中的鎖存器、138譯碼器和或非門。這就實現(xiàn)了一個8位的I/O 口進(jìn)行復(fù)用的分時來控制多個設(shè)備,這種設(shè)計是比較好的。二、蜂鳴器和繼電器查看原理圖找到繼電器和蜂鳴器所在,然后可以看到(如圖 5)繼電器和蜂鳴器的都是通過ULN2003來驅(qū)動的,ULN2003內(nèi)部集成了 7個達(dá)林頓管,可以有 7路輸入輸出,這里不僅驅(qū)
7、動了繼電器和蜂鳴器,還有直流電機(jī)與步進(jìn)電機(jī)。同樣,我們只需要控制Y5c和P0 口,而Y5c的正確Y5c的控制則與Y4c的控制大同小異,這里就不詳細(xì)講解了。我們可以得到控制配置 P2端口的代碼為:P2 = (P2&0 x1f)|0 xA0);我們再看繼電器和蜂鳴器的電路,當(dāng)ULN2003輸出低電平時繼電器和蜂鳴器才打開,而ULN2003每一路輸入輸出都加有一個非門,所以ULN2003的輸入為高電平時蜂鳴器繼電器才打開,為低電平時關(guān)閉。繼電器對應(yīng)的位為P0A4,蜂鳴器對應(yīng)的位為 P0A6,我們將P0 的這兩位賦為1時,即P0=0 x50時,兩個設(shè)備均打開。L LN2W 3himTLID Zcxnr
8、i nun oun IJLIH IMJI3 OLJTb mrb 、I L 巴兒 工 WIPH iI ETEPC 3TrEBhRI DI圖5蜂鳴器與繼電器電路原理圖 代碼部分:P2 = (P2& 0 x1f )| 0 xA0);/ 關(guān)閉鎖存P0 = 0 x10; 蜂鳴器關(guān)、繼電器開P2 &= 0 x1f ;/打開鎖存數(shù)碼管顯示幾乎是每次藍(lán)橋杯單片機(jī)設(shè)計與開發(fā)組競賽的必考部分,相對于使用LCD1602作為顯示設(shè)備,使用數(shù)碼管來顯示能夠更好的考察參賽選手的單片機(jī)基本功,因為CT107D開發(fā)平臺的設(shè)計使得數(shù)碼管的顯示不僅牽扯到數(shù)碼管顯示的基本內(nèi)容,還涉及到 74HC573鎖存器,74HC02異或門,7
9、4HC138譯碼器,以及中斷的知識,所以這是值得我們重視的一個 部分。一、原理分析根據(jù)CT107D的原理圖我們可以看出,數(shù)碼管顯示同樣涉及到 74HC573 74HC138和74HC02 這與上一節(jié)中的LED燈、繼電器和蜂鳴器的控制大同小異。 如下圖,藍(lán)色標(biāo)注為位選控制端口,由鎖存器U6來控制,需配置紅色標(biāo)注的 Y6c來控制鎖存;黃色標(biāo)注為段選控制端口, 由鎖存器U7來控制,需配置紅色標(biāo)注的 Y7c來控制鎖存。5 DOalN:Z IDO金11 J(,hdhcliniid jiiin21由7Ai4bqi134d.11.viXbI而,控制 Y6c與Y7c則需要通過 74HC18和74HC02來進(jìn)行
10、控制,如下圖,Y6c由Y6和 W映同控制,74Hc02是一個4路2輸入或非門功能,W時低電平,要使Y6c為高,則Y6必須為 低電平,即74Hci38譯碼器的三個輸入端應(yīng)該為100,即P2A7=1,P2A6=0,P2A5=0 。又只需要操彳P2 口的這三位,不需要配置其他的五位,所以P2端口應(yīng)該配置為:P2 =-IMCIK“HL HL壯(P2&0 x1f)|0 xc0)。同理,控制 Y7c時 P2端口應(yīng)該置為: P2 = (P2&0 x1f)|0 xE0)。JI3P 電.;iJinCOS3二、示例程序這里采用前后臺的編程思想,即使用定時器中斷來處理顯示部分,作為前臺,而邏輯處理與數(shù)據(jù)采集部分等則
11、在主程序流程中來完成,作為后臺。在下面這段程序中,定時器每隔2ms中斷一次執(zhí)行一次顯示程序,然后繼續(xù)執(zhí)行主程序的任務(wù),我們只要修改需要顯示的數(shù)組即 可實現(xiàn)顯示不同的數(shù)值,使顯示部分模塊化,程序顯示部分只提供外部接口(數(shù)組),不修 改顯示函數(shù),這樣不容易出錯,而且能夠使顯示更方便。#include reg52.h#define uchar unsigned char#define uint unsigned int uchar code tab = 0 xc0,0 xf9 , 0 xa4, 0 xb0,0 x99, 0 x92,0 x82, 0 xf8,0 x80, 0 x90, 0 xff ,
12、 0 xbf;/共陽極數(shù)碼管段選編碼數(shù)組uchar dspbuf = 10,10, 10, 10, 10,10, 10, 10;/ 顯示數(shù)據(jù)的數(shù)組uchar dspcom = 0;/位選控制變量void display。/ 顯示函數(shù)P2 = (P2&0 x1f)| 0 xE0);/ 段選消隱P0 = 0 xff ;P2 &= 0 x1f ;P2 = (P2&0 x1f)| 0 xC0);/ 位選P0 = 1dspcom;共陽極數(shù)碼管位選P2 &= 0 x1f;P2 = (P2&0 x1f)| 0 xE0);/ 段選P0 = tabdspbufdspcom;P2 &= 0 x1f;if(+dsp
13、com =8)dspcom =0;/位選編碼,循環(huán)顯示 8位void main()TMOD = 0 x01; 定時器0工作方式1 TH0 = (65536-2000)/ 256;/初始化TL0 = (65536-2000)%256;ET0 =1;開定時器0中斷允許位EA =1;開總中斷TR0 =1;/開定時器0/要顯示不同的數(shù)據(jù)只需要修改此數(shù)組的值即可while ( 1) TOC o 1-5 h z dspbuf0=1;dspbuf1=2;dspbuf2=3;dspbuf3=4;dspbuf4=5;dspbuf5 =6;dspbuf6 =7;dspbuf7 =8;)void timer0()
14、interrupt 1/定時器0中斷服務(wù)函數(shù)(TH0 = (65536- 2000)/ 256;TL0 = (65536- 2000)%256;display(); /2ms 顯示一次 )按鍵幾乎也是每次藍(lán)橋杯單片機(jī)設(shè)計與開發(fā)組競賽的必考部分,因為這是CT107D開發(fā)平臺上僅有的輸入設(shè)備之一,而且按鍵也是單片機(jī)基礎(chǔ)開發(fā)中常見的器件。一、獨立按鍵1、原理分析用跳帽把J5的引腳2和引腳3接起來,即可使用 4個獨立按鍵(如下圖):S7,S6,S5,S4。按鍵的一端接到 GND另一端接到P3 口的低四位,所以我們只要檢測連接按鍵的P3 口的某一位是否為低電平即可確定某一按鍵是否被按下。但是,因為存在抖
15、動,所以需要進(jìn)行消抖處理??傊?,獨立按鍵的按鍵檢測基本流程為:檢測是否有鍵按下,延時消抖,再次檢測是 否有鍵按下,執(zhí)行按鍵按下后的相應(yīng)操作,松手檢測。JT7SL1SI5RI9C1S 12、示例程序sbit S7=P3A 0;sbit S6=P3A 1;sbit S5=P3A 2;sbit S4=P3A 3;/這里以S4為例if (S4= 0)/檢測S4是否被按下(delay_ms( 2);/ 延時消抖if (S4=0)/再次檢測 S4是否被按下(/這里執(zhí)行按鍵后需要執(zhí)行的操作)while (S4=0);/ 松手檢測)二、矩陣鍵盤1、原理分析用跳帽把J5的引腳1和引腳2接起來,即可使用矩陣鍵盤(
16、如下圖)。矩陣鍵盤的檢測常 常采用行列掃描法。先進(jìn)行行掃描,給 P3 口賦值為0 x0f,當(dāng)有鍵按下時P3 低四位的某一 位的高電平會拉低,通過檢測P3 高低電平的變化即可確定是哪一行的按鍵被按下,然后再給P3 口賦值為0 xf0 ,同理,當(dāng)有鍵按下時P3 口的高四位的某一位的高電平會被拉低,通過檢測P3 口的電平變化即可確定是哪一列的按鍵被按下,由行列交叉可以確定唯一的一 個按鍵。S?SI 15155198W2、示例程序先確定行來得到鍵值的臨時值,待確定列后將鍵值的臨時值加上列值得到最終的鍵值。當(dāng)然,這里的按鍵編號可以進(jìn)行合理的自定義,不需要和以下程序完全一樣。#include#define
17、 uchar unsigned char#define uint unsigned int#define temp P3uchar key_value =0;void keyscan() /按鍵掃描函數(shù) temp = 0 x0f;if (temp!= 0 x0f)/ 掃描行delay_ms( 10);/ 延時消抖switch (temp)case0 x0e:key_value =0;breakcase0 x0d:key_value =4;breakcase0 x0b:key_value =8;breakcase0 x07:key_value =12;breaktemp if=0 xf0 ;/掃
18、描列(temp =0 x70)key_value + =0;while(temp =:0 x70);/松手檢if(temp =0 xb0)key_value + =1;while(temp =0 xb0);/松手檢if(temp =0 xd0)key_value + =2;while(temp =0 x0d );/松手檢if(temp =0 xe0)key_value + =3;while(temp =0 x0e);/松手檢測測測因為CT107D單片機(jī)開發(fā)平臺采用IAP15F2K61S2單片機(jī),使用的是轉(zhuǎn)接板,由轉(zhuǎn)接板原理圖知矩陣鍵盤接的是 P3 口的低6位與P4.2、P4.4 口,即用P4.2代替了 P3.6 , P4.4代替了P3.7 ,所以需要修改部分代碼。#include#def
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年煙臺市萊州市教育和體育系統(tǒng)招聘真題
- 風(fēng)險管理框架應(yīng)用試題及答案
- 幼兒情感教育活動計劃
- 法學(xué)概論學(xué)習(xí)方法的多樣性與靈活性試題及答案
- 網(wǎng)絡(luò)管理員考試背景知識分析試題及答案
- 手術(shù)室安全管理與風(fēng)險控制計劃
- 2024年上海奉賢區(qū)社區(qū)工作者招聘筆試真題
- 軟考2025網(wǎng)絡(luò)管理員全重要試題及答案
- 2024年昆明冶金高等??茖W(xué)校招聘筆試真題
- 軟件設(shè)計師考試多樣化策略試題及答案解析
- Introduction-to-MedDRA-M教學(xué)講解課件
- 有源醫(yī)療器械產(chǎn)品有效期驗證報告2019
- 訴訟材料接收表
- 機(jī)動車駕駛員體檢表
- 新技術(shù)新項目匯報課件
- 各級醫(yī)療機(jī)構(gòu)醫(yī)院發(fā)熱門診設(shè)置管理規(guī)范
- 思想道德與法治全冊教案
- 水電站擴(kuò)建工程砂石加工系統(tǒng)施工組織設(shè)計
- 蒙牛冰淇淋經(jīng)銷商管理制度
- ASTM B465-20 銅鐵合金板、薄板、帶材和軋制棒材的標(biāo)準(zhǔn)規(guī)范
- 外協(xié)出入庫流程
評論
0/150
提交評論