



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
單片機c語言編程
一、系統(tǒng)的編寫程序許多學生認為學習單詞很困難。這里將結合例文介紹怎樣編寫一個簡單的單片機C語言程序。(電路很簡單,已經(jīng)用文字描述了這里不再畫出了。)二、按一次摩擦法顯示數(shù)值用兩位數(shù)碼管顯示00~99十進制數(shù),上電復位后顯示00;每按一次按鍵Key1顯示的數(shù)值加1;每按一次按鍵Key2顯示的數(shù)值減1;每按一次按鍵Key3顯示的數(shù)值清零;每按一次按鍵Key4數(shù)值在原來的基礎上每秒自動加1;再次按下按鍵Key4時,數(shù)值停止自動加1,保持原來的數(shù)值。三、控制鎖存器的使能端1是頭文件,內(nèi)部定義了單片機內(nèi)部的特殊功能寄存器和位寄存器。常用的有3個,Reg51.h、Reg52.h和Intrins.h。頭文件有兩種表示方法,#include<reg51.h>和#include”reg51.h”一般用前者。注意:(1)編寫程序時要將輸入法切換成英文半角狀態(tài)。(2)每次編譯前要先保存文件,避免編譯時,Keil錯誤運行導致計算機死機而丟失文件。2和3為宏定義語句。格式為:#define新名稱原內(nèi)容。如例文中,宏定義的目的就是用unit來代替unsignedint,程序后面再定義變量numt0和num時寫成了ucharnumt0,unm,程序簡潔了。注意:(1)宏定義后沒有分號。(2)對于同一個內(nèi)容,宏定義只能定義一次。(3)在自定義新名稱時不能使用單片機默認的關鍵詞和特殊寄存器的名稱。4至9Sbit----聲明某一個特殊功能寄存器的某一位。與頭文件中定義位的用法相同。自定義的地址要與硬件連接相對應。例sbitkey1=P1^0,說明按鍵1連接的是單片機的P1^0口。8和9定義數(shù)碼管位鎖存器的使能控制端和數(shù)碼管段鎖存器的使能控制端。表明單片機的P1^5口和P1^6口分別連接兩個鎖存器的使能端,控制寄存器的鎖存功能,實現(xiàn)鎖存器對數(shù)據(jù)的保護。注意:(1)P口由用戶設計的硬件接線決定。(2)P口中的P要大寫。10一個顯示用的數(shù)組,與C語言的區(qū)別是數(shù)組類型后有Code關鍵字,Code表示編碼。例Uchar(Unsignedchar)表示數(shù)組中元素的類型。Table數(shù)組名,定義時不能和關鍵字相同,Table后的括號中要注明數(shù)組中元素的個數(shù)。一般不必寫;編譯器在編譯時會自動計算出元素個數(shù),以分配相應的存儲空間。大括號中為數(shù)組中的元素,每個元素占用一個字符空間,送入數(shù)碼管就會顯示相應的數(shù)字,0x3f至0x6f是數(shù)字0至9的ASCII碼。注意:數(shù)組中各元素之間用逗號隔開。14定義兩個字符型變量,之間用逗號隔開最后加分號。15顯示子函數(shù)的聲明,子函數(shù)可以寫在主函數(shù)的前面或后面;如子函數(shù)在主函數(shù)后面,必須在主函數(shù)前面加上子函數(shù)的聲明。如例文,將返回值特性,函數(shù)名及后面的小括號完全復制。若是無參函數(shù),小括號中為空;若是有參函數(shù),需要在小括號里依次寫上參數(shù)類型,參數(shù)可以省略。當子函數(shù)在主函數(shù)前面時可以省去聲明,寫函數(shù)體的同時就已經(jīng)相當于聲明了函數(shù)本身。注意:例文中函數(shù)voiddisplay(ucharaddnum)中調(diào)用了函數(shù)voiddelayms(uintxms),是子程序調(diào)用下一級子程序。16自定義顯示子函數(shù),void表示是個無返回值的子函數(shù)執(zhí)行后不返回任何的數(shù)據(jù)。Display子函數(shù)的名稱,定義時不要和關鍵字相同。括號中內(nèi)容是函數(shù)的參數(shù),如括號中沒有任何數(shù)據(jù)或符號,為一個無參數(shù)函數(shù)。例文中,括號內(nèi)有數(shù)據(jù)即此函數(shù)為有參數(shù)函數(shù),參數(shù)addnum的變量類型為uchar類型,又稱函數(shù)的形參。調(diào)用函數(shù)時用數(shù)據(jù)代替此形參,這個數(shù)據(jù)稱為實參,實參代替形參后,在子函數(shù)中所有和形參名相同的變量都將被實參所代替。18定義了分別存儲十位和個位數(shù)據(jù)的無符號字符型變量。19和20在函數(shù)定義的參數(shù)中分離出十位和個位數(shù)據(jù)?!?”算術運算符,用來求模運算;例11/3=3,即11中有多少個整數(shù)3。2位數(shù)求10的模有特殊意義是分離十位數(shù),同理“%”求余運算符,例11%3=2,而2位數(shù)求10的余是分離個位數(shù)。22至29送數(shù)碼管個位數(shù)據(jù)。需要用兩個鎖存器74LS373起到對數(shù)據(jù)的鎖存,片選使能端分別和單片機的P1^4和P1^5口連接;一個鎖存器控制數(shù)碼管的位選信號,另一個寄存器控制數(shù)碼管的段選信號。兩寄存器數(shù)據(jù)輸入端都和單片機的P0口相連。控制段選信號的寄存器數(shù)據(jù)輸出端和兩個數(shù)碼管的8個LED的引腳相連,控制位選信號的寄存器數(shù)據(jù)輸出端最低兩位分別和數(shù)碼管的的兩個公共端相連;這是由于采用數(shù)碼管的動態(tài)掃描方式。首先22送段選信號給段選鎖存器,當鎖存器的使能端為高電平1時,打開鎖存器,通過單片機P0口向鎖存器寫入數(shù)據(jù)。23向鎖存器送個位數(shù)據(jù);上面定義數(shù)組中的數(shù)據(jù)為共陰極數(shù)碼管的顯示數(shù)據(jù),分離出的數(shù)據(jù)便與數(shù)組元素相對應。51單片機的數(shù)據(jù)輸出端是P0口,P0口不僅可以作為普通的I/O口使用,還是單片機數(shù)據(jù)和低8位地址的輸出端。P2口是高8位地址的輸出端。24關閉段選信號送低電平0;否則,它會隨著P0口數(shù)據(jù)的改變而相應改變。25是消隱程序,防止打開位選鎖存器時原來的段選鎖存器的數(shù)據(jù)通過位選鎖存器造成混亂。26送位選信號高電平1給位選鎖存器開啟鎖存器和段選鎖存器意義相同。27是選通顯示個位的數(shù)碼管,此時個位數(shù)碼管便顯示相應的數(shù)據(jù),因為數(shù)據(jù)已經(jīng)儲存在段選鎖存器中。28送低電平0關閉位選鎖存器,使鎖存器保持當前的數(shù)據(jù)而不會跟隨P0口的數(shù)據(jù)而變化。29為視覺延時,適當?shù)难訒r可使顯示的數(shù)據(jù)更穩(wěn)定、清晰。31至38是送十位數(shù)碼管顯示的十位數(shù)據(jù)和送個位數(shù)據(jù)相同。注意:(1)送完段選信號和位選信號給鎖存器時要關閉鎖存器避免程序混亂。(2)送段選信號之后或位選信號之前要編寫消隱程序避免造成短暫的視覺混亂。(3)程序控制端的編寫要和單片機與周圍電氣元件的連接相對應。23和32是軟件譯碼。(4)每個數(shù)碼管顯示之間要有適當?shù)难訒r,時間過短或過長都會導致顯示混亂。注意:(1)當for語句的內(nèi)部語句只有一句時,可省去大括號。(2)延時子函數(shù)延時為大概值,如果要精確的延時使用單片機內(nèi)部定時器延時。46至53初始化子函數(shù)。48設定單片機定時器T1的工作方式為1。TMOD是單片機定時器/計數(shù)器工作方式寄存器。這設為工作方式1,為16位定時器/計數(shù)器,按單片機外接12MHz的時鐘頻率,計算公式TH0=(65536-50000)/256分離高8位、TL0=(65536-50000)%256分離低8位。51和52開定時器1中斷,EA和ET1分別是單片機特殊功能寄存器中中斷允許控制寄存器中的第七位和第三位。當EA=1時中斷總允許;當ET1為1時開啟該中斷。注意:單片機中特殊功能寄存器每位的含義要知道。要先賦初值給定時器,然后開啟定時器,否則,誤差較大。58去抖動延時。有時按鍵會受到外部因素或自身機械特性的影響,按鍵在按下或釋放的瞬間會有抖動現(xiàn)象,一般為5到15ms。也有專門的去抖電路芯片,讀者可以通過示波器去觀察按鍵的抖動現(xiàn)象的波形。64等待按鍵釋放語句。當按下按鍵,按鍵為低電平0,而!key1(取反符號)為高電平1;while語句后直接跟分號說明是個空語句,只要!key1始終為高電平1,while語句就始終執(zhí)行這個空語句,直到按鍵釋放后!key1變?yōu)榈碗娖?,跳出while循環(huán)語句。如去掉按鍵釋放語句,由于單片機執(zhí)行代碼的速度非???且是循環(huán)檢測按鍵,按下按鍵的時間比單片機的執(zhí)行速度大的多,單片機會多次檢測到按鍵被按下,從而造成結果的錯誤。按鍵2至4的程序與按鍵1相似。93開啟或停止定時器1。TR1是單片機特殊功能寄存器TCON中的一位,作用是當TR1為高點平1時,開啟單片機內(nèi)部定時器/計數(shù)器1;當為低電平0時,則關閉。符號“~”是取反的意思。和“!”的區(qū)別是“!”是關系運算符,類似于“==”的用法,“~”是位運算符,類似于賦值符號。注意:相似或意義相近的運算符不要亂用。例如:“==”和“=”,“!”和“~”。97為主函數(shù)。主函數(shù)非常簡單,只調(diào)用三個函數(shù)就OK了。這是編程的一個習慣,把整個程序分成幾個相關聯(lián)的部分,如按鍵掃描部分、數(shù)據(jù)顯示部分、延時部分、初始化部分,每一部分看上去思路都非常清晰,也便于調(diào)試和查找錯誤,這同時也大大簡化了主函數(shù)的任務,因此主函數(shù)只需直接調(diào)用這些子函數(shù)就可以了。注意:主函數(shù)調(diào)用子函數(shù)的前后順序要符合事物的前因后果。106定時器中斷的子函數(shù),每進一次中斷都要重裝一次初值,以便下次進入中斷使用。111判斷中斷次數(shù)是否為20次,因為例文設定的定時器中斷的時間是50ms,而功能需要1s的間隔,所以定時器中斷要滿足20次。40延時子函數(shù),是帶參數(shù)的函數(shù)。子函數(shù)中是兩個嵌套的for語句,兩個for語句是不同的。一個后面有分號而另一個沒有。第一個for語句后沒有分號,編譯器默認第二個for語句是第一個for語句的內(nèi)部語句,而第二個for語句的內(nèi)部什么都沒有,即為空語句;程序在執(zhí)行時,第一個for語句中的i每減一次,第二個for語句執(zhí)行110次。如果需要更長的延時,可以進行3層、4層的嵌套,或改變變量的類型和增大變量的初值都是可以的。54鍵盤掃描子函數(shù)。函數(shù)中的“==”符號與“=”符號不同,“==”是關系運算符。用于比較兩個數(shù)值或表達式大小是否相等,在比較語句中做為判斷的條件是否成立而去執(zhí)行相應的代碼。例文中,if(key1==0)判
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 音視頻服務管理制度
- 協(xié)會聘用與管理制度
- 擠奶廳安全管理制度
- 測繪公司計算機管理制度
- 化驗室儀器管理制度
- 輸血科安全管理制度
- 鍋樓房安全管理制度
- 系統(tǒng)宣傳工作管理制度
- 果園殺菌殺蟲管理制度
- 鄉(xiāng)鎮(zhèn)先進管理制度
- 2024年中考語文真題分類匯編標點符號
- 北京西城區(qū)2023年初中學業(yè)水平考試信息科技試卷真題(含答案詳解)
- 2024屆上海復旦附中高一下3月英語試題及答案
- 有趣的漢字《甲骨文》課件
- 肝硬化的護理查房模板
- 第二部 第四章-名著《鋼鐵是怎樣煉成的》閱讀導引+思維導圖+內(nèi)容概括+原文批注+閱讀訓練
- 2023年湖南省高考生物真題卷和答案
- JTG F80-1-2004 公路工程質(zhì)量檢驗評定標準 第一冊 土建工程
- 機動車車輛全損協(xié)議書范本
- 《計算機控制系統(tǒng)》課后題答案劉建昌等科學出版社
- 塑料制品的市場分析與營銷策略
評論
0/150
提交評論