![自動(dòng)檢測(cè)教學(xué)教案_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/1762d5dc-7062-4f8b-8a83-57fd33e1fe98/1762d5dc-7062-4f8b-8a83-57fd33e1fe981.gif)
![自動(dòng)檢測(cè)教學(xué)教案_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/1762d5dc-7062-4f8b-8a83-57fd33e1fe98/1762d5dc-7062-4f8b-8a83-57fd33e1fe982.gif)
![自動(dòng)檢測(cè)教學(xué)教案_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/1762d5dc-7062-4f8b-8a83-57fd33e1fe98/1762d5dc-7062-4f8b-8a83-57fd33e1fe983.gif)
![自動(dòng)檢測(cè)教學(xué)教案_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/1762d5dc-7062-4f8b-8a83-57fd33e1fe98/1762d5dc-7062-4f8b-8a83-57fd33e1fe984.gif)
![自動(dòng)檢測(cè)教學(xué)教案_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/17/1762d5dc-7062-4f8b-8a83-57fd33e1fe98/1762d5dc-7062-4f8b-8a83-57fd33e1fe985.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、- 64 -預(yù)備項(xiàng)目如果同學(xué)們從來(lái)沒(méi)有做過(guò)小項(xiàng)目,是很難下手開(kāi)展應(yīng)用項(xiàng)目的設(shè)計(jì)的。為此設(shè)計(jì)了幾個(gè)預(yù)備項(xiàng)目,用于提高同學(xué)們單片機(jī)設(shè)計(jì)的基本動(dòng)手能力,為實(shí)施自動(dòng)檢測(cè)技術(shù)的應(yīng)用項(xiàng)目設(shè)計(jì)打好基礎(chǔ)。 如果單片機(jī)課程中開(kāi)展過(guò)同類項(xiàng)目教學(xué)的,可以跳過(guò)預(yù)備項(xiàng)目或者選作部分項(xiàng)目。預(yù)備項(xiàng)目1用單片機(jī)設(shè)計(jì)一個(gè)簡(jiǎn)易的自動(dòng)檢測(cè)系統(tǒng)0 任務(wù)和要求請(qǐng)用單片機(jī)設(shè)計(jì)一個(gè)自動(dòng)檢測(cè)系統(tǒng),具體要求如下:1) 有2個(gè)傳感器輸入接口 一個(gè)用于輸入電壓,包括ADC、VCC和GND三個(gè)引腳。 一個(gè)用于輸入頻率,包括Freq、VCC和GND三個(gè)引腳。Freq可以接單片機(jī)的T1。2) 具有4位獨(dú)立式按鍵接口,包括四根IO線和一根GND。用于插接
2、四個(gè)按鍵的小鍵盤(pán)。3) 兩個(gè)LED數(shù)碼管接口,用于驅(qū)動(dòng)一個(gè)四聯(lián)LED數(shù)碼管。兩個(gè)接口包括12根線,分別是8根段碼,4根位碼。通過(guò)修改程序,可以顯示時(shí)鐘、電壓、溫度、速度、距離等。4) 電路板上帶一個(gè)LED電源指示燈5) 具有一個(gè)串口通訊接口,包括VCC、RXD、TXD、GND四根線。下載程序時(shí)可用作ISP下載端口,正常工作時(shí),可用于單片機(jī)與單片機(jī)、單片機(jī)與PC機(jī)的通訊,接上無(wú)線模塊還可以實(shí)現(xiàn)無(wú)線通訊。1 基本原理分析1.1單片機(jī)簡(jiǎn)介單片機(jī)又叫單片微型計(jì)算機(jī) ,是采用超大規(guī)模集成電路技術(shù)把CPU、RAM、ROM、多種I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)時(shí)器等功能集成到一塊硅片上構(gòu)成的一個(gè)小而完善的微型
3、計(jì)算機(jī)系統(tǒng)。常見(jiàn)的單片機(jī)有很多型號(hào),外觀如下圖所示。 圖1 各種單片機(jī)的外觀芯片的顯微圖如下所示。為了理解單片機(jī)的工作原理,我們繪制單片機(jī)的內(nèi)部方框圖如下: 圖2 單片機(jī)的顯微圖 圖3 單片機(jī)的內(nèi)部方框圖胡老師提示:教材上花費(fèi)大量的篇幅去講解單片機(jī)的結(jié)構(gòu)和原理,我們不設(shè)計(jì)芯片,也不需要對(duì)芯片的內(nèi)部結(jié)構(gòu)作過(guò)多了解,其實(shí)太詳細(xì)地學(xué)習(xí)冗長(zhǎng)的工作原理也沒(méi)有用,反而讓同學(xué)們產(chǎn)生疲勞。重要的是如何快速學(xué)會(huì)用單片機(jī)設(shè)計(jì)電子產(chǎn)品。1.2單片機(jī)的特點(diǎn)單片機(jī)具有體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化和使用方便等優(yōu)點(diǎn)。 因此廣泛地應(yīng)用于家用電器、工農(nóng)業(yè)自動(dòng)化控制、導(dǎo)彈自動(dòng)跟蹤、電子儀表等領(lǐng)域。1.3.單片機(jī)的
4、廣泛應(yīng)用現(xiàn)代人類生活中所用的幾乎每件電子和機(jī)械產(chǎn)品中都會(huì)集成有單片機(jī)。手機(jī)、電話、計(jì)算器、家用電器、電子玩具、掌上電腦以及鼠標(biāo)等電腦配件中都配有1-2部單片機(jī)。 汽車上一般配備40多部單片機(jī)。飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過(guò)程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動(dòng)洗衣機(jī)的控制,以及程控玩具、電子寵物、機(jī)器人、智能儀表、醫(yī)療器械等等,這些都離不開(kāi)單片機(jī)。 舉例如下:?jiǎn)纹瑱C(jī)在電子儀表中的應(yīng)用。結(jié)合不同類型的傳感器,可實(shí)現(xiàn)諸如電壓、電流、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長(zhǎng)度、硬度、元素、壓力等物
5、理量的測(cè)量。采用單片機(jī)控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或數(shù)字電路更加強(qiáng)大。單片機(jī)在自動(dòng)化控制中的應(yīng)用。用單片機(jī)可以構(gòu)成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、通信系統(tǒng)、信號(hào)檢測(cè)系統(tǒng)、無(wú)線感知系統(tǒng)、測(cè)控系統(tǒng)、機(jī)器人等應(yīng)用控制系統(tǒng)。例如工廠流水線的智能化管理,電梯智能化控制、各種報(bào)警系統(tǒng),與計(jì)算機(jī)聯(lián)網(wǎng)構(gòu)成二級(jí)控制系統(tǒng)等。單片機(jī)在家用電器中的應(yīng)用。現(xiàn)在的家用電器廣泛采用了單片機(jī)控制,從電飯煲、洗衣機(jī)、電冰箱、空調(diào)機(jī)、彩電、其他音響視頻器材。2.方案論證單片機(jī)選型:常用的單片機(jī)有 8051 、 STC 、 AVR 、C8051F 和凌陽(yáng)單片機(jī)等。我們選擇 STC12C5A ,是因?yàn)?/p>
6、它與8051單片機(jī)完全兼容,還提供了 ISP下載 ,無(wú)需編程器;同時(shí)具有8路ADC模擬電壓采集電路, 。鍵盤(pán)選型:?jiǎn)纹瑱C(jī)常用的鍵盤(pán)有 獨(dú)立式 、 矩陣式 、 ADC鍵盤(pán) 。因?yàn)榘存I較少,我們選擇 獨(dú)立式 。顯示器選型:?jiǎn)纹瑱C(jī)常用的顯示器有 LED數(shù)碼管 、 LCD1602 、 LCD128*64 ,為了降低成本,我們選擇LED數(shù)碼管作為數(shù)字顯示。3.電路設(shè)計(jì)書(shū)上講的單片機(jī)最小系統(tǒng)是指 剛剛能使單片機(jī)工作 的系統(tǒng)。一般包括 單片機(jī) 、 時(shí)鐘振蕩電路 、 復(fù)位電路 三部分,但是這樣的系統(tǒng)什么用也沒(méi)有。我們一般講的最小系統(tǒng)是指 最小應(yīng)用系統(tǒng) ,要增加一些別的接口,如圖所示:如 鍵盤(pán)接口 、 顯示接口
7、 、 傳感器接口、 PWM 和 通訊 接口等。3.1 STC單片機(jī)設(shè)計(jì)單片機(jī)電路都是以單片機(jī)為核心的,我們可以不了解單片機(jī)內(nèi)部結(jié)構(gòu),但是一定要了解單片機(jī)的引腳分布。不同單片機(jī)引腳都有差異,一般來(lái)說(shuō)8051系列單片機(jī)有40個(gè)引腳。我們選用的STC12C5A單片機(jī)與8051兼容,引腳如下圖所示。圖4 STC單片機(jī)的引腳分布從圖中看出,包括2個(gè)電源腳(Vcc,GND)、2個(gè)時(shí)鐘腳(XTAL1,XTAL2)和32個(gè)通用IO腳。我們選用的STC單片機(jī)內(nèi)部集成了復(fù)位電路,所以沒(méi)有復(fù)位腳。32個(gè)通用IO腳又分成4組,分別叫做P0、P1、P2和P3。因?yàn)樗膫€(gè)口都可以當(dāng)做普通的輸入輸出端,所以英文叫Port,國(guó)
8、人簡(jiǎn)稱為P口。P3還有一些特殊功能。如P3.0和P3.1又是 通訊口 ,P3.2和P3.3同時(shí)是 外中斷 ,P3.4和P3.5又是 定時(shí)器 。特別地,STC單片機(jī)的P1口還可以當(dāng)做 ADC 用來(lái)測(cè)量端口的直流電壓。3.2 時(shí)鐘振蕩電路設(shè)計(jì)因?yàn)閱纹瑱C(jī)18和19腳內(nèi)部有一個(gè)振蕩放大電路,所以在18和19腳之間外接一個(gè)石英晶體就可以產(chǎn)生時(shí)鐘振蕩。振蕩頻率由石英晶體的額定頻率決定,一般采用12MH。但是,為了設(shè)置精確的通訊波特率,我們選擇 11.0592 MHZ的晶振。為了確??煽繂⒄?,再外加兩個(gè) 33 pf的接地電容。圖5 晶體振蕩電路3.3 復(fù)位電路一般的單片機(jī)需要外接電阻和電容構(gòu)成復(fù)位電路,但是
9、STC單片機(jī)內(nèi)部已經(jīng)集成了復(fù)位電路,可以不用。為了增強(qiáng)可靠性,在芯片外加一個(gè)RC電路構(gòu)成復(fù)位電路也可以。3.4 鍵盤(pán)電路設(shè)計(jì) 采用獨(dú)立式按鍵設(shè)計(jì)四個(gè)按鈕,都各自獨(dú)占一根IO線,但是采用插接件與最小系統(tǒng)連接。 圖6 鍵盤(pán)電路3.5 顯示接口設(shè)計(jì)本系統(tǒng)打算采用四聯(lián)共陽(yáng)LED數(shù)碼管。3.5.1 四聯(lián)LED數(shù)碼管的結(jié)構(gòu)特征 四聯(lián)共陽(yáng)LED數(shù)碼管包含四個(gè)數(shù)碼管,每個(gè)數(shù)碼管包括7段數(shù)字,加小數(shù)點(diǎn)共8段,簡(jiǎn)稱8段數(shù)碼管。 其內(nèi)部電路如圖7所示,每個(gè)數(shù)碼管都有8個(gè)LED發(fā)光二極管管,每個(gè)二極管的N極作為1個(gè)段,8個(gè)二極管的P極連在一起,作為公共端。四個(gè)數(shù)碼管的所有相同的段都并接在一起,每個(gè)數(shù)字的公共端單獨(dú)引出
10、,共8個(gè)段和4個(gè)位,引出12根線。圖7 四聯(lián)數(shù)碼管及其內(nèi)部電路3.5.2 四聯(lián)LED數(shù)碼管的引腳測(cè)量采用數(shù)字萬(wàn)用表的二極管測(cè)量檔,任意測(cè)量2個(gè)腳,看到燈亮為一個(gè)LED發(fā)光管,此時(shí)紅表筆所接的為陽(yáng)極,黑表筆為陰極。紅表筆測(cè)量的陽(yáng)極固定不動(dòng),用黑表筆探索出所有的陰極,并在草圖上記下8個(gè)段的名稱(a、b、c、d、e、f、g、h);然后再固定黑表筆在任何一個(gè)陰極不動(dòng),用紅表筆探索剩下的四個(gè)陽(yáng)極,同時(shí)觀測(cè)陽(yáng)極所代表的位數(shù)(分別是個(gè)、十、百、千)。測(cè)量結(jié)果如圖8所示。 圖8 3.6.3 LED數(shù)碼管的驅(qū)動(dòng)電路根據(jù)LED數(shù)碼管的結(jié)構(gòu)分析,可以采用一個(gè)P口的8個(gè)輸出端驅(qū)動(dòng)段碼,我們選擇P0。另外選擇P2口的低
11、四位控制數(shù)碼管的4個(gè)位選。為了便于大家理解,教材上按照8+4的方式設(shè)計(jì)電路,如下圖所示:上圖用P0口驅(qū)動(dòng)段碼,P2口的低四位驅(qū)動(dòng)位碼。其顯示規(guī)律非常容易推導(dǎo)??墒?,實(shí)際上LED插頭是6+6的,為了方便插頭,并簡(jiǎn)化PCB電路設(shè)計(jì),按照就近原則設(shè)計(jì)電路圖如下:由于沒(méi)有按照教材的規(guī)律,數(shù)字碼表必須重新計(jì)算。3.7 傳感器接口設(shè)計(jì) 有許多傳感器輸出的信號(hào)為05V的直流電壓,所以需要與ADC端口連接,因?yàn)镾TC單片機(jī)的P1口同時(shí)具備ADC的功能,所以設(shè)計(jì)傳感器測(cè)量接口如下。 有部分傳感器輸出的是脈沖信號(hào),我們需測(cè)量脈沖信號(hào)的頻率,為此需將信號(hào)接入T0或T1。圖中Freq表示頻率,采用網(wǎng)絡(luò)標(biāo)簽的方式接到單
12、片機(jī)的T0口。 3.8 通訊接口兼ISP下載端口 STC單片機(jī)是采用通訊接口來(lái)下載程序的,無(wú)論項(xiàng)目是否需要通訊功能,都要設(shè)計(jì)通訊接口。按芯片資料得知,P3.0和P3.1的特殊功能就是通訊,分別為RX和TX,加上GND和供電的Vcc,設(shè)計(jì)通訊接口如下:上圖中的通訊接口包括Vcc、Rxd、Txd和GND四根線。注意,Vcc是為了利用USB對(duì)單片機(jī)供電。4 項(xiàng)目實(shí)施 41繪制原理圖和PCB圖根據(jù)上述分析,某同學(xué)設(shè)計(jì)的最小系統(tǒng)電路原理圖和PCB如下圖所示。 注意:1)標(biāo)注作品名和作者名,2)盡量采用貼片元件或者改進(jìn)的貼片,3)插座盡量靠近邊沿 另一位同學(xué)采用更加簡(jiǎn)易的單片機(jī)系統(tǒng)設(shè)計(jì)了一個(gè)自動(dòng)檢測(cè)系統(tǒng)如
13、下圖所示,該電路省略了電源電路,可以采用USB供電;因?yàn)槭÷粤巳龢O管驅(qū)動(dòng),數(shù)碼管亮度有限,需要設(shè)置強(qiáng)上拉。 4.2電路焊接和安裝實(shí)際制作時(shí),考慮到小元件難以焊接,一般是先焊接小元件,然后安裝體積大的元件,順序如下: 先焊接貼片電阻、電容、三極管、指示燈和晶振; 后焊接DIP40和輸入輸出插座; 最后安裝芯片。4.3硬件調(diào)試 焊接好的電路可能會(huì)有短路和虛焊,首先要排除短路和虛焊,然后再通電測(cè)試,可按以下幾步開(kāi)展調(diào)試: 短路測(cè)試。先測(cè)量 Vcc 與 GND 之間是否有顯著的短路,如有短路就必須排除短路,才能插電源。 否則容易導(dǎo)致電腦的USB供電燒壞;然后還要測(cè)量 線 與 線 之間是否短路。 通路測(cè)
14、試。參照原理圖測(cè)量 芯片引腳 與 插接件 之間是否通電,如果有斷路,可能導(dǎo)致電路 不能正常工作,但是一般不會(huì)燒壞芯片。 電源測(cè)試。先不插芯片,插上電源、測(cè)量所有的Vcc是否為+5V。如果電源不正?;蛘叻唇?,可能會(huì)燒壞單片機(jī)芯片。要檢查 單片機(jī)的Vcc 與 GND 下載測(cè)試。插上芯片和ISP后通電,下載一個(gè)LED測(cè)試程序,看能否正常下載。如果不能正常下載,首先需要檢查 下載線接口 ,然后檢查 時(shí)鐘和復(fù)位 電路。如果電路沒(méi)有發(fā)現(xiàn)問(wèn)題,還是不能下載,則需要考慮是否 更換芯片 。 數(shù)碼測(cè)試。如果能下載程序,說(shuō)明單片機(jī)能正常工作,接上LED數(shù)碼管,看能否正常顯示。如果顯示不正常,說(shuō)明 顯示接口 或 數(shù)碼
15、管 有問(wèn)題(如果程序正確的話)。5總結(jié) 采用單片機(jī)設(shè)計(jì)了一個(gè)最小應(yīng)用系統(tǒng), 通過(guò)測(cè)試,該電路能正常下載和顯示。為后續(xù)的產(chǎn)品開(kāi)發(fā)奠定了硬件基礎(chǔ)。預(yù)備項(xiàng)目2數(shù)碼管段碼測(cè)試程序設(shè)計(jì)0任務(wù)和要求已知單片機(jī)與LED數(shù)碼管的顯示電路如圖1所示。只知P0口驅(qū)動(dòng)段碼,P2口驅(qū)動(dòng)位碼,不知道具體連接。為此需要設(shè)計(jì)一個(gè)段碼測(cè)試程序,用于測(cè)試數(shù)碼管的段與P0口對(duì)應(yīng)的規(guī)律。具體要求如下:1) 按照從低位到高位的順序,每次只點(diǎn)亮數(shù)碼管的1個(gè)段,顯示1秒鐘,就關(guān)閉0.5秒鐘2) 到最高位以后,熄滅3秒鐘,從新開(kāi)始下一輪循環(huán)。3) 記錄顯示規(guī)律,根據(jù)顯示規(guī)律,計(jì)算0-9的顯示碼表。 圖1.單片機(jī)與數(shù)碼管的接口電路 1.基本
16、原理1.1 程序流程經(jīng)典的單片機(jī)的程序流程圖如圖2所示。從圖中可以看出,單片機(jī)程序一般包含初始化程序、主程序和中斷程序三部分組成。根據(jù)程序所處的位置,得知:初始化程序 的特點(diǎn)是: 每次上電只能執(zhí)行一次 ;主 程 序 的特點(diǎn)是: 能夠無(wú)窮循環(huán),多次執(zhí)行都可以。中 斷 程序 的特點(diǎn)是: 沒(méi)有發(fā)生條件事件不會(huì)觸發(fā),只要滿足條件就立刻執(zhí)行的程序 。1.2 數(shù)碼管的結(jié)構(gòu)本系統(tǒng)采用的數(shù)碼管為8段共陽(yáng)數(shù)碼管。其內(nèi)部電路如下圖所示,每個(gè)數(shù)碼管都有8個(gè)LED發(fā)光二極管管,每個(gè)二極管的N極作為1個(gè)段,8個(gè)二極管的P極連在一起,作為公共端。四個(gè)數(shù)碼管的所有相同的段都并接在一起,每個(gè)數(shù)字的公共端單獨(dú)引出,共8個(gè)段和4
17、個(gè)位,引出12根線。圖3.數(shù)碼管的內(nèi)部電路1.3 驅(qū)動(dòng)位方法 從圖1可知,由于驅(qū)動(dòng)位碼的三極管為PNP,單片機(jī)輸出低電平時(shí),三極管導(dǎo)通,點(diǎn)亮對(duì)應(yīng)的1個(gè)數(shù)碼管。則驅(qū)動(dòng)一個(gè)位的方法如表1所示。表1. 數(shù)碼管位碼驅(qū)動(dòng)規(guī)律(0有效,*表示高四位為無(wú)關(guān)位,可以當(dāng)作1處理,也可以當(dāng)0)端口P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0代碼反碼更直觀個(gè)位*11100xfe十位*2百位*4千位*8從上表可以看出:點(diǎn)亮個(gè)位數(shù)碼管的指令為: P2 = ; 點(diǎn)亮十位數(shù)碼管的指令為: P2 = ; 點(diǎn)亮百位數(shù)碼管的指令為: P2 = ; 點(diǎn)亮千位數(shù)碼管的指令為: P2 = ; 根據(jù)同樣的原理可以推知
18、,4位數(shù)碼管全點(diǎn)亮的指令為:P2 = 0 ;4位數(shù)碼管全熄滅的指令為:P2 = 0xff ;1.4 驅(qū)動(dòng)某一段的方法數(shù)碼管的8個(gè)段引出8根線,直接跟單片機(jī)P0口的8個(gè)輸出端連接。要想點(diǎn)亮數(shù)碼管的某1段,就通過(guò)P0口輸出1個(gè)低電平。共有8種可能,詳細(xì)規(guī)律如表2所示。表2. 共數(shù)碼管段碼驅(qū)動(dòng)1個(gè)段的規(guī)律(低電平有效)P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0碼表反碼更直觀111111100xfe(<<0)11111101Oxfd(<<1)11111011Oxfb(<<2)11110111Oxf7(<<3)11101111Oxef
19、(<<4)11011111Oxdf(<<5)10111111Oxbf(<<6)01111111Ox7f(<<7)從上表可以看出,點(diǎn)亮最低1段的指令為:P0 = ;采用取反的方法可寫(xiě)為:P0 = ;點(diǎn)亮最高1段的指令為:P0 = ;采用取反的方法可寫(xiě)為:P0 = ;采用變量x表示任意段,則程序可以寫(xiě)為: P0 = ;1.5 驅(qū)動(dòng)LED顯示數(shù)字的一般規(guī)律如下圖所示,教材上的數(shù)碼管驅(qū)動(dòng)電路是按從低到高的順序?qū)bcdefgh連接到P0口上的,所以可以按照表3來(lái)推導(dǎo)顯示碼表。圖4 標(biāo)準(zhǔn)的數(shù)碼管與單片機(jī)接口電路表3.按照教材設(shè)計(jì)的數(shù)碼管電路的顯示規(guī)律(注意
20、:共陽(yáng)的數(shù)碼管0有效,共陰數(shù)碼管1有效)端口P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0碼表842184218421對(duì)應(yīng)段hGFEDCBA數(shù)字00x3c數(shù)字1數(shù)字2數(shù)字3數(shù)字4數(shù)字5數(shù)字6看起來(lái)顯示指令中的代碼與要顯示的數(shù)字毫無(wú)規(guī)律,對(duì)于這種情況,可定義1個(gè)1 維數(shù)組來(lái)檢索, unsigned char table10= 0xC0, , , , , , , , , 如果要顯示一個(gè)數(shù),在可以采用查表法將顯示內(nèi)容送到端口,例如:如需要顯示1, 則程序?yàn)?P0= table1 ;如需要顯示x, 則程序?yàn)?P0= ;/注意x<10.備注:因?yàn)長(zhǎng)ED的引腳并不是按a-b-c的順
21、序排列的。為了簡(jiǎn)化電路板的設(shè)計(jì),我們自己設(shè)計(jì)的LED驅(qū)動(dòng)電路采取了就近接線的方法,與教材不同,所以不能參考教材上現(xiàn)成的碼表,因此需要自己寫(xiě)一個(gè)程序來(lái)測(cè)試LED顯示規(guī)律。通過(guò)觀察顯示規(guī)律,再計(jì)算碼表。3程序設(shè)計(jì)步驟 要測(cè)試LED數(shù)碼管與單片機(jī)P0口的連接,可采用Keil設(shè)計(jì)一個(gè)C程序,控制單片機(jī)的P2口全打開(kāi),同時(shí)在P0口按從低到高的順序輸出低電平,就可以通過(guò)觀測(cè)數(shù)碼管的顯示規(guī)律來(lái)確定數(shù)碼管的連接。3.1 建立工程 編寫(xiě)程序代碼之前一定要做好以下幾件事情。 1)新建文件夾。新建一個(gè)用于存放整個(gè)項(xiàng)目文件的文件夾,可以用中文 段碼測(cè)試程序 。同時(shí)在項(xiàng)目文件夾內(nèi)部添加三個(gè)文件夾,分別是 output
22、、 List 和 source 。然后將源程序放在 source ;將編譯器自動(dòng)產(chǎn)生的列表文件放在 List ;將編譯器產(chǎn)生的目標(biāo)代碼存放在 output 。 2)創(chuàng)建工程。打開(kāi)Keil,創(chuàng)建1個(gè)工程,保存在新建的“段碼測(cè)試程序”文件夾,項(xiàng)目名稱為 seg_test。 3)創(chuàng)建文件。新建1個(gè)文件,一般來(lái)說(shuō),第一個(gè)主文件保存時(shí)最好命名為 main .c 4) 將main.c添加到工程中。3.2繪制程序流程,構(gòu)建程序框架本程序僅用于測(cè)試P0口與數(shù)碼管的連接關(guān)系,沒(méi)有初始化,也沒(méi)有中斷程序。根據(jù)任務(wù)要求,設(shè)計(jì)主程序流程和對(duì)應(yīng)的程序代碼如下圖所示:圖5 程序流程和對(duì)應(yīng)的代碼根基單片機(jī)C語(yǔ)言程序設(shè)計(jì)的基
23、礎(chǔ),代碼主要包含以下內(nèi)容:1) main函數(shù)main函數(shù)就是指主函數(shù)。主函數(shù)的結(jié)構(gòu)可以與程序流程一一對(duì)應(yīng)。主函數(shù)具有以下特點(diǎn):a) 每一個(gè)單片機(jī)項(xiàng)目中,有且只有1個(gè)主函數(shù)。b) 主函數(shù)可以調(diào)用別的程序,但是任何程序不能調(diào)用主函數(shù)。c) 主函數(shù)是沒(méi)有參數(shù)也沒(méi)有返回值,d) 主函數(shù)是所有程序的開(kāi)始,也就是說(shuō),初始化程序必須在main函數(shù)中首先調(diào)用e) 主函數(shù)中必須有一個(gè)無(wú)條件的循環(huán),也只能有一個(gè)無(wú)條件的循環(huán)。用于調(diào)用主程序。根據(jù)模塊化程序設(shè)計(jì)的基本原則,主程序只能調(diào)用子函數(shù),不可以在主程序中直接寫(xiě)代碼。要想實(shí)現(xiàn)具體的功能,可以在無(wú)窮循環(huán)內(nèi)調(diào)用相關(guān)的子函數(shù)。2) 程序標(biāo)簽。這部分代碼是給程序員自己看
24、的,沒(méi)有運(yùn)行代碼,可以不寫(xiě),但是優(yōu)秀的程序員一定會(huì)認(rèn)真注解,舉例如下3) 包含頭文件。頭文件詳細(xì)描述了51單片機(jī)的硬件地址,我們不需要記住,只要包含就可以。Keil中沒(méi)有STC單片機(jī)的頭文件,可以借用兼容的51單片機(jī)頭文件代替, 也可以從STC的官方網(wǎng)站下載一個(gè)STC12C5A.H。包含頭文件的代碼如下: #include <stc12c5a.h> /包含STC單片機(jī)的頭文件4) 變量定義和函數(shù)定義。(開(kāi)始可以空著,什么時(shí)候需要,什么時(shí)候補(bǔ)充)編譯程序會(huì)發(fā)現(xiàn),在main函數(shù)中調(diào)用了一個(gè)不存在的子函數(shù),編譯器找不到函數(shù)原型,會(huì)發(fā)出錯(cuò)誤提示: 表示: 在main函數(shù)中調(diào)用的任何子函數(shù),
25、都需要在main函數(shù)之前定義一個(gè)子函數(shù)。5) 補(bǔ)充子函數(shù)定義函數(shù)定義一般在宏定義之后和main 函數(shù)之前,補(bǔ)充一個(gè)空白的segment_test()子函數(shù)之后,完整的代碼如下:到此為止,程序框架已經(jīng)建成。框架程序完成以后要編譯是否出錯(cuò),編譯測(cè)試應(yīng)該是0錯(cuò)誤,0警告。但是框架程序沒(méi)有任何功能,不用下載到單片機(jī)。3.3 繪制子程序的流程,編寫(xiě)相關(guān)的函數(shù)33.1 編寫(xiě)segment_test函數(shù)子函數(shù)segment_test()的作用是逐個(gè)循環(huán)點(diǎn)亮數(shù)碼管的段。其實(shí)就是控制P0口循環(huán)輸出低電平。為了同時(shí)測(cè)量所有的數(shù)碼管,P2口輸出低電平。其程序流程和程序代碼如下:void segment_test(v
26、oid)由于調(diào)用了一個(gè)不存在的函數(shù),編譯時(shí)會(huì)發(fā)現(xiàn)錯(cuò)誤提示: 為此還在還需要在 segment test(void) 之前要定義并編寫(xiě)一個(gè)延時(shí)子函數(shù)。3.32 編寫(xiě)delay函數(shù)如果單片機(jī)采用12M的晶振,則每個(gè)機(jī)器周期需要的時(shí)間是 1us 。也就是說(shuō)每運(yùn)行一個(gè)簡(jiǎn)單的指令需要的時(shí)間是 1us 。為此我們可以用運(yùn)行空指令的方法延時(shí)。為了延時(shí)1ms,可以設(shè)計(jì)一個(gè)1000次的循環(huán),循環(huán)體內(nèi)執(zhí)行空指令。為了使延時(shí)參數(shù)可變,可以設(shè)計(jì)一個(gè)帶形式參數(shù)的子函數(shù)。調(diào)用時(shí)加入實(shí)際參數(shù),可以改變延時(shí)的長(zhǎng)度。設(shè)計(jì)代碼如下:3.4 編譯和調(diào)試程序整個(gè)項(xiàng)目的程序代碼如下(程序前的注解略):編譯程序,編譯器會(huì)及時(shí)提示錯(cuò)誤所在
27、,雙擊第一個(gè)錯(cuò)誤提示,光標(biāo)會(huì)自動(dòng)定位。常見(jiàn)的錯(cuò)誤有:表示 括號(hào)附近有語(yǔ)法錯(cuò)誤 。4. 試驗(yàn)觀測(cè)數(shù)碼管顯示規(guī)律將程序下載到單片機(jī),觀測(cè)顯示規(guī)律,將顯示規(guī)律的代碼填入下表,按照8421碼的規(guī)律計(jì)算碼表(特別注意:低電平有效,就是0亮燈,1滅燈.)表3. 自己設(shè)計(jì)的LED驅(qū)動(dòng)電路段碼表P0口P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0碼表BCD碼84218421顯示規(guī)律數(shù)字“0”數(shù)字“1”數(shù)字“2”數(shù)字“3”數(shù)字“4”數(shù)字“5”數(shù)字“6”數(shù)字“7”數(shù)字“8”數(shù)字“9”根據(jù)上表,可將碼表用C語(yǔ)言的數(shù)組表示為L(zhǎng)ed_table= , , , , , , , , , 6. 總結(jié)本項(xiàng)目分
28、析了單片機(jī)與4位數(shù)碼管接口電路,設(shè)計(jì)了1個(gè)用于8段LED數(shù)碼管的測(cè)試程序。該單片機(jī)程序控制P0口按從低到高的規(guī)律逐一輸出低電平,使得數(shù)碼管的段逐一點(diǎn)亮。觀測(cè)LED數(shù)碼管的顯示規(guī)律,并根據(jù)顯示規(guī)律按16進(jìn)制,計(jì)算出出數(shù)碼管的顯示碼表。以后在應(yīng)用程序中,我們就可以采用查表的方法顯示數(shù)字了。本程序只能測(cè)試段碼,不知道位碼的規(guī)律,還需要設(shè)計(jì)一個(gè)位碼測(cè)試程序。 簡(jiǎn)易參照本程序設(shè)計(jì)一個(gè)8子循環(huán)的程序,按從低位到高位的順序循環(huán)點(diǎn)亮數(shù)碼管的1位。找出顯示規(guī)律,為設(shè)計(jì)數(shù)碼管顯示程序奠定基礎(chǔ)。課堂練習(xí): 練習(xí)段碼程序的設(shè)計(jì),要求在5分鐘內(nèi)完成。編寫(xiě)程序時(shí)務(wù)必養(yǎng)成以下良好習(xí)慣:1) 程序正文之前一定要加標(biāo)簽注解。說(shuō)
29、明程序名、程序功能作用、程序端口設(shè)置等。2) 變量定義放在宏定義之后,函數(shù)定義之前。3) 被調(diào)用的子程序(函數(shù))必須在主程序(函數(shù))之前定義,這樣就可以無(wú)需額外聲明。4) 變量和函數(shù)名稱都一定要采用英文命名,最好采用兩段式命名,表達(dá)真實(shí)的目的,如 定時(shí)器初始化程序定義為 timer_init(void);5) 每一行指令都要100%的注釋,便于多年以后你自己可以看懂程序。6) 嚴(yán)格按照程序流程編寫(xiě)程序代碼,寫(xiě)出的程序不能與程序流程無(wú)關(guān)。預(yù)備項(xiàng)目3數(shù)字碼表測(cè)試程序設(shè)計(jì)0任務(wù)和要求通過(guò)前面設(shè)計(jì)的段碼測(cè)試程序測(cè)試了數(shù)碼管的顯示規(guī)律,并根據(jù)顯示規(guī)律計(jì)算出數(shù)碼管的碼表。為了防止計(jì)算過(guò)程出錯(cuò)。還需要設(shè)計(jì)一
30、個(gè)數(shù)字碼表測(cè)試程序。具體要求如下:1) 按照從0到9的順序,逐一顯示數(shù)字。2) 顯示1秒鐘,熄滅0.5秒鐘。到9以后,熄滅3秒鐘,從新開(kāi)始下一輪循環(huán)。3) 觀察數(shù)字顯示是否正確,根據(jù)顯示結(jié)果修改碼表1.程序設(shè)計(jì)思路 本程序與段碼測(cè)試程序非常相似,可以采用復(fù)制前期項(xiàng)目再適當(dāng)修改的方法快速設(shè)計(jì)程序??砂慈缦虏襟E: 第1步:復(fù)制項(xiàng)目文件夾。在我的電腦中,找到段碼測(cè)試程序的文件夾,復(fù)制整個(gè)文件夾。然后將復(fù)制的文件夾重命名為 碼表測(cè)試程序 ,項(xiàng)目名稱修改為 碼表測(cè)試程序 ,同時(shí)刪除所有其它文件。再打開(kāi)項(xiàng)目,增加程序功能注解。 第2步:修改子函數(shù)的名稱首先在主函數(shù)中修改調(diào)用函數(shù)的名稱。將segment_t
31、est( )修改為digit_test( )。然后修改子函數(shù)的定義,將segment_test修改為digit_test。至此,還沒(méi)有實(shí)質(zhì)性的修改,但是也要編譯程序,看看是否有錯(cuò)。 第3步:修改子函數(shù)的內(nèi)容根據(jù)程序的任務(wù),需要循環(huán)顯示0到9的數(shù)字。首先,增加碼表定義,代碼為: unsigned char table= ;然后,修改子函數(shù)循環(huán)的長(zhǎng)度為10,代碼為 for ( )最后,修改送段碼這一行為查表輸出段碼。代碼為:P0 = ;修改后的數(shù)碼測(cè)試程序的子函數(shù)代碼如下: 3. 觀測(cè)顯示結(jié)果 將程序編譯后下載到單片機(jī),觀測(cè)數(shù)字顯示是否正確。4. 總結(jié)本項(xiàng)目在“段碼測(cè)試程序”的基礎(chǔ)上,設(shè)計(jì)了1個(gè)用
32、于測(cè)試數(shù)碼管數(shù)字碼表的程序。該程序控制P2口將數(shù)碼管的四個(gè)位全部點(diǎn)亮,并按從0到9的規(guī)律逐一查表將顯示內(nèi)容送到P0口,使得數(shù)碼管顯示從0-9的數(shù)字。測(cè)試結(jié)果表明,我們計(jì)算出出數(shù)碼管的顯示碼表完全正確。課堂練習(xí) 請(qǐng)?jiān)凇岸未a測(cè)試程序”的基礎(chǔ)上,設(shè)計(jì)1個(gè)用于測(cè)試數(shù)碼管數(shù)字碼表的程序(要求3分鐘內(nèi)完成)。預(yù)備項(xiàng)目4單片機(jī)數(shù)字鐘程序設(shè)計(jì)0任務(wù)和要求為了練習(xí)程序設(shè)計(jì)的基本思路,特別是LED顯示程序設(shè)計(jì)。請(qǐng)采用現(xiàn)有的單片機(jī)硬件系統(tǒng)設(shè)計(jì)一個(gè)數(shù)字鐘,基本要求如下:1) 顯示小時(shí)和分鐘,顯示格式為HH:MM,2) 秒鐘不顯示,但是每秒小數(shù)點(diǎn)閃爍1程序流程圖設(shè)計(jì)單片機(jī)系統(tǒng)是一個(gè)小巧靈活的計(jì)算機(jī)系統(tǒng),你可以根據(jù)自己的
33、需要設(shè)計(jì)程序,想讓它干什么它就會(huì)成為你想要的東西。設(shè)計(jì)程序一定要堅(jiān)持 先繪制程序流程,后寫(xiě)程序代碼 的原則。繪制程序流程的步驟如下:1.1劃分程序模塊 根據(jù)電路圖和數(shù)字鐘的要求,本程序分為以下幾個(gè)模塊 定時(shí)器初始化:設(shè)定timer0工作在定時(shí)方式1,并且50ms中斷。 拆字程序:將小時(shí)和分鐘拆開(kāi),單獨(dú)查表后送給顯示緩沖區(qū)。 顯示程序:驅(qū)動(dòng)四聯(lián)數(shù)碼管掃描顯示 鍵盤(pán)程序:用于調(diào)節(jié)小時(shí)和分鐘 計(jì)時(shí)程序:每50ms計(jì)算一次時(shí)間, 20次以后算1秒鐘,每60秒加1分鐘,每60分鐘加1小時(shí),每24小時(shí)歸零。1.2分析程序模塊的特點(diǎn)根據(jù)程序模塊的作用,可知定時(shí)器初始化程序只運(yùn)行一次,可作為 初始化程序 ;拆
34、字程序、顯示程序和、鍵盤(pán)程序都可循環(huán)多次運(yùn)行,應(yīng)放在 主程序 ;計(jì)時(shí)程序:50ms自動(dòng)中斷后自動(dòng)計(jì)算時(shí)間,可作為 。1.3繪制程序流程圖根據(jù)上述分析,繪制程序流程圖如下:圖4.1 數(shù)字鐘的程序流程圖 為了節(jié)約版面,中斷程序中的計(jì)算時(shí)間模塊沒(méi)有列出詳細(xì)的算法。3.2創(chuàng)建項(xiàng)目和C程序 第1步:創(chuàng)建新項(xiàng)目,項(xiàng)目名保存為 數(shù)字鐘 。 第2步:創(chuàng)建新文件,文件名保存為 main.c 。 第3步:將新的C程序加入新項(xiàng)目。 提示:如果之前有數(shù)字碼表測(cè)試程序,就復(fù)制整個(gè)項(xiàng)目,在原項(xiàng)目的基礎(chǔ)上修改,可節(jié)省很多時(shí)間哦。3.3 編寫(xiě)程序構(gòu)架 根據(jù)程序流程圖,寫(xiě)出初始化程序和主程序的框架代碼如下: 老師提示:每寫(xiě)一段
35、程序都一定要編譯成功。達(dá)到完全沒(méi)有錯(cuò)誤和警告。編譯過(guò)程可能會(huì)出現(xiàn)很多錯(cuò)誤代碼,我們總是從第一個(gè)錯(cuò)誤開(kāi)始逐一排查。記得一定要看懂英文哦.調(diào)試成功以后一定會(huì)顯示如下代碼:3.4 編寫(xiě)硬件驅(qū)動(dòng)程序3.4.1定時(shí)器驅(qū)動(dòng)程序定時(shí)器驅(qū)動(dòng)程序包括程序主體timer.C和程序頭文件timer.h兩部分。在程序主體timer.c中應(yīng)包含定時(shí)器初始化和定時(shí)器中斷程序兩部分。 1)定時(shí)器初始化程序根據(jù)本項(xiàng)目的要求,可設(shè)定timer0工作在方式1,50ms中斷。根據(jù)單片機(jī)基本原理可知,需要對(duì)TMOD、THO、TL0三個(gè)寄存器初始化,還要對(duì)ET0、TR0、EA三個(gè)位進(jìn)行初始化。三個(gè)寄存器的代碼可以自己手工計(jì)算,也可以采
36、用單片機(jī)小精靈自動(dòng)設(shè)計(jì)程序代碼。TMOD寄存器的8個(gè)位所表示的意思一般人記不住,可上網(wǎng)查詢,, 根據(jù)計(jì)算,可寫(xiě)出定時(shí)器初始化程序如下:根據(jù)下圖的含義,填寫(xiě)TMOD每一個(gè)位的值:將代碼換算為16進(jìn)制。可得TMOD= 0x01;定時(shí)器工作在方式1,溢出上限為 65535 。定時(shí)器最小單位是1uS, 因此定時(shí)器初值= 15536 換算為16進(jìn)制,可知TH0= 0x3C,TL0= 0xB0 ,2)定時(shí)中斷程序定時(shí)器timer0利用單片機(jī)內(nèi)部時(shí)鐘自動(dòng)計(jì)數(shù),每到50ms就自動(dòng)中斷,因此中斷程序需要累加20次才算1秒。每60秒算1分鐘,每60分鐘算1小時(shí),每24小時(shí)循環(huán)歸零。實(shí)現(xiàn)上述算法的程序流程如下圖所示
37、。3.4.2拆字程序拆字程序的主要任務(wù)是將所有的顯示內(nèi)容拆分成獨(dú)立的四個(gè)位,并查表轉(zhuǎn)換成數(shù)碼管的顯示代碼,存放在顯示緩沖區(qū)內(nèi)。等待顯示程序調(diào)用。拆字子程序的程序流程如下圖所示,右邊是C51程序代碼。3.4.3顯示程序LED數(shù)碼管的顯示要采用動(dòng)態(tài)顯示。顯示程序的作用就是將顯示緩沖區(qū)中的四個(gè)內(nèi)容(其實(shí)就是數(shù)組中的四個(gè)變量)輪流輸送到LED數(shù)碼管,并同時(shí)驅(qū)動(dòng)對(duì)應(yīng)的位碼。每點(diǎn)亮一個(gè)數(shù)碼管都延時(shí)1ms,雖然是輪流點(diǎn)亮4個(gè)數(shù)碼管,但是利用人的視覺(jué)暫留效應(yīng),看起來(lái)就像同時(shí)點(diǎn)亮四個(gè)數(shù)碼管一樣。設(shè)計(jì)程序時(shí)可以按順序和循環(huán)兩種方法,下圖是順序結(jié)構(gòu)設(shè)計(jì)的顯示程序流程圖。課堂作業(yè):順序結(jié)構(gòu)的程序重復(fù)代碼太多,建議換成
38、循環(huán)結(jié)構(gòu)。本程序與硬件直接有關(guān),可將程序編譯后下載到單片機(jī)內(nèi)部,并點(diǎn)亮LED數(shù)碼管。4程序調(diào)試程序調(diào)試也要堅(jiān)持“走一步看一步”的原則,每完成一小段程序,就要下載程序到單片機(jī)通電運(yùn)行,觀測(cè)程序運(yùn)行效果。千萬(wàn)不能一口氣寫(xiě)完所有的代碼,然后在程序的大海中去找錯(cuò)誤。程序調(diào)試包括以下兩個(gè)部分。4.1 語(yǔ)法排錯(cuò)編寫(xiě)好的C語(yǔ)言代碼還需要通過(guò)編譯軟件轉(zhuǎn)換成機(jī)器可以識(shí)別的EXE文件或BIN文件。像Keil51等開(kāi)發(fā)工具都提供了編譯的功能,按下編譯按鈕后,軟件首先會(huì)按照C語(yǔ)言的語(yǔ)法檢測(cè)程序中的錯(cuò)誤,并自動(dòng)定位到錯(cuò)誤所在的行,同時(shí)用英文提示錯(cuò)誤的原因。對(duì)錯(cuò)誤逐個(gè)修改后,就可以生產(chǎn)可執(zhí)行的BIN代碼了,但是請(qǐng)注意:語(yǔ)
39、法錯(cuò)誤不表示邏輯沒(méi)有錯(cuò)誤。程序員還需要反復(fù)調(diào)試,發(fā)現(xiàn)程序中邏輯錯(cuò)誤4.2 程序邏輯調(diào)試調(diào)試程序的邏輯時(shí),要清楚程序的“數(shù)據(jù)流”,故意在程序中用特殊的數(shù)據(jù)代替變量,用于觀測(cè)效果。本程序的數(shù)據(jù)流向如下圖所示:根據(jù)數(shù)據(jù)流,設(shè)計(jì)程序調(diào)試步驟如下: 1)調(diào)試顯示程序。顯示程序的作用是將顯示緩沖去的數(shù)據(jù)動(dòng)態(tài)顯示到數(shù)碼管上。顯示緩沖區(qū)的數(shù)據(jù)來(lái)源于拆字程序,為了單獨(dú)調(diào)試顯示程序,可屏蔽拆字程序,給定一個(gè)固定的顯示內(nèi)容(如1234)去測(cè)試顯示程序的效果。 2)調(diào)試拆字程序。拆字程序的作用是將變量hour和minute拆開(kāi)輸送到disp_buffer4??梢栽O(shè)定2個(gè)固定的變量,如hour=12,minute=34
40、.然后觀測(cè)顯示效果。 3)調(diào)試中斷程序。觀測(cè)程序是否進(jìn)入中斷,也可以在中斷程序中,故意按自己的規(guī)律改變變量。如每中斷一次故意增加minute,或者h(yuǎn)our。也可以在秒程序處,故意調(diào)整minute。然程序的變化更顯著。5 時(shí)鐘測(cè)試 為了檢驗(yàn)時(shí)鐘程序的準(zhǔn)確度,將程序下載到單片機(jī)后,運(yùn)行一天,與電腦時(shí)鐘對(duì)比,觀測(cè)時(shí)間偏差,計(jì)算絕對(duì)誤差和相對(duì)誤差。6總結(jié) 本項(xiàng)目采用模塊化的程序設(shè)計(jì)了一個(gè)數(shù)字鐘。首先根據(jù)功能不同劃分了程序模塊,分析了每個(gè)模塊的特點(diǎn),繪制了程序流程圖。然后根據(jù)程序流程圖構(gòu)建了程序框架。第二,根據(jù)每個(gè)定時(shí)器子程序的要求,計(jì)算了定時(shí)器相關(guān)寄存器的初始值,并寫(xiě)出了定時(shí)器初始化程序的C51代碼。
41、第三,根據(jù)拆字程序、顯示程序和鍵盤(pán)程序的功能,繪制了子程序的程序流程,并按程序流程寫(xiě)出了對(duì)應(yīng)的C51代碼。第四,根據(jù)時(shí)鐘程序的基本計(jì)算規(guī)律,設(shè)計(jì)了定時(shí)器中斷程序的程序流程,并寫(xiě)出了C51程序代碼。最后,將時(shí)鐘運(yùn)行一天,測(cè)試了時(shí)鐘程序的誤差,并根據(jù)誤差修正了程序,提供了時(shí)鐘程序的精度。但是,由于單片機(jī)的定時(shí)準(zhǔn)確性較差,導(dǎo)致誤差較大,建議采用實(shí)時(shí)時(shí)鐘芯片DS1032來(lái)提高計(jì)時(shí)的精度。課堂練習(xí):編寫(xiě)本課的時(shí)鐘程序(15分鐘內(nèi)完成)。課后練習(xí):(1) 秒更新的時(shí)候閃爍小數(shù)點(diǎn)。 (2) 用按鍵調(diào)節(jié)時(shí)鐘,調(diào)小時(shí)的時(shí)候,小時(shí)應(yīng)該要閃爍;調(diào)節(jié)分鐘的時(shí)候,分鐘應(yīng)該閃爍。(3) 設(shè)定鬧鐘,并且根據(jù)需要,發(fā)出不同聲
42、音。預(yù)備項(xiàng)目5 獨(dú)立式鍵盤(pán)設(shè)計(jì)0設(shè)計(jì)任務(wù)和要求當(dāng)前很多電子產(chǎn)品都采用單片微型計(jì)算機(jī)設(shè)計(jì),幾乎都需要按鍵,如電磁爐需要按鍵來(lái)“開(kāi)關(guān)電源”,用“+”“-”鍵來(lái)調(diào)節(jié)炒菜的溫度,用“功能鍵”來(lái)切換工作模式。請(qǐng)同學(xué)們?cè)O(shè)計(jì)一個(gè)4個(gè)按鍵的小鍵盤(pán),用于人與機(jī)器對(duì)話。如“+”“-”“功能切換”“確定”。1方案論證 常用的鍵盤(pán)有以下三種方案1 獨(dú)立式鍵盤(pán)。獨(dú)立式按鍵的每一個(gè)按鍵都獨(dú)占單片機(jī)的一根通用IO線,只有當(dāng)按鍵較少的時(shí)候,采用獨(dú)立式按鍵設(shè)計(jì)鍵盤(pán)。方案2 行列掃描式鍵盤(pán)。當(dāng)按鍵較多時(shí),單片機(jī)的IO口有限,不能采用獨(dú)立式鍵盤(pán)設(shè)計(jì)??捎眯辛袙呙枋芥I盤(pán)。如4*4的鍵盤(pán)可以有16個(gè)按鍵。8*8的掃描鍵盤(pán)可以有64個(gè)按
43、鍵。方案3 ADC鍵盤(pán)。每個(gè)按鍵配置不同的分壓電阻,采用ADC電路測(cè)量按鍵輸出的電壓來(lái)判斷按鍵。該方案只占據(jù)1根IO線。 綜上所述,當(dāng)鍵盤(pán)的按鍵比較少時(shí),可以采用獨(dú)立式按鍵,每個(gè)按鍵接單片機(jī)的一個(gè)IO口。該方案的電路和程序設(shè)計(jì)都比較簡(jiǎn)單。1 獨(dú)立式鍵盤(pán)原理圖 如圖1左圖所示的是四個(gè)按鈕的獨(dú)立式原理圖。圖1.獨(dú)立式按鍵及其與單片機(jī)的接口從圖中可以看出,K1、K2、K3、K4都各自獨(dú)占單片機(jī)的一根IO線。理論上按鍵開(kāi)關(guān)可以選擇任何一個(gè)端口。但是最好四根線都在同一個(gè)P口。上圖中四個(gè)按鍵分別接到 、 、 、 。同一個(gè)P口的還剩余4個(gè)IO線沒(méi)有與接任線連接,空著也無(wú)妨。2 獨(dú)立式鍵盤(pán)的工作原理沒(méi)有按鍵的
44、時(shí)候,對(duì)應(yīng)的線全部為高電平;按下相應(yīng)的鍵,對(duì)應(yīng)的線就為低電平,其它的線仍為高電平。不考慮兩個(gè)按鍵同時(shí)按下的情況,鍵值計(jì)算如下表:表1 鍵值表(請(qǐng)同學(xué)們填充完整)端口P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0鍵值(H)BCD84218421·K10無(wú)關(guān)位無(wú)關(guān)位無(wú)關(guān)位無(wú)關(guān)位K20無(wú)關(guān)位無(wú)關(guān)位無(wú)關(guān)位無(wú)關(guān)位K30無(wú)關(guān)位無(wú)關(guān)位無(wú)關(guān)位無(wú)關(guān)位K40無(wú)關(guān)位無(wú)關(guān)位無(wú)關(guān)位無(wú)關(guān)位(提示:每個(gè)按鍵都是2進(jìn)制代碼,對(duì)應(yīng)的四個(gè)IO線按8421碼組成一個(gè)16進(jìn)制代碼,沒(méi)有接線的線是無(wú)關(guān)的位,可以為0,也可以為1)3 獨(dú)立式鍵盤(pán)的PCB采用altium designer 設(shè)計(jì)的PCB如圖2所示
45、。 圖2. 獨(dú)立式按鍵的PCB電路繪圖時(shí)注意以下要求1) 為了方便手工制版,所有線路都布在同一層??梢圆荚陧攲踊蛘叩讓?) 為了減少打孔的麻煩,所以元件采用貼片封裝。如果元件是直插的,也修改封裝為貼片樣式。3) 因?yàn)槭止ぶ瓢鏇](méi)有絲印層,可以將一些字符修改到頂層。增加一些中文提示。在GND等重要線的旁邊加標(biāo)注。4) 學(xué)會(huì)拼版。這樣小的一個(gè)單元電路,不能單獨(dú)去曬感光板。為了節(jié)省材料,學(xué)會(huì)拼版。一塊感光板可以供10個(gè)人或者20人用。4.鍵盤(pán)調(diào)試方法。1)先測(cè)試按鍵的通斷。用萬(wàn)用表測(cè)量按鍵輸出線與GND之間的電阻。沒(méi)有按鍵時(shí),電阻無(wú)窮大。按鍵時(shí),電阻應(yīng)為0。2)測(cè)量線與線之間是否短路。用萬(wàn)用表測(cè)量相鄰
46、輸出線之間的電阻,應(yīng)為無(wú)窮大。3)試用。將按鍵插到單片機(jī)應(yīng)用系統(tǒng)上(如單片機(jī)設(shè)計(jì)的時(shí)鐘或曝光機(jī)等),每個(gè)按鍵的功能都能響應(yīng),如調(diào)節(jié)分鐘和秒鐘。6 結(jié)論 采用四個(gè)微動(dòng)按鈕設(shè)計(jì)了一個(gè)獨(dú)立式鍵盤(pán),通過(guò)測(cè)試,四個(gè)按鍵都能獨(dú)立控制。預(yù)備項(xiàng)目6 鍵盤(pán)驅(qū)動(dòng)程序設(shè)計(jì)0 任務(wù)和要求 已知獨(dú)立式按鍵電路圖如下,四個(gè)按鈕各自獨(dú)占一根IO線,采用插接件與最小系統(tǒng)連接。請(qǐng)?jiān)O(shè)計(jì)鍵盤(pán)電路的程序。1 基本原理要在讀鍵盤(pán)的時(shí)候屏蔽無(wú)關(guān)的低4位,C51的代碼為: key_value = P3& 0xf0 ; 按鍵則對(duì)應(yīng)的IO口接地,不考慮兩個(gè)按鍵同時(shí)按下的情況,鍵值計(jì)算如下表:表1 鍵值表(每個(gè)按鍵都是2進(jìn)制代碼,對(duì)應(yīng)的
47、四個(gè)IO口按8421碼組成16進(jìn)制代碼)端口P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0鍵值端口值84218421·K11110*0xe0K21101*K31011*b*K40111*0x702.程序方案選擇鍵盤(pán)掃描一般采用低電平、等待釋放和按鍵響應(yīng)3種方方案低電平查詢就是看鍵盤(pán)有沒(méi)有按下,指令為:if (key1=0) do_key1( ); 由于程序運(yùn)行很快,按鍵1ms程序會(huì)運(yùn)行上千次, 會(huì)導(dǎo)致重復(fù)執(zhí)行按鍵程序 。如圖中的虛線所示,因此需要消除抖動(dòng)。等待釋放就是按鍵時(shí)不響應(yīng),等待鍵盤(pán)釋放再執(zhí)行鍵盤(pán)指令:While(key1=0);/循環(huán)等待按鍵釋放Do_key
48、1( ); /釋放后執(zhí)行指令當(dāng)按鍵時(shí)間長(zhǎng)的時(shí)候,等待時(shí)間太長(zhǎng),反應(yīng)太慢 按鍵響應(yīng)也叫查詢下降沿方式:程序不斷地掃描,但是記住最近的兩次鍵值。然后對(duì)比相鄰的兩次按鍵。如果是剛按下去,那么相鄰的前次就一定是沒(méi)按程序代碼復(fù)雜,但是具有 高效 、 快速 等特點(diǎn),詳細(xì)代碼附在最后。對(duì)比三種方案,我們選擇查詢下降沿的按鍵響應(yīng)法方案。3.鍵盤(pán)驅(qū)動(dòng)程序的模塊化設(shè)計(jì)鍵盤(pán)驅(qū)動(dòng)程序可以包括程序主體keyb.c和keyb.h兩個(gè)文件。程序主體包含鍵盤(pán)掃描程序和鍵盤(pán)處理程序兩部分。鍵盤(pán)掃描程序負(fù)責(zé)判斷是否有鍵按下,鍵盤(pán)處理程序根據(jù)按鍵不同而執(zhí)行不同的功能。編寫(xiě)查詢下降沿方式的鍵盤(pán)掃描程序注意以下幾點(diǎn):1) 及時(shí)查詢按鍵
49、的端口,一般將按鍵程序放在主程序。但是如果主程序有太多的程序,為了保證鍵盤(pán)的實(shí)時(shí)性,可以將按鍵程序放在在定時(shí)中斷中。2) 不管按鍵是否有效,都及時(shí)保存本次按鍵 ,作為下一次按鍵的“上一次”記錄。3) 如果當(dāng)前沒(méi)有按鍵,可以及時(shí)退出,保證程序的時(shí)效性。4) 如果當(dāng)前有按鍵,還要判斷上一次按鍵。只有兩次相反,才進(jìn)入按鍵處理程序。鍵盤(pán)處理可以采用if判斷語(yǔ)句和switch分支語(yǔ)句兩種方式。因?yàn)閟witch分支的方式程序邏輯清楚,建議采用分支方式。如果鍵盤(pán)處理程序比較簡(jiǎn)單,可以放在一起。如果程序太長(zhǎng),可以單獨(dú)作一個(gè)子程序。鍵盤(pán)掃描程序流程圖如下鍵盤(pán)程序C51代碼如下:4結(jié)論: 采用掃描下降沿的方法為獨(dú)
50、立式按鍵設(shè)計(jì)了驅(qū)動(dòng)程序。該程序代碼比較復(fù)雜,但是具有高效、快速等特點(diǎn)。下載試用,發(fā)現(xiàn)上述程序還存在以下缺點(diǎn)。1) 增加分鐘的時(shí)候,沒(méi)有判斷是否溢出 2) 減少分鐘的時(shí)候,沒(méi)有判斷是否為負(fù)數(shù) 3) 預(yù)備項(xiàng)目7 ADC驅(qū)動(dòng)程序設(shè)計(jì)ADC是單片機(jī)測(cè)量輸入模擬電壓的重要方法,為此必須掌握單片機(jī)片內(nèi)ADC的應(yīng)用。教材上沒(méi)有教過(guò)如何使用STC單片機(jī)內(nèi)部集成的ADC,可以到宏晶公司網(wǎng)站下載芯片資料,在芯片資料中查找C程序源代碼,復(fù)制到項(xiàng)目C程序中,就可以用了。如果不想深究,后面的內(nèi)容就不用看了,仔細(xì)探究其實(shí)也很簡(jiǎn)單。從供應(yīng)商提供的資料發(fā)現(xiàn),ADC程序代碼分包括 常量定義 、 ADC初始化 、 ADC中斷 等3部分。分別是:第一部分:為特殊功能
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 7《我們的衣食之源》(說(shuō)課稿)-部編版道德與法治四年級(jí)下冊(cè)
- 7《多元文化 多樣魅力》(說(shuō)課稿)-2023-2024學(xué)年統(tǒng)編版道德與法治六年級(jí)下冊(cè)
- 2023三年級(jí)英語(yǔ)下冊(cè) Unit 5 It's a parrot Lesson 30說(shuō)課稿 人教精通版(三起)
- 2023九年級(jí)數(shù)學(xué)上冊(cè) 第二十一章 一元二次方程21.1 一元二次方程說(shuō)課稿(新版)新人教版
- 7 課間十分鐘 第二課時(shí) 說(shuō)課稿-2023-2024學(xué)年道德與法治一年級(jí)上冊(cè)統(tǒng)編版001
- 2024秋七年級(jí)英語(yǔ)上冊(cè) Unit 3 Is this your pencil Section B(1a-1e)說(shuō)課稿 (新版)人教新目標(biāo)版001
- 2023-2024學(xué)年清華版(2012)信息技術(shù)三年級(jí)下冊(cè)第二單元《4課 妙用標(biāo)點(diǎn)-查找與替換》說(shuō)課稿
- 專著出版委托協(xié)議
- 委托委托配送協(xié)議
- 二零二五年度林業(yè)木材深加工項(xiàng)目投資合作協(xié)議3篇
- 2025-2030年中國(guó)納米氧化鋁行業(yè)發(fā)展前景與投資戰(zhàn)略研究報(bào)告新版
- 2025年度正規(guī)離婚協(xié)議書(shū)電子版下載服務(wù)
- 2025年貴州蔬菜集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 煤礦安全生產(chǎn)方針及法律法規(guī)課件
- 2025年教科室工作計(jì)劃樣本(四篇)
- 2024年版古董古玩買(mǎi)賣合同:古玩交易稅費(fèi)及支付規(guī)定
- 【7歷期末】安徽省宣城市2023-2024學(xué)年七年級(jí)上學(xué)期期末考試歷史試題
- 春節(jié)后安全生產(chǎn)開(kāi)工第一課
- 2025光伏組件清洗合同
- 電力電纜工程施工組織設(shè)計(jì)
- 2024年網(wǎng)格員考試題庫(kù)完美版
評(píng)論
0/150
提交評(píng)論