版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目1動(dòng)態(tài)燈箱素質(zhì)目標(biāo):1.通過(guò)需求分析、設(shè)計(jì)與制作等任務(wù),培養(yǎng)學(xué)生自主學(xué)習(xí)能力,規(guī)范意識(shí),安全意識(shí)。2.通過(guò)動(dòng)感燈箱的創(chuàng)意設(shè)計(jì),培養(yǎng)學(xué)生勇于實(shí)踐和勇于創(chuàng)新的科學(xué)精神。知識(shí)目標(biāo):1.能概述MCS-51單片機(jī)并行輸入/輸出(I/O)端口的結(jié)構(gòu)和功能。2.能使用單片機(jī)的時(shí)鐘和時(shí)序。3.熟練使用C語(yǔ)言基本語(yǔ)句,能區(qū)別循環(huán)語(yǔ)句while、do…while、for的語(yǔ)法特點(diǎn)。4.熟練應(yīng)用延時(shí)程序設(shè)計(jì)。能力目標(biāo):1.能根據(jù)用戶需求進(jìn)行燈光控制系統(tǒng)設(shè)計(jì)。2.能夠編寫(xiě)MCS-51單片機(jī)控制多路LED燈組合的驅(qū)動(dòng)程序。3.會(huì)制作與調(diào)試LED動(dòng)感燈箱。設(shè)計(jì)要求:
LED動(dòng)感燈箱控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),以MCS-51單片機(jī)為主控芯片,外接多個(gè)LED組成創(chuàng)意動(dòng)感燈箱電路,通過(guò)編程實(shí)現(xiàn)多個(gè)LED的動(dòng)態(tài)、個(gè)性化的顯示。LED動(dòng)感燈箱控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)并行輸入輸出(I/O)端口51系列單片機(jī)有4個(gè)I/O端口,每個(gè)端口都是8位準(zhǔn)雙向口,共占32根引腳。每個(gè)端口都包括一個(gè)鎖存器(即專(zhuān)用寄存器P0~P3)、一個(gè)輸出驅(qū)動(dòng)器和輸入緩沖器。通常把4個(gè)端口籠統(tǒng)地表示為P0~P3。在無(wú)片外擴(kuò)展存儲(chǔ)器的系統(tǒng)中,這4個(gè)端口的每一位都可以作為準(zhǔn)雙向通用I/O端口使用。在具有片外擴(kuò)展存儲(chǔ)器的系統(tǒng)中,P2口作為高8位地址線,P0口分時(shí)作為低8位地址線和雙向數(shù)據(jù)總線。P0口
用作通用I/O口作為輸出口:當(dāng)P0口用作輸出口時(shí),因輸出級(jí)處于開(kāi)漏狀態(tài),必須外接上拉電阻作為輸入口:當(dāng)P0口用作輸入口時(shí),必須先向該端口鎖存器寫(xiě)入“1”
地址/數(shù)據(jù)總線輸出
P0口用于低8位地址總線和數(shù)據(jù)總線(分時(shí)傳送)P1和P2口P1口:用作通用I/O口,用作輸入時(shí),均須先寫(xiě)入“1”。
P2口:用作通用I/O口,用作輸入時(shí),均須先寫(xiě)入“1”;P2口用于高8位地址總線。P3口P3口用作通用I/O口,用作輸入時(shí),均須先寫(xiě)入“1”;引腳第二功能引腳第二功能P3.0RXD串行輸入口P3.4T0定時(shí)計(jì)數(shù)器0P3.1TXD串行輸出口P3.5T1定時(shí)計(jì)數(shù)器1P3.2INT0外部中斷0(低電平有效)P3.6WR外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通(低電平有效)P3.3INT1外部中斷1(低電平有效)P3.7RD外部數(shù)據(jù)存儲(chǔ)器讀選通(低電平有效)P3口第二功能小結(jié)P0~P3口都能用作I/O口,用作輸入時(shí),均須先寫(xiě)入“1”;用作輸出時(shí),P0口應(yīng)外接上拉電阻;在并行擴(kuò)展外存儲(chǔ)器或I/O口情況下,P0口用于低8位地址總線和數(shù)據(jù)總線(分時(shí)傳送);P2口用
于高8位地址總線;P3口常用于第二功能,用戶能使用的I/O口只有P1口和未用作第二功能的部分P3口端線。CPU時(shí)序單片機(jī)時(shí)序是指單片機(jī)執(zhí)行指令時(shí)應(yīng)發(fā)出的控制信號(hào)的時(shí)間序列。這些控制信號(hào)在時(shí)間上的相互關(guān)系就是CPU的時(shí)序。它是一系列具有時(shí)間順序的脈沖信號(hào)。programBCPU時(shí)序機(jī)器周期指令周期時(shí)鐘周期時(shí)鐘周期與狀態(tài)周期時(shí)鐘周期晶振的振蕩信號(hào)從晶振引腳2端送入內(nèi)部時(shí)鐘電路,該振蕩信號(hào)被二分頻,產(chǎn)生一個(gè)兩相時(shí)鐘信號(hào)P1和P2供單片機(jī)使用。CPU就是通過(guò)兩相時(shí)鐘P1和P2為基本節(jié)拍來(lái)協(xié)調(diào)單片機(jī)實(shí)現(xiàn)各部分的有效工作。振蕩器脈沖信號(hào)經(jīng)過(guò)時(shí)鐘電路二分頻之后產(chǎn)生的單片機(jī)時(shí)鐘信號(hào)的周期(用S表示)稱(chēng)為狀態(tài)周期。故一個(gè)狀態(tài)周期S包含2個(gè)節(jié)拍,前一時(shí)鐘周期稱(chēng)為P1節(jié)拍,后一時(shí)鐘周期稱(chēng)為P2節(jié)拍。狀態(tài)周期時(shí)鐘周期1時(shí)鐘周期是最小時(shí)序單位。2時(shí)鐘周期=晶振周期或振蕩周期Tosc=晶振頻率(振蕩頻率fosc)的倒數(shù)。3若晶振為12MHz,則時(shí)鐘周期=1/12us。ClockCycle機(jī)器周期1CPU完成一項(xiàng)基本操作(取指令、存儲(chǔ)器讀寫(xiě)等)所消耗的最短時(shí)間。2MCS-51的機(jī)器周期時(shí)間是不變的,一般為12個(gè)時(shí)鐘周期或6個(gè)狀態(tài)周期組成。即機(jī)器周期=12個(gè)時(shí)鐘周期或6個(gè)狀態(tài)周期。3若晶振為12MHz,則機(jī)器周期=12*1/12us(時(shí)鐘周期)=1us。指令周期1取出并執(zhí)行一條指令的時(shí)間。2MCS-51的指令按指令執(zhí)行的時(shí)間可分為:?jiǎn)沃芷凇㈦p周期和四周期(只有乘法和除法兩條指令),所以指令周期不盡相同,可能包括一到四個(gè)不等的機(jī)器周期。3如MCS-51外接晶振為12MHz,機(jī)器周期是1us,則指令周期=(1~4)=(1~4)=1~4us.。時(shí)鐘周期、機(jī)器周期、指令周期的計(jì)算【例2-1】MCS-51的時(shí)鐘周期、機(jī)器周期、指令周期是如何分配的?當(dāng)晶振頻率分別為6MHz和12MHz時(shí),一個(gè)機(jī)器周期為多少μs?解:MCS-51單片機(jī)每個(gè)狀態(tài)周期包含2個(gè)時(shí)鐘周期,1個(gè)機(jī)器周期有6個(gè)狀態(tài)周期,每條指令的執(zhí)行時(shí)間(即指令周期)為1~4個(gè)機(jī)器周期。當(dāng)f=6MHz時(shí),時(shí)鐘周期=1/f=1/6μs,機(jī)器周期=(1/6)×12μs=2μs
當(dāng)f=12MHz時(shí),時(shí)鐘周期=1/f=1/12μs,機(jī)器周期(1/12)×12μs=1μs小結(jié)時(shí)鐘周期、機(jī)器周期和指令周期均是單片機(jī)時(shí)序單位。時(shí)鐘周期是最小時(shí)序單位。機(jī)器周期是單片機(jī)計(jì)算其它時(shí)間值(如波特率、定時(shí)器的定時(shí)時(shí)間等)的基礎(chǔ)時(shí)序單位。1個(gè)指令周期=(1~4)個(gè)機(jī)器周期1個(gè)機(jī)器周期=12個(gè)時(shí)鐘周期(晶振頻率倒數(shù))1個(gè)時(shí)鐘周期=晶振頻率倒數(shù)C語(yǔ)言基本語(yǔ)句函數(shù)體變量聲明語(yǔ)句執(zhí)行語(yǔ)句表達(dá)式語(yǔ)句表達(dá)式;如:x=y+z;流程控制語(yǔ)句條件判斷語(yǔ)句if語(yǔ)句、switch語(yǔ)句;循環(huán)執(zhí)行語(yǔ)句dowhile語(yǔ)句、while語(yǔ)句、for語(yǔ)句;轉(zhuǎn)向語(yǔ)句break語(yǔ)句、goto語(yǔ)句、continue語(yǔ)句、return語(yǔ)句。函數(shù)調(diào)用語(yǔ)句函數(shù)名(實(shí)際參數(shù)表);delay(100);復(fù)合語(yǔ)句{……}空語(yǔ)句;C語(yǔ)言三種結(jié)構(gòu)根據(jù)給定的條件是否滿足執(zhí)行A塊或B塊順序執(zhí)行AB塊根據(jù)終止條件是否滿足執(zhí)行循環(huán)體b)直到型循環(huán)a)當(dāng)型循環(huán)for語(yǔ)句for循環(huán)是當(dāng)型循環(huán),for循環(huán)常用于循環(huán)次數(shù)已定的情況?!疽话愀袷健俊玖鞒虉D】for(表達(dá)式1;表達(dá)式2;表達(dá)式3){
循環(huán)主體;}重復(fù)要做的事情循環(huán)變量增值循環(huán)條件表達(dá)式,用來(lái)判定是否繼續(xù)執(zhí)行循環(huán)初始化變量:設(shè)置初始值while語(yǔ)句while循環(huán)語(yǔ)句屬于當(dāng)型循環(huán),即先判斷條件,再執(zhí)行循環(huán)體語(yǔ)句。【一般格式】while(表達(dá)式){
循環(huán)體;}循環(huán)控制條件表達(dá)式由一條或多條語(yǔ)句組成,循環(huán)體的語(yǔ)句盡量不重復(fù)?!玖鞒虉D】do…while語(yǔ)句do…while循環(huán)語(yǔ)句屬于直到型循環(huán),即先執(zhí)行循環(huán)體語(yǔ)句一次,再判斷條件,決定是否繼續(xù)執(zhí)行循環(huán)體?!疽话愀袷健抗搀w...do{
循環(huán)體;}while(表達(dá)式);循環(huán)控制條件表達(dá)式由一條或多條語(yǔ)句組成,循環(huán)體的語(yǔ)句盡量不重復(fù)。共同體...【流程圖】C51數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型名稱(chēng)長(zhǎng)度取值區(qū)域unsignedchar無(wú)符號(hào)字符型8位0~255signedchar有符號(hào)字符型8位-128~+127unsignedint無(wú)符號(hào)整型16位0~65535signedint有符號(hào)整型16位-32768~+32767unsignedlong無(wú)符號(hào)長(zhǎng)整型32位0~4294967295signedlong有符號(hào)長(zhǎng)整型32位-2147483648~+2147483648float浮點(diǎn)型32位±1.175494E-38~±3.402823E+38*指針型8~24位對(duì)象的地址bit位類(lèi)型1位0或1sfr特殊功能寄存器8位0~255sfr1616位特殊功能寄存器16位0~65535C51運(yùn)算符及表達(dá)式1.運(yùn)算符
運(yùn)算符就是完成某種特定運(yùn)算的符號(hào)。2.表達(dá)式由運(yùn)算符及運(yùn)算對(duì)象所組成的具有特定含義的式子。3.表達(dá)式語(yǔ)句
表達(dá)式后面加“;”號(hào)就構(gòu)成了一個(gè)表達(dá)式語(yǔ)句。4.優(yōu)先級(jí)優(yōu)先級(jí)是用來(lái)標(biāo)識(shí)運(yùn)算符在表達(dá)式中的運(yùn)算順序5.結(jié)合性當(dāng)一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符優(yōu)先級(jí)別相同時(shí),則按運(yùn)算符的結(jié)合性來(lái)確定表達(dá)式的運(yùn)算順序。同一優(yōu)先級(jí)的運(yùn)算符,運(yùn)算次序由結(jié)合方向所決定。6.用運(yùn)算符優(yōu)先級(jí)順序!>算術(shù)運(yùn)算符>關(guān)系運(yùn)算符>&&>||>賦值運(yùn)算符運(yùn)算符名稱(chēng)運(yùn)算符算術(shù)運(yùn)算符+、-、*、/、%、++、--關(guān)系運(yùn)算符<、<=、>、>=、==、!=邏輯運(yùn)算符&&、||、!位運(yùn)算符&、|、^、~、<<、>>賦值運(yùn)算符與復(fù)合賦值運(yùn)算=+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符(類(lèi)型)特殊運(yùn)算符[]()·->逗號(hào)運(yùn)算符,C51常用運(yùn)算符常量和變量(一)常量常量是不可變的量,常量可以表示各種數(shù)據(jù)類(lèi)型的值。常量可以是數(shù)值型常量,也可以是符號(hào)常量。數(shù)值型常量即常說(shuō)的常數(shù),在程序中直接引用的數(shù)據(jù)。如0x8f,23,’a’,’good!’等。符號(hào)常量指用標(biāo)識(shí)符來(lái)代表一個(gè)數(shù)據(jù),符號(hào)常量在使用之前必須用編譯預(yù)處理命令“#define”先進(jìn)行宏定義。符號(hào)常量的定義形式:
#define符號(hào)常量標(biāo)識(shí)符常量數(shù)據(jù)例如:#defineLEDP0//用LED表示P0口#difineFalse0x0;//用預(yù)定義語(yǔ)句可以定義常量#difineTrue0x1;//這里定義False為0,True為1
使用含義直觀的常量來(lái)表示那些將在程序中多次出現(xiàn)的數(shù)字或字符串。常量的合理使用可以提高程序的可讀性、可維護(hù)性。常量和變量(二)變量變量,也就是可變的量,變量在程序執(zhí)行過(guò)程中是可變的量,由變量名和變量值組成,變量名是一個(gè)標(biāo)識(shí),變量值是一個(gè)數(shù)據(jù)值,程序?yàn)槊總€(gè)變量開(kāi)辟了存儲(chǔ)空間,變量值就存儲(chǔ)在這個(gè)空間當(dāng)中,可以通過(guò)變量名訪問(wèn)這個(gè)空間。使用變量時(shí)必須“先定義,后使用”。要在程序中使用變量必須先用標(biāo)識(shí)符作為變量名,并指出所用的數(shù)據(jù)類(lèi)型和存儲(chǔ)模式,這樣編譯系統(tǒng)才能為變量分配相應(yīng)的存儲(chǔ)空間。定義一個(gè)變量的格式如下:
[存儲(chǔ)種類(lèi)]數(shù)據(jù)類(lèi)型標(biāo)識(shí)符[存儲(chǔ)器類(lèi)型]變量名表
在定義格式中除了數(shù)據(jù)類(lèi)型和變量名表是必要的,其它都是可選項(xiàng)。類(lèi)型標(biāo)識(shí)符為定義變量數(shù)據(jù)類(lèi)型,數(shù)據(jù)類(lèi)型分為整型、實(shí)型、字符型等。變量定義形式可簡(jiǎn)化為:數(shù)據(jù)類(lèi)型標(biāo)識(shí)符變量名1[,變量名2,變量名3...];例如:unsignedinti,j;charc1,c2;。結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)方法:
自頂向下;逐步細(xì)化;模塊化設(shè)計(jì);結(jié)構(gòu)化編碼典型C程序頭文件#include(預(yù)處理指令)主函數(shù)main()語(yǔ)句子函數(shù)functiona()語(yǔ)句子函數(shù)functionb()……子函數(shù)functionc()…………無(wú)參函數(shù)1.無(wú)參函數(shù)無(wú)參數(shù)函數(shù)被調(diào)用時(shí),既無(wú)參數(shù)輸入,也不返回結(jié)果給調(diào)用函數(shù),它是為完成某種操作而編寫(xiě)的函數(shù)。無(wú)參函數(shù)的定義形式為:函數(shù)類(lèi)型標(biāo)識(shí)符函數(shù)名(){變量類(lèi)型說(shuō)明;函數(shù)體;}函數(shù)類(lèi)型標(biāo)識(shí)符是指函數(shù)返回值的類(lèi)型。有參函數(shù)2.有參函數(shù)有參數(shù)函數(shù)在被調(diào)用時(shí),必須提供實(shí)際的輸入?yún)?shù),必須說(shuō)明與實(shí)際參數(shù)一一對(duì)應(yīng)的形式參數(shù),并在函數(shù)結(jié)束時(shí)返回結(jié)果供調(diào)用它的函數(shù)使用。有參函數(shù)的定義形式為:函數(shù)類(lèi)型標(biāo)識(shí)符函數(shù)名(形式參數(shù)表){變量類(lèi)型說(shuō)明;函數(shù)體;}有參函數(shù)比無(wú)參函數(shù)多了形式參數(shù)表,各參數(shù)之間用逗號(hào)間隔。定義一個(gè)有參函數(shù)時(shí),位于函數(shù)名后面圓括號(hào)中的變量名為形式參數(shù)。在函數(shù)調(diào)用時(shí),主調(diào)函數(shù)名后面括號(hào)中的表達(dá)式為實(shí)際參數(shù)。有參函數(shù)2.有參函數(shù)參數(shù)傳遞函數(shù)兩種傳遞方式:值傳遞和地址傳遞。值傳遞,又稱(chēng)單向傳遞,只能把實(shí)參數(shù)值傳給形參,形參最后的結(jié)果不影響實(shí)參(形參改變大小,實(shí)參大小不變);地址傳遞,通過(guò)指針變量(本書(shū)項(xiàng)目不涉及應(yīng)用),把實(shí)參的地址給形參,形參的大小可以影響實(shí)參。系統(tǒng)設(shè)計(jì)本系統(tǒng)功能由硬件和軟件兩大部份協(xié)調(diào)完成,硬件部分主要完成LED燈的輸出顯示;軟件主要完成信號(hào)的處理及控制功能等。本系統(tǒng)的硬件采用模塊化設(shè)計(jì),以AT89C52單片機(jī)為核心,與LED接口電路組成控制系統(tǒng)。該系統(tǒng)硬件主要包括以下幾個(gè)模塊:AT89C52單片機(jī)最小系統(tǒng)、LED接口電路模塊等。其中AT89C52主要完成外圍硬件的控制以及一些運(yùn)算功能,LED接口電路完成燈光的閃爍功能。系統(tǒng)組成方框圖如圖2-1所示。該系統(tǒng)軟件主要由主程序、延時(shí)功能函數(shù)模塊等組成,系統(tǒng)軟件結(jié)構(gòu)框圖如圖2-2所示。LED電路復(fù)位電路時(shí)鐘電路電源電路圖2-1LED燈閃爍控制系統(tǒng)組成方框圖單片機(jī)延時(shí)子程序主程序圖2-2單片機(jī)燈閃爍系統(tǒng)軟件結(jié)構(gòu)框圖硬件電路設(shè)計(jì)軟件設(shè)計(jì)開(kāi)始P0=0xFF,D1燈點(diǎn)亮熄滅調(diào)用延時(shí)子程序P0=0x00,D1燈熄滅調(diào)用延時(shí)子程序主程序設(shè)計(jì)流程圖算法設(shè)計(jì)根據(jù)系統(tǒng)工作原理圖2-5可知:當(dāng)P0口輸出高電平,即P0=0xff時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時(shí)發(fā)光二極管全亮;當(dāng)P0口輸出低電平,即P0=0x00時(shí),發(fā)光二極管D1~D7全熄滅;發(fā)光二極管閃爍過(guò)程實(shí)際上就是發(fā)光二極管交替亮、滅的過(guò)程,單片機(jī)運(yùn)行一條指令的時(shí)間只有幾微秒,時(shí)間太短,眼睛無(wú)法分辨,看不到閃爍的效果。因此,用單片機(jī)控制發(fā)光二極管閃爍時(shí),需要增加一定的延時(shí)時(shí)間。#include"reg51.h"voidmain(){ P0=0x00; //全亮
(1)
P0=0xff; //全滅
(2)}P0=0xff;是什么呢?0xff對(duì)應(yīng)二進(jìn)制的數(shù)值是11111111,對(duì)應(yīng)的引腳為1是熄滅單色燈,8個(gè)1,代表的就是熄滅8個(gè)單色燈。錄入程序后我們通過(guò)單步運(yùn)行程序,就可以看到當(dāng)程序走過(guò)第(1)條語(yǔ)句后單色燈全亮,走過(guò)第二條語(yǔ)句后單色燈全滅了。單片機(jī)執(zhí)行的速度實(shí)在是太快了,我們跟本分辨不出單色燈點(diǎn)亮呢。單色燈就已經(jīng)被熄滅了,如何能讓我們分辨出單色燈的亮和滅呢,解決的辦法就是“延時(shí)”,如何做延時(shí)呢?單色燈閃爍延時(shí)程序是一種應(yīng)用較為廣泛的小程序,在程序設(shè)計(jì)中一般采用通過(guò)執(zhí)行無(wú)意義的操作消耗CPU時(shí)間實(shí)現(xiàn)延時(shí)的。在C語(yǔ)言中“空語(yǔ)句;”在程序執(zhí)行時(shí)需要占用一條指令的執(zhí)行時(shí)間,但是什么也不做。常用延時(shí)方法:非精確延時(shí)for(i=0;i<100;i++);i=100;while(i--);精確延時(shí)辦法利用庫(kù)函數(shù)_nop_();(需要include<intrins.h>)利用定時(shí)器進(jìn)行定時(shí)(后邊的課程進(jìn)行介紹)
延時(shí)算法分析開(kāi)始外循環(huán)次數(shù)i內(nèi)循環(huán)次數(shù)j空操作j-1=0?i-1=0?結(jié)束YYNN延時(shí)函數(shù)流程/***********************************/*函數(shù)功能:延時(shí)約1ms/*********************************/voiddelay(void)//延時(shí)程序{unsignedinti,j;/定義變量
for(i=0;i<10;i++)//外循環(huán)次數(shù)控制
{for(j=0;j<115;j++)/內(nèi)循環(huán)次數(shù)控制
{;}//循環(huán)體
}}程序說(shuō)明:延時(shí)函數(shù)地很多程序設(shè)計(jì)都會(huì)用到,這里的延時(shí)函數(shù)delay使用了雙重循環(huán),內(nèi)外循環(huán)的循環(huán)次數(shù)由變量i和j提供,總的循環(huán)次數(shù)是i×j,循環(huán)體是空操作。延時(shí)程序系統(tǒng)仿真調(diào)試啟動(dòng)KeiluVision4軟件,創(chuàng)建新工程:CH2.UVPROJ,CPU選擇Atmel89C52。對(duì)工程的屬性進(jìn)行設(shè)置:目標(biāo)屬性中選擇“生成HEX文件”。編寫(xiě)參考源程序CH2.c,以C為擴(kuò)展名保存在工程文件夾中。將參考源程序加入程序組:鼠標(biāo)右鍵單擊程序組圖標(biāo),加入文件組。調(diào)試:進(jìn)入調(diào)試狀態(tài),期間可能需要修改參考源程序,直到?jīng)]有語(yǔ)法錯(cuò)誤為止。打開(kāi)相應(yīng)窗口,運(yùn)行程序,觀察運(yùn)行結(jié)果。參考視頻1.MCS-51有4組8位I/O口:P0、P1、P2和P3口,P1、P2和P3為準(zhǔn)雙向口,P0口則為雙向三態(tài)輸入輸出口,都可做I/O使用。P0口內(nèi)部無(wú)上拉電阻,作為輸入或輸出時(shí)應(yīng)在外部接上拉電阻。P1、P2、P3口內(nèi)部有上拉電阻。其中P0口在系統(tǒng)外部擴(kuò)展存儲(chǔ)器時(shí),作數(shù)據(jù)總線/低8位地址總線;P2口可作地址總線使用(高8位),P3口有第二功能。2.C語(yǔ)言程序基本結(jié)構(gòu)/*****文件說(shuō)明****************/#include<at89x52.h>//預(yù)處理命令/**********函數(shù)說(shuō)明*************/voidmain()//程序入口(主函數(shù)){//函數(shù)體開(kāi)始………;//功能語(yǔ)句}//函數(shù)體結(jié)束3.C51語(yǔ)言有for循環(huán)、while循環(huán)和do…while循環(huán)三種循環(huán)語(yǔ)句。延時(shí)功能函數(shù)清單:/************************************************/*函數(shù)功能:延時(shí)約1ms/********************************************/voiddelay(void)//延時(shí)程序{unsignedinti,j;//定義變量
for(i=0;i<10;i++)//外循環(huán)次數(shù)控制
{for(j=0;j<115;j++)//內(nèi)循環(huán)次數(shù)控制
{;}//循環(huán)體
}}延時(shí)子函數(shù)例如:1.一個(gè)語(yǔ)句以分號(hào)作為結(jié)束標(biāo)識(shí)符。2.任何C程序都必須有且只能有一個(gè)主函數(shù)main(),它是程序的入口,也是程序的出口。3.在同一程序塊中,變量不能被重復(fù)定義;使用變量時(shí)必須“先定義,后使用”。4.括號(hào)(花括號(hào)或圓括號(hào))應(yīng)成對(duì)出現(xiàn)。在編譯器中如果無(wú)語(yǔ)法錯(cuò)誤,編譯通過(guò),我們通常認(rèn)為符合了C語(yǔ)言的基本語(yǔ)法規(guī)則。否則,存在語(yǔ)法錯(cuò)誤,需要修改C語(yǔ)言的語(yǔ)法規(guī)則(法則)(調(diào)試是重要能力,需要理論+經(jīng)驗(yàn)):1、對(duì)大小寫(xiě)敏感,即P與p存儲(chǔ)在計(jì)算機(jī)的二進(jìn)制編碼是不一樣的,代表的是兩個(gè)不同的字母。出現(xiàn)變量未定義的情況。上機(jī)調(diào)試中的典型錯(cuò)誤2.輸入法敏感,中英文符號(hào)注意區(qū)分,如(),(),3.大括號(hào)沒(méi)有配對(duì)出現(xiàn)4.語(yǔ)句后缺少“;”。5.源程序未加入到工程項(xiàng)目中。6.無(wú)語(yǔ)法錯(cuò)誤,編譯通過(guò)7.延時(shí)死循環(huán)錯(cuò)誤注意:在這里我使用的變量定義為unsignedint代表的是無(wú)符號(hào)整型,其取值范圍是0~65535,循環(huán)變量的值不要超過(guò)這個(gè)數(shù)值,否則就會(huì)出現(xiàn)死循環(huán),就走不出延時(shí)子程序了。這也是大家經(jīng)常犯的一個(gè)錯(cuò)誤。例:下面就是一個(gè)錯(cuò)誤的實(shí)例。voiddelay(){ unsignedintk;for(k=0;k<70000;k++);}該程序錯(cuò)誤的原因是K永遠(yuǎn)加不到70000,所以無(wú)法跳出死循環(huán)。1.彩燈多種效果變換閃爍如何實(shí)現(xiàn)?2.在彩燈多種效果變換閃爍中,每種效果之間都需要延時(shí),即for(i=0;i<100;i++);循環(huán)語(yǔ)句被反復(fù)調(diào)用,請(qǐng)問(wèn)有不有更為簡(jiǎn)潔的設(shè)計(jì)方法來(lái)實(shí)現(xiàn)?3.將P2口和P0口各輸出控制8個(gè)發(fā)光二極管,分別交替閃爍,電路如何連接?程序如何修改?項(xiàng)目2汽車(chē)轉(zhuǎn)向燈設(shè)計(jì)與實(shí)現(xiàn)素質(zhì)目標(biāo)1.通過(guò)汽車(chē)轉(zhuǎn)向燈項(xiàng)目分析,培養(yǎng)學(xué)生安全意識(shí)和遵守規(guī)則意識(shí)。2.通過(guò)分支選擇語(yǔ)句的學(xué)習(xí),樹(shù)立學(xué)生正確的人生觀、價(jià)值觀和世界觀。知識(shí)目標(biāo)1.掌握獨(dú)立式鍵盤(pán)的工作原理與應(yīng)用。2.掌握C語(yǔ)言選擇語(yǔ)句的使用。3.掌握典型分支結(jié)構(gòu)程序設(shè)計(jì)和調(diào)試方法。能力目標(biāo)1.能夠根據(jù)設(shè)計(jì)要求,選擇參數(shù)、性能合理的電子元器件,使用Proteus進(jìn)行硬件電路仿真設(shè)計(jì)。2.熟悉C51對(duì)并行I/O端口作輸入口操作的編程方法。3.熟練使用典型分支結(jié)構(gòu)程序設(shè)計(jì)和調(diào)試方法。設(shè)計(jì)要求:
設(shè)計(jì)制作以MCS-51單片機(jī)為主控芯片,外接鍵盤(pán)電路、LED電路,通過(guò)編程實(shí)現(xiàn)汽車(chē)轉(zhuǎn)向燈控制系統(tǒng)?;趩纹瑱C(jī)的汽車(chē)轉(zhuǎn)向燈控制系統(tǒng)鍵盤(pán)知識(shí)開(kāi)關(guān)(switch)按鍵/按鈕(button)鍵盤(pán)工作原理1、鍵輸入信號(hào)判斷:通過(guò)按鍵的接通與斷開(kāi),產(chǎn)生兩種相反的邏輯狀態(tài)低電平“0”與高電平“1”。2、鍵功能的實(shí)現(xiàn):對(duì)于一組鍵或一個(gè)鍵盤(pán),需通過(guò)接口電路與單片機(jī)相連??刹捎貌樵兓蛑袛喾绞綔y(cè)試有無(wú)鍵按下,再確定是哪一個(gè)鍵按下,轉(zhuǎn)入執(zhí)行該鍵的功能程序,執(zhí)行完后再返回主程序按鍵結(jié)構(gòu)與特點(diǎn)機(jī)械式按鍵在按下或釋放時(shí),由于機(jī)械彈性作用的影響,通常伴隨有一定時(shí)間的觸點(diǎn)機(jī)械抖動(dòng),然后其觸點(diǎn)才穩(wěn)定下來(lái)。其抖動(dòng)過(guò)程如右圖所示,抖動(dòng)時(shí)間的長(zhǎng)短與開(kāi)關(guān)的機(jī)械特性有關(guān),一般為5
10ms。若有抖動(dòng),按鍵按下會(huì)被錯(cuò)誤地認(rèn)為是多次操作。按鍵觸點(diǎn)的機(jī)械抖動(dòng)
為了克服按鍵觸點(diǎn)機(jī)械抖動(dòng)所致的檢測(cè)誤判,必須采取去抖動(dòng)措施,可從硬件、軟件兩方面予以考慮。鍵數(shù)較少時(shí),采用硬件去抖(R-S觸發(fā)器構(gòu)成的去抖動(dòng)電路)鍵數(shù)較多時(shí),采用軟件去抖(延時(shí)去抖)
軟件上采取的措施是在檢測(cè)到有按鍵按下時(shí),執(zhí)行一個(gè)10ms左右(具體時(shí)間應(yīng)視所使用的按鍵進(jìn)行調(diào)整)的延時(shí)程序,再確認(rèn)該鍵電平是否仍保持閉合狀態(tài)電平,若仍保持閉合狀態(tài)電平,則確認(rèn)該鍵處于閉合狀態(tài),從而消除抖動(dòng)的影響。按鍵防抖動(dòng)措施鍵盤(pán)與單片機(jī)的連接方式1.獨(dú)立式鍵盤(pán)2.矩陣式鍵盤(pán)鍵盤(pán)掃描方式
在單片機(jī)應(yīng)用系統(tǒng)中,鍵盤(pán)掃描只是CPU的工作內(nèi)容之一。CPU對(duì)鍵盤(pán)的響應(yīng)取決于鍵盤(pán)的工作方式,鍵盤(pán)的工作方式應(yīng)根據(jù)實(shí)際應(yīng)用系統(tǒng)中CPU的工作狀況而定,其選取的原則是既要保證CPU能及時(shí)響應(yīng)按鍵操作,又不要過(guò)多占用CPU的工作時(shí)間。通常,鍵盤(pán)的工作方式有三種,即編程掃描、定時(shí)掃描和中斷掃描。
鍵盤(pán)掃描程序一般應(yīng)包括以下內(nèi)容:(1)判別有無(wú)鍵按下。(2)鍵盤(pán)掃描取得閉合鍵的行、列值。(3)用計(jì)算法或查表法得到鍵值。(4)判斷閉合鍵是否釋放,如沒(méi)釋放則繼續(xù)等待。(5)將閉合鍵鍵號(hào)保存,同時(shí)轉(zhuǎn)去執(zhí)行該閉合鍵的功能。
本系統(tǒng)功能由硬件和軟件兩大部份協(xié)調(diào)完成,硬件部分主要完成信息的顯示;軟件主要完成信號(hào)的處理及控制功能等。汽車(chē)信號(hào)燈控制系統(tǒng)以單片機(jī)AT89C52、電源電路、復(fù)位電路及時(shí)鐘電路構(gòu)成的最小系統(tǒng)模塊和外圍接口電路組成,外圍接口電路主要由LED顯示電路、按鍵輸入電路構(gòu)成。系統(tǒng)通過(guò)單片機(jī)并行I/O口構(gòu)成鍵盤(pán)輸入和LED顯示輸出電路,可實(shí)現(xiàn)汽車(chē)轉(zhuǎn)彎燈中各信號(hào)燈的功能操作。汽車(chē)轉(zhuǎn)向燈系統(tǒng)方案設(shè)計(jì)LED電路按鍵輸入電路復(fù)位電路時(shí)鐘電路電源電路單片機(jī)硬件方案確定最小系統(tǒng)
電路單片機(jī)硬件方案按鍵輸入電路LED顯示電路
硬件電路設(shè)計(jì)汽車(chē)轉(zhuǎn)向燈參考仿真電路圖C語(yǔ)言知識(shí)1、運(yùn)算符和表達(dá)式2、選擇(分支)語(yǔ)句
軟件設(shè)計(jì)運(yùn)算符及表達(dá)式運(yùn)算類(lèi)型運(yùn)算符優(yōu)先級(jí)結(jié)合性括號(hào)運(yùn)算符()1從左至右邏輯非和按位取反!~2從右至左算術(shù)運(yùn)算*/%3從左至右+-4從左至右左移、右移運(yùn)算<<>>5從左至右關(guān)系運(yùn)算<<=>>=6從左至右==!=7從左至右位運(yùn)算&8從左至右^9從左至右|10從左至右邏輯與&&11從左至右邏輯或||12從左至右賦值運(yùn)算與復(fù)合賦值運(yùn)算
=+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=14從右至左選擇分支語(yǔ)句1、if語(yǔ)句2、if……else語(yǔ)句3、if-elseif-else語(yǔ)句
if選擇語(yǔ)句基本if語(yǔ)句的格式如下:if(表達(dá)式){
語(yǔ)句組;
}if語(yǔ)句執(zhí)行過(guò)程:當(dāng)“表達(dá)式”的結(jié)果為“真”時(shí),執(zhí)行其后的“語(yǔ)句組”,否則跳過(guò)該語(yǔ)句組,繼續(xù)執(zhí)行下面的語(yǔ)句。
if語(yǔ)句中的“表達(dá)式”通常為邏輯表達(dá)式或關(guān)系表達(dá)式,在if語(yǔ)句中,“表達(dá)式”必須用括號(hào)括起來(lái)。在if語(yǔ)句中,花括號(hào)“{}”里面的語(yǔ)句組如果只有一條語(yǔ)句,可以省略花括號(hào)。如“if(P3_0==0)P1_0=0;”語(yǔ)句,但是為了提高程序的可讀性和防止程序書(shū)寫(xiě)錯(cuò)誤,建議讀者在任何情況下,都加上花括號(hào)。if-else選擇語(yǔ)句if-else語(yǔ)句的一般格式如下:if(表達(dá)式) {
語(yǔ)句組A;
} else{
語(yǔ)句組B;
}if-else語(yǔ)句執(zhí)行過(guò)程:當(dāng)“表達(dá)式”的結(jié)果為“真”時(shí),執(zhí)行其后的“語(yǔ)句組1”,否則執(zhí)行“語(yǔ)句組2”圖6-if-else語(yǔ)句執(zhí)行流程if……elseif……else語(yǔ)句
if-elseif-else是ifelse語(yǔ)句組成的嵌套,用于實(shí)現(xiàn)多個(gè)條件分支的選擇。其一般格式如下:if(表達(dá)式){語(yǔ)句1;}elseif(表達(dá)式){語(yǔ)句2;}elseif(表達(dá)式){語(yǔ)句3;}elseif(表達(dá)式){語(yǔ)句4;}else{語(yǔ)句N(xiāo);}
if-elseif-else語(yǔ)句執(zhí)行流程
在單片機(jī)應(yīng)用系統(tǒng)中,鍵盤(pán)掃描只是CPU的工作內(nèi)容之一。CPU對(duì)鍵盤(pán)的響應(yīng)取決于鍵盤(pán)的工作方式,鍵盤(pán)的工作方式應(yīng)根據(jù)實(shí)際應(yīng)用系統(tǒng)中CPU的工作狀況而定,其選取的原則是既要保證CPU能及時(shí)響應(yīng)按鍵操作,又不要過(guò)多占用CPU的工作時(shí)間。通常,鍵盤(pán)的工作方式有三種,即編程掃描、定時(shí)掃描和中斷掃描。鍵盤(pán)掃描程序一般應(yīng)包括以下內(nèi)容:(1)判別有無(wú)鍵按下。(2)鍵盤(pán)掃描取得閉合鍵的行、列值。(3)用計(jì)算法或查表法得到鍵值。(4)判斷閉合鍵是否釋放,如沒(méi)釋放則繼續(xù)等待。(5)將閉合鍵鍵號(hào)保存,同時(shí)轉(zhuǎn)去執(zhí)行該閉合鍵的功能。
鍵盤(pán)掃描方式主程序算法及流程圖開(kāi)始初始化:LED全滅,正常行駛;輸入端口初始化;鍵盤(pán)掃描程序Y有鍵按下N主程序設(shè)計(jì)流程圖
主程序主要完成硬件初始化、鍵盤(pán)掃描與鍵位功能處理程序、延時(shí)功能函數(shù)調(diào)用等功能。1.判別有無(wú)鍵按下(延時(shí)去抖)
方法:實(shí)時(shí)讀取I/O口狀態(tài),取反后測(cè)試,若有鍵閉合,則x≠0;若無(wú)鍵閉合,則x=0。當(dāng)測(cè)試有鍵閉合時(shí),需要進(jìn)行延時(shí)去抖動(dòng)處理,按鍵消除抖動(dòng)仍采用延時(shí)函數(shù)。即在發(fā)現(xiàn)有鍵盤(pán)按下后,延時(shí)10ms再進(jìn)行逐行掃描。因?yàn)殒I被按下時(shí)的閉合時(shí)間遠(yuǎn)遠(yuǎn)大于10ms,所以延時(shí)后再掃描再判斷。若某鍵閉合則相應(yīng)單片機(jī)引腳輸入低電平。if(x==0)continue;//如果無(wú)鍵按下則認(rèn)為是按鍵抖動(dòng),重新掃描鍵盤(pán)。2.采用查詢方式確定鍵位,根據(jù)鍵值轉(zhuǎn)去執(zhí)行該閉合鍵的功能方法:如果有鍵按下,則根據(jù)按鍵的不同執(zhí)行相應(yīng)的按鍵操作。鍵值處理程序?yàn)檫x擇(分支)結(jié)構(gòu),使用了if-elseif-else語(yǔ)句。
鍵盤(pán)掃描程序分析鍵盤(pán)掃描程序分析開(kāi)始左轉(zhuǎn)信號(hào)讀取鍵值是否有鍵按下?P1.0按下YYP1.4按下P1.2按下P1.6按下YYNNN右轉(zhuǎn)信號(hào)剎車(chē)信號(hào)緊急信號(hào)NNYwhile(1) {/**************鍵盤(pán)掃描*************************************************/P1=0xff; //鍵盤(pán)初始化
x=P1;//讀鍵盤(pán)狀態(tài)
x=~x;//鍵盤(pán)狀態(tài)取反
if(x==0)continue;//如果無(wú)鍵按下則認(rèn)為是按鍵抖動(dòng),重新掃描鍵盤(pán)
delay(250);//延時(shí)去抖動(dòng)
if(x==0)continue;//如果無(wú)鍵按下則認(rèn)為是按鍵抖動(dòng),重新掃描鍵盤(pán)/*****************根據(jù)鍵值相應(yīng)執(zhí)行功能*******************************************/
if(K1==0)//K1鍵:左轉(zhuǎn)
{P0=tab[0];delay(100);P0=0x00;delay(100);}elseif(K2==0) //K2鍵:右轉(zhuǎn)
{P0=tab[1];delay(100);P0=0x00;delay(100);}elseif(K3==0) //K3鍵:剎車(chē)
{while(k3==0)P0=tab[2];P0=0x00;}elseif(K4==0) //K4鍵:緊急
{P0=tab[3];delay(100);P0=0x00;delay(100);
}elseP0=0x00;//正常}鍵盤(pán)掃描程序分析1.獨(dú)立式按鍵采用每個(gè)按鍵單獨(dú)占用一根I/O口線結(jié)構(gòu)。當(dāng)按下和釋放按鍵時(shí),輸入到單片機(jī)I/O端口的電平是不一樣的,因此可以根據(jù)不同端口電平的變化判斷是否有按鍵按下以及是哪一個(gè)按鍵按下。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一根I/O口線,因此,在按鍵較多時(shí),I/O口線浪費(fèi)較大。2.C51語(yǔ)言供給了4種形式的條件語(yǔ)句:C51提供三種形式的if語(yǔ)句:①if(表達(dá)式){語(yǔ)句;}②if(表達(dá)式){語(yǔ)句1;}else{語(yǔ)句2;}③if(表達(dá)式1){語(yǔ)句1;}elseif(表達(dá)式2){語(yǔ)句2;}elseif(表達(dá)式3){語(yǔ)句3;}……else{語(yǔ)句n;}一鍵多功能按鍵識(shí)別電路設(shè)計(jì)設(shè)計(jì)要求:用一鍵多功能的實(shí)現(xiàn)花樣流水燈的控制。即同一個(gè)鍵位通過(guò)按下次數(shù)選擇控制不同的LED流水燈效果。項(xiàng)目3產(chǎn)品計(jì)數(shù)器設(shè)計(jì)與實(shí)現(xiàn)素質(zhì)目標(biāo)1.通過(guò)數(shù)碼管低功耗節(jié)能顯示培養(yǎng)學(xué)生節(jié)約意識(shí)。2.培養(yǎng)學(xué)生的代碼編寫(xiě)規(guī)范、勇于實(shí)踐的勞動(dòng)精神和精益求精的工匠精神。知識(shí)目標(biāo)1.能說(shuō)出數(shù)碼管常見(jiàn)型號(hào)和類(lèi)型和數(shù)碼管靜態(tài)顯示方式。2.能提供數(shù)碼管靜態(tài)電路設(shè)計(jì)。3.能說(shuō)出C語(yǔ)言一維數(shù)組的使用。能力目標(biāo)1.能分析電路原理圖和能使用常用元器件設(shè)計(jì)數(shù)碼管靜態(tài)顯示電路模塊。2.能夠基于C語(yǔ)言,熟練使用一維數(shù)組的查表功能,學(xué)會(huì)數(shù)碼管靜態(tài)顯示的程序編寫(xiě)調(diào)試。設(shè)計(jì)要求:設(shè)計(jì)一個(gè)產(chǎn)品計(jì)數(shù)器的單片機(jī)應(yīng)用系統(tǒng),即單片機(jī)的某個(gè)I/O口作輸入口,外接紅外線光電傳感器作為實(shí)時(shí)產(chǎn)品計(jì)數(shù),1個(gè)獨(dú)立按鍵為計(jì)數(shù)值復(fù)位清零的功能按鈕;單片機(jī)的某些I/O口作輸出口,接2個(gè)1位數(shù)碼管,通過(guò)編程實(shí)現(xiàn)產(chǎn)品計(jì)數(shù)顯示效果?;趩纹瑱C(jī)的產(chǎn)品計(jì)數(shù)器產(chǎn)品計(jì)數(shù)器簡(jiǎn)介計(jì)數(shù)器是一種可以用在不同工作、生活場(chǎng)合,對(duì)超市、停車(chē)場(chǎng)、公交汽車(chē)、銀行、圖書(shū)館、快遞業(yè)、印刷業(yè)等場(chǎng)合的人數(shù)、車(chē)數(shù)或者產(chǎn)品數(shù)量進(jìn)行統(tǒng)計(jì)和管理。產(chǎn)品計(jì)數(shù)器利用單片機(jī)技術(shù)和光電傳感器、按鍵、數(shù)碼管等組成系統(tǒng),通過(guò)光電傳感器檢測(cè)已加工的產(chǎn)品,并將這一自動(dòng)檢測(cè)信息送入單片機(jī)系統(tǒng)中;通過(guò)獨(dú)立按鍵完成復(fù)位清零操作;通過(guò)數(shù)碼管顯示計(jì)數(shù)數(shù)量信息,采用數(shù)碼管靜態(tài)顯示方式,可以保證其長(zhǎng)時(shí)間運(yùn)作,也具備了高亮度、可視性、小功耗、使用壽命長(zhǎng)等優(yōu)點(diǎn)。數(shù)碼管簡(jiǎn)介數(shù)碼管是一種用于顯示數(shù)字和一些字母符號(hào)的電子元件,通常由LED或熒光燈組成,其基本單元是發(fā)光二極管。通過(guò)對(duì)其不同的管腳輸入相對(duì)應(yīng)的電流,會(huì)使其發(fā)亮,從而能夠顯示時(shí)間、日期、溫度等所有可用數(shù)字表示的參數(shù)。由于它的價(jià)格便宜,被廣泛用作數(shù)字儀器儀表、自動(dòng)化控制裝置、計(jì)算機(jī)的數(shù)顯器件,特別是在家用電器領(lǐng)域應(yīng)用極為普遍,如空調(diào)、熱水器、冰箱等。數(shù)碼管實(shí)物圖常見(jiàn)的數(shù)碼管包括七段數(shù)碼管和十六段數(shù)碼管。七段數(shù)碼管由七個(gè)LED燈組成,分別表示數(shù)字0-9以及一些字母符號(hào)。十六段數(shù)碼管則由16個(gè)LED燈組成,除了數(shù)字0-9以外,還可以表示更多的字母符號(hào)和圖形。數(shù)碼管可以作為一種節(jié)能的顯示器件來(lái)使用,它的功耗通常比液晶顯示器等其他顯示器件要低得多,數(shù)碼管是固態(tài)器件,使用壽命比其他顯示器件要長(zhǎng),數(shù)碼管通常只顯示數(shù)字和字母,而不需要顯示復(fù)雜的圖形和圖像,因此它們可以使用較低的分辨率和較少的像素。這意味著數(shù)碼管所需的計(jì)算和圖形處理能力更低,從而減少了能源消耗。數(shù)碼管的主要特點(diǎn)是:(1)驅(qū)動(dòng)發(fā)光只需要低電壓、小電流的條件,并且其能與CMOS電路、TTL電路兼容。(2)數(shù)碼管的響應(yīng)時(shí)間非常短(<0.1μs),它的高頻特性好,單色性好,亮度高。(3)數(shù)碼管的體積小,重量輕,抗沖擊能力高。數(shù)碼管的結(jié)構(gòu)和分類(lèi)LED數(shù)碼管(LEDSegmentDisplays)是由多個(gè)發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在內(nèi)部連接完成,只需引出它們的各個(gè)筆劃,公共電極。按發(fā)光二極管單元連接方式分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管,如圖所示。數(shù)碼管內(nèi)部電路圖數(shù)碼管字形編碼要使數(shù)碼管顯示出相應(yīng)的數(shù)字或字符,必須使段數(shù)據(jù)口輸出相應(yīng)的字形編碼。字型碼各位定義為:數(shù)據(jù)線D0與a字段對(duì)應(yīng),D1與b字段對(duì)應(yīng)……,依此類(lèi)推。如使用共陰極數(shù)碼管,數(shù)據(jù)為0表示對(duì)應(yīng)字段滅,數(shù)據(jù)為1表示對(duì)應(yīng)字段亮。如使用共陽(yáng)極數(shù)碼管,數(shù)據(jù)為0表示對(duì)應(yīng)字段亮,數(shù)據(jù)為1表示對(duì)應(yīng)字段滅;如要顯示“0”,共陰極數(shù)碼管的字型編碼應(yīng)為:00111111B(即3FH),共陽(yáng)極數(shù)碼管的字型編碼應(yīng)為:11000000B(即C0H)。數(shù)碼管字形編碼顯示數(shù)字共陰順序小數(shù)點(diǎn)滅共陽(yáng)順序小數(shù)點(diǎn)亮共陽(yáng)順序小數(shù)點(diǎn)滅Dpgfedcba16進(jìn)制0001111113FH40HC0H10000011006H79HF9H2010110115BH24HA4H3010011114FH30HB0H40110011066H19H99H5011011016DH12H92H6011111017DH02H82H70000011107H78HF8H8011111117FH00H80H9011011116FH10H90H根據(jù)LED顯示的硬件設(shè)計(jì)方法的不同,LED顯示驅(qū)動(dòng)分為靜態(tài)顯示和動(dòng)態(tài)顯示兩種方法。1.靜態(tài)顯示方式所謂靜態(tài)顯示方式,就是當(dāng)顯示某一個(gè)數(shù)字時(shí),代表相應(yīng)筆劃的發(fā)光二極管恒定發(fā)光,例如7段數(shù)碼管的a、b、c、d、e、f筆段亮?xí)r顯示數(shù)字0;b、c亮?xí)r顯示1;a、b、d、e、g亮?xí)r顯示2等。數(shù)碼管的顯示方式靜態(tài)顯示電路數(shù)碼管的靜態(tài)顯示方式連接所有LED的位選均共同連接到+VCC或GND,每個(gè)LED的8根段選線分別連接一個(gè)8位并行I/O口,從該I/O口送出相應(yīng)的字型碼顯示字型。特點(diǎn)原理簡(jiǎn)單;顯示亮度強(qiáng),無(wú)閃爍;占用I/O資源較多。數(shù)碼管的動(dòng)態(tài)顯示方式連接所有LED的段選線共同連接在一起共用一個(gè)8位I/O口,而每個(gè)LED的位選分別由一根相應(yīng)的I/O口線控制。因此必須采用動(dòng)態(tài)掃描顯示方式,每一個(gè)時(shí)刻只選通其中一個(gè)LED,同時(shí)在段選口送出該位LED的字型碼。動(dòng)態(tài)顯示電路紅外線光電傳感器紅外線光電傳感器是一種利用人肉眼看不見(jiàn)的、波長(zhǎng)為780nm-1mm的近紅外線和紅外線的反射在介質(zhì)中傳播后經(jīng)過(guò)長(zhǎng)距離后返回接收信息來(lái)自動(dòng)檢測(cè)和判別物體的傳感器。紅外線光電傳感器是由發(fā)射器、接收器和檢測(cè)電路三部分組成。紅外線光電傳感器數(shù)組數(shù)組:構(gòu)造數(shù)據(jù)類(lèi)型,是一組有序數(shù)據(jù)的集合數(shù)據(jù)類(lèi)型基本類(lèi)型構(gòu)造類(lèi)型指針類(lèi)型空類(lèi)型整型實(shí)型字符型數(shù)組結(jié)構(gòu)聯(lián)合枚舉單精度型雙精度C語(yǔ)言的數(shù)據(jù)類(lèi)型數(shù)組的概念數(shù)組是構(gòu)造數(shù)據(jù)類(lèi)型,是一組有序數(shù)據(jù)的集合,數(shù)組中的每個(gè)元素都屬于同一種數(shù)據(jù)類(lèi)型,不允許在同一數(shù)組中出現(xiàn)不同類(lèi)型的變量,數(shù)組元素的數(shù)據(jù)類(lèi)型就是該數(shù)組的基本類(lèi)型。例如,整型數(shù)據(jù)的有序集合稱(chēng)為整型數(shù)組,字符型數(shù)據(jù)的有序集合稱(chēng)為字符型數(shù)組。數(shù)組分為一維、二維、三維和多維數(shù)組等,常用的是一維、二維和字符數(shù)組。數(shù)組的基本特點(diǎn)構(gòu)造類(lèi)型數(shù)據(jù):由基本類(lèi)型數(shù)據(jù)按照一定規(guī)則組成。數(shù)組:同類(lèi)型數(shù)據(jù)的一個(gè)有序集合。數(shù)組用一個(gè)名字來(lái)標(biāo)識(shí),稱(chēng)為數(shù)組名。數(shù)組中各元素的順序用下標(biāo)表示,下標(biāo)為n的元素可以表示為數(shù)組名[n]。改變[]中的下標(biāo)就可以訪問(wèn)數(shù)組中所有的元素。應(yīng)用場(chǎng)合:需要處理的數(shù)據(jù)為數(shù)量已知的若干相同類(lèi)型的數(shù)據(jù)時(shí)。注意:數(shù)組先定義,后使用。一維數(shù)組的定義和引用一維數(shù)組的定義:一般格式:類(lèi)型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式];
int
array[10];
unsignedcharnum[7];說(shuō)明:數(shù)組名——見(jiàn)名知意;數(shù)組名中存放的是一個(gè)地址常量,它代表整個(gè)數(shù)組的首地址。同一數(shù)組中的所有元素,按其下標(biāo)的順序占用一段連續(xù)的存儲(chǔ)單元。方括弧而非圓括?。怀A勘磉_(dá)式:可以是常量或符號(hào)常量;表示數(shù)組元素的個(gè)數(shù)(也稱(chēng)數(shù)組長(zhǎng)度)。不允許對(duì)數(shù)組大小作動(dòng)態(tài)定義。數(shù)組元素下標(biāo)從0開(kāi)始。array[0],array[1],…array[9];遵循標(biāo)識(shí)符命名規(guī)則一維數(shù)組的定義和引用一維數(shù)組的初始化:一般格式:數(shù)據(jù)類(lèi)型數(shù)組名[常量表達(dá)式]={初值表};說(shuō)明:定義時(shí)賦初值;intscore[5]={1,2,3,4,5};給一部分元素賦值;intscore[5]={1,2};不對(duì)數(shù)組全部元素賦值,則全部元素被賦值為0;
intscore[5];給全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長(zhǎng)度;
intscore[]={1,2,3,4,5};一維數(shù)組的定義和引用一維數(shù)組的查表功能:數(shù)組的一個(gè)非常有用的功能之一就是查表。表可以事先計(jì)算后裝入程序存儲(chǔ)器中。如:unsignedcharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定義數(shù)組tab[],并初始化unsignedchark;
while(1){ for(k=0;k<10;k++) {P2=tab[k];//查表取數(shù)}}二維數(shù)組或多維數(shù)組數(shù)組的下標(biāo)具有兩個(gè)或兩個(gè)以上,則稱(chēng)為二維數(shù)組或多維數(shù)組。定義二維數(shù)組的一般形式如下:
類(lèi)型說(shuō)明符數(shù)組名[行數(shù)][列數(shù)];其中,數(shù)組名是一個(gè)標(biāo)識(shí)符,行數(shù)和列數(shù)都是常量表達(dá)式。例如:floatdemo2[3][4];//demo2數(shù)組有3行4列共12個(gè)實(shí)型元素二維數(shù)組也可以在定義時(shí)進(jìn)行整體初始化,也可以在定義后單個(gè)地進(jìn)行賦值。例如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};//全部初始化intb[3][4]={{1,2,3,4},{5,6,7,8},{}};//部分初始化,未初始化的個(gè)元素為0字符數(shù)組若一個(gè)數(shù)組的元素是字符型的,則該數(shù)組就是一個(gè)字符數(shù)組。例如:chara[12]={“ChongQing”};//字符數(shù)charadd[3][6]={"weight","height","width"};//字符串?dāng)?shù)組
本系統(tǒng)功能由硬件和軟件兩大部份協(xié)調(diào)完成,硬件部分主要完成信息的顯示;軟件主要完成信號(hào)的處理及控制。與數(shù)碼管電路組成控制系統(tǒng)。該系統(tǒng)硬件主要包括以下幾個(gè)模塊:AT89C52主控模塊、數(shù)碼管靜態(tài)顯示電路模塊等。其中AT89C52主要完成外圍硬件的控制以及一些運(yùn)算功能,傳感器電路完成計(jì)數(shù),按鍵完成復(fù)位功能,數(shù)碼管完成數(shù)字00到99的顯示功能。本系統(tǒng)軟件主要實(shí)現(xiàn)產(chǎn)品計(jì)數(shù)顯示功能。產(chǎn)品計(jì)數(shù)器方案設(shè)計(jì)單片機(jī)數(shù)碼管顯示電路復(fù)位電路時(shí)鐘電路電源電路紅外光電傳感器電路按鍵電路硬件方案確定最小系統(tǒng)單片機(jī)傳感器電路設(shè)計(jì)硬件方案按鍵復(fù)位設(shè)計(jì)數(shù)碼管顯示設(shè)計(jì)硬件電路設(shè)計(jì)產(chǎn)品計(jì)數(shù)器系統(tǒng)硬件結(jié)構(gòu)包括最小系統(tǒng)、按鍵電路(其中一個(gè)按鍵模擬傳感器信號(hào),另一個(gè)按鍵為復(fù)位按鈕)及數(shù)碼管顯示電路。產(chǎn)品計(jì)數(shù)器的計(jì)數(shù)由按鍵電路完成,利用P1口的P1.0~P1.1端口分別模擬外部傳感器信號(hào)和實(shí)現(xiàn)計(jì)數(shù)值復(fù)位清零功能。采用2個(gè)1位共陽(yáng)極數(shù)碼管為顯示器。單片機(jī)的P2口、P3口分別與兩個(gè)數(shù)碼管的段碼連接,其中P2口連接顯示計(jì)數(shù)的十位,P3口連接顯示計(jì)數(shù)的個(gè)位。P2口、P3口的八個(gè)引腳剛好對(duì)應(yīng)P2、P3口特殊功能寄存器的八個(gè)二進(jìn)位,當(dāng)P2、P3口某個(gè)引腳輸出高電平“1”時(shí),對(duì)應(yīng)數(shù)碼管段碼熄滅;當(dāng)P2、P3口某個(gè)引腳輸出低電平“0”時(shí),對(duì)應(yīng)數(shù)碼管段碼點(diǎn)亮。若將計(jì)數(shù)值進(jìn)行十進(jìn)制數(shù)分離,再分別給P2、P3口送入不同的數(shù)字,就能在兩個(gè)數(shù)碼管上看到數(shù)值的顯示了。產(chǎn)品計(jì)數(shù)器的硬件原理圖算法分析對(duì)于數(shù)碼管而言,要顯示數(shù)字或字母,首先應(yīng)該選中該數(shù)碼管,然后點(diǎn)亮相應(yīng)字段。例如:顯示數(shù)字“3”,應(yīng)當(dāng)是a亮、b亮、c亮、d亮、e不亮、f不亮、g亮、Dp不亮??梢粤谐鰯?shù)碼管顯示數(shù)字的段碼表(以兩位數(shù)碼管顯示的個(gè)位數(shù)為例)。產(chǎn)品計(jì)數(shù)器系統(tǒng)程序設(shè)計(jì)段名稱(chēng)DPGFEDCBA對(duì)應(yīng)段碼對(duì)應(yīng)引腳P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0數(shù)字011000000C0H數(shù)字111111001F9H數(shù)字210100100A4H數(shù)字310110000B0H數(shù)字41001100199H數(shù)字51001001092H數(shù)字61000001082H數(shù)字711111000F8H數(shù)字81000000080H數(shù)字91001000090H共陽(yáng)數(shù)碼管顯示數(shù)字的段碼表算法分析由于數(shù)碼管顯示的數(shù)字“0~9”的字型碼“C0H、F9H、A4H、B0H、99H、92H、82H、F8H、80H、90H”沒(méi)有規(guī)律可循,只能采用查表的方式來(lái)完成我們所需的要求。在程序設(shè)計(jì)中可以設(shè)計(jì)一個(gè)變量,每隔一定時(shí)間在“0~9”之間變化,然后按照這個(gè)數(shù)據(jù)去查找段碼表,把查到的數(shù)據(jù)送到P3口。
所謂表格(數(shù)組)是指在程序中定義的一串有序的常數(shù),如平方表、字形碼表、鍵碼表等。因?yàn)槌绦蛞话愣际枪袒诔绦虼鎯?chǔ)器(通常是只讀存儲(chǔ)器ROM類(lèi)型)中,因此可以說(shuō)表格(數(shù)組)是預(yù)先定義在程序的數(shù)據(jù)區(qū)中,然后和程序一起固化在ROM中的一串常數(shù)。在程序設(shè)計(jì)中,有時(shí)需要預(yù)先把非線性數(shù)據(jù)以表格的形式存放在存儲(chǔ)器中,然后使用程序讀出,這種能讀出數(shù)據(jù)表格的程序就稱(chēng)為查表程序。查表程序的關(guān)鍵是表格的定義和如何實(shí)現(xiàn)查表。產(chǎn)品計(jì)數(shù)器系統(tǒng)程序設(shè)計(jì)繪制程序流程圖
(1)主程序流程圖繪制主程序主要完成數(shù)碼管靜態(tài)顯示(即循環(huán)查表)、延時(shí)功能函數(shù)調(diào)用以及鍵盤(pán)掃描與鍵位功能處理子程序等功能。數(shù)碼管靜態(tài)顯示子程序是在兩個(gè)1位數(shù)碼管上顯示計(jì)數(shù)值,其中一個(gè)數(shù)碼管作為個(gè)位數(shù)顯示,與單片機(jī)的P3口相連;另外一個(gè)數(shù)碼管作為十位數(shù)顯示,與單片機(jī)的P2口相連。顯示的時(shí)候?qū)€(gè)位和十位分離后通過(guò)循環(huán)查表的方式來(lái)實(shí)現(xiàn)顯示。鍵盤(pán)掃描與鍵位功能處理子程序是查詢判斷哪個(gè)功能鍵被按下,確認(rèn)某個(gè)鍵被按下后再轉(zhuǎn)到該鍵的功能處理程序。產(chǎn)品計(jì)數(shù)器系統(tǒng)程序設(shè)計(jì)產(chǎn)品計(jì)數(shù)器系統(tǒng)程序設(shè)計(jì)主程序流程圖繪制程序流程圖
(2)定義段碼表(數(shù)組)使用一維數(shù)組存放需要使用的數(shù)碼管段碼值來(lái)實(shí)現(xiàn)需要查詢的數(shù)據(jù)表。因?yàn)橛玫?到9十個(gè)段碼值,所以要定義一個(gè)10字節(jié)的一維數(shù)組,按順序依次放入0到9的段碼值。如下:unsignedcharcodetab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};產(chǎn)品計(jì)數(shù)器系統(tǒng)程序設(shè)計(jì)繪制程序流程圖
(3)查表語(yǔ)句利用在for循環(huán)中執(zhí)行一維數(shù)組實(shí)現(xiàn)查表:unsignedchark;while(1){ for(k=0;k<10;k++) {P3=tab[k];//查表獲得的數(shù)據(jù)0-9送P3口輸出顯示
}}產(chǎn)品計(jì)數(shù)器系統(tǒng)程序設(shè)計(jì)1.靜態(tài)顯示是指顯示驅(qū)動(dòng)電路具有輸出鎖存功能,待顯示的字符編碼被CPU送出后,數(shù)碼管會(huì)一直顯示該字符不變,CPU不需要再控制數(shù)碼管,如果要顯示新的字符,CPU只要再次送出即可。
2.采用靜態(tài)顯示方式,較小的電流就可以獲得較高的亮度,且占用CPU時(shí)間較少,編程簡(jiǎn)單,顯示便于檢測(cè)和控制,但其占用的I/O口線較多,硬件電路復(fù)雜,成本高,只適合顯示位數(shù)較少的場(chǎng)合。1.先把0到9中的奇數(shù)從小到大顯示,再把偶數(shù)從大到小顯示,可以設(shè)計(jì)多種方法。2.利用單片機(jī)的四組端口實(shí)現(xiàn)四位時(shí)鐘分和秒的顯示。3.讓數(shù)字1變2之前“1”閃爍1次,2變3閃之前“2”爍2次,3變4之前“3”閃爍3次,依此類(lèi)推循環(huán)顯示。4.讓3題中的數(shù)字都在1秒內(nèi)完成閃爍。即每個(gè)數(shù)字閃爍的次數(shù)不同但都在1秒內(nèi)完成規(guī)定的閃爍次數(shù)。項(xiàng)目4籃球計(jì)分器設(shè)計(jì)與實(shí)現(xiàn)素質(zhì)目標(biāo)1.通過(guò)調(diào)研顯示裝置的應(yīng)用現(xiàn)狀,樹(shù)立科技創(chuàng)新和民族品牌意識(shí)。2.培養(yǎng)學(xué)生自主學(xué)習(xí)及團(tuán)隊(duì)協(xié)作意識(shí),提高學(xué)生合作探究解決問(wèn)題的能力。3.培養(yǎng)學(xué)生的代碼編寫(xiě)規(guī)范、勇于實(shí)踐的勞動(dòng)精神和精益求精的工匠精神。知識(shí)目標(biāo)1.能說(shuō)出數(shù)碼管動(dòng)態(tài)顯示方式。2.能提供數(shù)碼管動(dòng)態(tài)電路設(shè)計(jì)。3.能說(shuō)出全局變量的使用。能力目標(biāo)1.能分析電路原理圖和能使用常用元器件設(shè)計(jì)數(shù)碼管電路模塊;2.能夠基于C語(yǔ)言,熟練運(yùn)用數(shù)組和全局變量,學(xué)會(huì)數(shù)碼管動(dòng)態(tài)顯示的程序編寫(xiě)調(diào)試。設(shè)計(jì)要求:設(shè)計(jì)一個(gè)籃球比賽計(jì)分器的單片機(jī)應(yīng)用系統(tǒng),即單片機(jī)的某個(gè)I/O口作輸入口,接5個(gè)獨(dú)立按鍵為功能按鈕;單片機(jī)的某些I/O口作輸出口,接兩個(gè)4位數(shù)碼管,通過(guò)編程實(shí)現(xiàn)A、B兩隊(duì)的比分顯示效果;單片機(jī)的某些I/O口作輸出口,接兩個(gè)LED發(fā)光二極管,作為A、B兩隊(duì)的加分指示燈。(1)用數(shù)碼管顯示A、B兩隊(duì)的分值;能顯示A、B兩個(gè)字母,這兩個(gè)字母后面顯示兩隊(duì)的得分;(2)有5個(gè)按鍵,按下1鍵是A、B兩隊(duì)加減分的切換鍵,按下2鍵數(shù)碼管顯示加1分,按下3鍵數(shù)碼管顯示加2分,按下4鍵數(shù)碼管顯示加3分,按下5鍵數(shù)碼管顯示復(fù)位0分;(3)用兩個(gè)LED發(fā)光二極管作為兩個(gè)隊(duì)的加分指示信號(hào)燈?;趩纹瑱C(jī)的籃球計(jì)分器籃球計(jì)分器的作用及原理一、計(jì)分器的作用計(jì)分器是一種可以用在不同工作、生活場(chǎng)合,在任意比賽中進(jìn)行計(jì)時(shí)、記分,比賽隊(duì)伍信息、犯規(guī)等的信息顯示裝置,對(duì)各項(xiàng)比賽的順利進(jìn)行和準(zhǔn)確記錄十分重要,對(duì)于提高比賽質(zhì)量有著非常至關(guān)重要的作用。計(jì)分器的功能完善、操作簡(jiǎn)單、維護(hù)方便,不僅應(yīng)用在籃球比賽中,也可以運(yùn)用在任何形式的比賽。二、籃球計(jì)分器的原理籃球比賽計(jì)分器利用單片機(jī)技術(shù)和按鍵、顯示器等組成系統(tǒng),通過(guò)按鍵系統(tǒng)完成計(jì)分操作;通過(guò)顯示裝置如數(shù)碼管、LED顯示屏等將比賽內(nèi)容顯示出來(lái),特別有的大型LED顯示屏根據(jù)球類(lèi)比賽的特點(diǎn)精心設(shè)計(jì),采用高亮度LED制作,可以保證其長(zhǎng)時(shí)間運(yùn)作,也具備了高亮度、可視性、小功耗、使用壽命長(zhǎng)等優(yōu)點(diǎn)。數(shù)碼管動(dòng)態(tài)顯示工作原理連接
數(shù)碼管動(dòng)態(tài)顯示的連接方式是將所有數(shù)碼管的段碼“a、b、c、d、e、f、g、dp”的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制特點(diǎn)節(jié)約I/O資源功耗低動(dòng)態(tài)顯示電路LED數(shù)碼管顯示驅(qū)動(dòng)技術(shù)位碼用三極管控制
三極管是日常應(yīng)用電路中經(jīng)常會(huì)用到的器件。它分為PNP型和NPN型。三極管的規(guī)格可以根據(jù)LED所需的驅(qū)動(dòng)電流大小進(jìn)行選擇,電流比較小的可以用9013、8550等小功率晶體管,電流比較大的則可以BU208等大功率三極管。三極管驅(qū)動(dòng)LED數(shù)碼管顯示驅(qū)動(dòng)技術(shù)三極管是我們的日常應(yīng)用電路中經(jīng)常會(huì)用到的一個(gè)器件。分為PNP和NPN型。三極管常用功能:1、開(kāi)關(guān)控制2、信號(hào)放大3、電平轉(zhuǎn)換共陰數(shù)碼管共陽(yáng)數(shù)碼管
8050(9014)8550(9015)LED數(shù)碼管顯示驅(qū)動(dòng)技術(shù)PNP型三極管NPN型三極管三極管的型號(hào)記憶方式:箭頭朝哪腿朝哪,導(dǎo)通電壓順箭頭過(guò),電壓導(dǎo)通,電流控制b:基極e:發(fā)射極c:集電極LED數(shù)碼管顯示驅(qū)動(dòng)技術(shù)LED驅(qū)動(dòng)控制專(zhuān)用電路TM1618
TM1618是一種帶鍵盤(pán)掃描接口的LED(發(fā)光二極管顯示器)驅(qū)動(dòng)控制專(zhuān)用電路,如圖所示。內(nèi)部集成有MCU數(shù)字接口、數(shù)據(jù)鎖存器、LED高壓驅(qū)動(dòng)、鍵盤(pán)掃描等電路。主要應(yīng)用于VCR、VCD、DVD及家庭影院等產(chǎn)品的顯示屏驅(qū)動(dòng)。TM1618驅(qū)動(dòng)共陽(yáng)數(shù)碼屏接LED數(shù)碼管顯示驅(qū)動(dòng)技術(shù)段碼驅(qū)動(dòng)采用總線驅(qū)動(dòng)集成電路74HC244/74HC24574HC245是一個(gè)集成緩沖、驅(qū)動(dòng)于一體的集成電路,可應(yīng)用于時(shí)鐘驅(qū)動(dòng)、地址驅(qū)動(dòng)、PC機(jī)板的總線收發(fā)總線。74LS245是8路同相三態(tài)雙向數(shù)據(jù)總線驅(qū)動(dòng)芯片,具有雙向三態(tài)功能,既可以輸出,也可以輸入數(shù)據(jù)。/G為低電平有效;DIR=“1”,信號(hào)由A向B傳輸。引出端符號(hào):A
總線端B
總線端/G
三態(tài)允許端(低電平有效)DIR
方向控制端74HC245LED數(shù)碼管顯示驅(qū)動(dòng)技術(shù)移位寄存器74HC59574HC595具有8位串入并出的移位寄存器和一個(gè)8位輸出鎖存器,而且移位寄存器和輸出鎖存器的控制是各自獨(dú)立的,可以實(shí)現(xiàn)在輸出的同時(shí),傳送下一組移位數(shù)據(jù),而不影響以前的輸出狀態(tài)。74HC595局部變量和全局變量變量可以在程序中函數(shù)內(nèi)部或所有的函數(shù)外部?jī)蓚€(gè)地方說(shuō)明。根據(jù)所定義變量值位置(作用域)的不同,
變量可分為局部變量和全局變量。從變量值存在的時(shí)間(生存期)來(lái)分的
可以有靜態(tài)存儲(chǔ)變量和動(dòng)態(tài)存儲(chǔ)變量之分。具體包括自動(dòng)的(auto)、靜態(tài)的(static)、寄存器的(register)、外部的(extern)4種C語(yǔ)言中的變量存儲(chǔ)分類(lèi)指定auto變量
auto變量動(dòng)態(tài)分配存儲(chǔ)空間,用完后釋放。auto稱(chēng)為自動(dòng)變量
如果函數(shù)不做其他說(shuō)明的話均為自動(dòng)變量。static變量
static變量,存儲(chǔ)單元固定,用完后不釋放extern變量
extern全局變量(在函數(shù)外部定義)的作用域?yàn)閺淖兞康穆暶魈庨_(kāi)始,到本程序文件的結(jié)尾。有時(shí)還需要用extern來(lái)聲明外部變量,以擴(kuò)展外部變量的作用范圍。
如:一個(gè)文件中定義:intnum;另一個(gè)文件中聲明引用:externintnum;//注意,聲明時(shí)類(lèi)型要與定義一致局部變量在函數(shù)內(nèi)部定義的變量稱(chēng)為局部變量。局部變量?jī)H由被定義的函數(shù)內(nèi)部的語(yǔ)句所訪問(wèn)。函數(shù)以“{”開(kāi)始,以“}”結(jié)束,也就是說(shuō)局部定義的變量只在{}內(nèi)有效,即只有在程序執(zhí)行到定義它的模塊時(shí)才能生成,一旦執(zhí)行退出該模塊則起變量消失。
例:func
(){
int
x;
//等價(jià)于autointx,局部變量x的作用域很明確
......}全局變量全局變量與局部變量不同,能貫穿整個(gè)程序,并且可被任何一個(gè)模塊使用。它們?cè)谡麄€(gè)程序執(zhí)行期間保持有效。全局變量定義在所有函數(shù)之外,它可以被函數(shù)內(nèi)的任何表達(dá)式訪問(wèn),在程序執(zhí)行的過(guò)程中一直有效。全局變量通常在程序頂部定義。全局變量一旦定義后就在程序的任何地方可知??梢栽诔绦蛑虚g的任何地方定義全局變量,但要在任何函數(shù)之外。全局變量例如:/******************************************************/……
unsignedcharh,m;
//定義全局變量/******************顯示函數(shù)************************/voiddisplay(ucharh,ucharm){dat[0]=h/10; //1位dat[1]=h%10;
//2位dat[2]=m/10; //3位dat[3]=m%10; //4位……}/******************主函數(shù)***************************/voidmain(){
h=12,m=30;display(h,m); //初始時(shí)間位12:30}
本系統(tǒng)功能由硬件和軟件兩大部份協(xié)調(diào)完成,硬件部分主要完成信息的顯示;軟件主要完成信號(hào)的處理及控制。本系統(tǒng)的硬件采用模塊化設(shè)計(jì),以AT89C52單片機(jī)為核心,與時(shí)鐘電路、復(fù)位電路及數(shù)碼管顯示組成控制系統(tǒng)。該系統(tǒng)硬件主要包括以下幾個(gè)模塊:AT89C52主控模塊、數(shù)碼管顯示模塊、按鍵電路模塊、加分LED顯示電路等。本系統(tǒng)軟件主要實(shí)現(xiàn)籃球計(jì)數(shù)器加分、減分等顯示功能。籃球計(jì)分器方案設(shè)計(jì)單片機(jī)數(shù)碼管顯示電路復(fù)位電路時(shí)鐘電路電源電路按鍵電路加分LED顯示電路硬件方案確定最小系統(tǒng)單片機(jī)兩隊(duì)加分顯示設(shè)計(jì)硬件方案按鍵電路設(shè)計(jì)數(shù)碼管顯示設(shè)計(jì)硬件電路設(shè)計(jì)動(dòng)態(tài)顯示的特點(diǎn)是將所有位數(shù)碼管的段選線并聯(lián)在一起,由位選線控制是哪一位數(shù)碼管有效。選亮數(shù)碼管采用動(dòng)態(tài)掃描顯示。所謂動(dòng)態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺(jué)暫留(20ms)作用,使人的感覺(jué)好像各位數(shù)碼管同時(shí)都在顯示。數(shù)碼管的動(dòng)態(tài)顯示要點(diǎn)提示1.若干個(gè)數(shù)碼管的段端接一起,通過(guò)單片機(jī)的I/O口控制數(shù)碼管的位選端,實(shí)現(xiàn)若干個(gè)數(shù)碼管輪流顯示2.單片機(jī)的1個(gè)I/O口帶著若干個(gè)數(shù)碼管,電流小,所以數(shù)碼管亮度低。所以要加驅(qū)動(dòng)(加三極管、驅(qū)動(dòng)器),增加亮度。共陽(yáng)數(shù)碼管:需要高電平,加PNP三極管(8550)共陰數(shù)碼管:需要低電平,加NPN三極管(8050)3.延時(shí)時(shí)間合理設(shè)置;過(guò)長(zhǎng)或過(guò)慢都不行。硬件電路設(shè)計(jì)籃球比賽計(jì)分器包括最小系統(tǒng)、得分按鍵電路及數(shù)碼管顯示電路?;@球比賽計(jì)分器的得分由按鍵電路完成,利用P1口的P1.0~P1.4端口分別實(shí)現(xiàn)AB隊(duì)切換、加1分、加2分、加3分、AB兩隊(duì)比分清零的功能。采用兩個(gè)4位共陽(yáng)極數(shù)碼管為顯示器。它們的段選端連接到P0口,位選端分別連接到P2口,P0口的上拉電阻可以使用8個(gè)1K電阻。兩隊(duì)的加分指示燈連接到P3口的P3.0和P3.1端口籃球計(jì)分器的硬件原理圖算法分析
4位數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,Dp"的同名端是連在一起的,當(dāng)程序從P0口輸出字形碼時(shí),在同一個(gè)時(shí)間所有數(shù)碼管都會(huì)接收到相同的字形碼。
如何顯示出4個(gè)不同的字符呢?因此,就要使用動(dòng)態(tài)掃描了,在程序中,首先顯示一個(gè)數(shù),然后關(guān)掉;然后顯示第二個(gè)數(shù),又關(guān)掉,顯示第三個(gè)數(shù),又關(guān)掉……直到所有要顯示的4個(gè)數(shù)完成,再?gòu)念^開(kāi)始掃描。輪流點(diǎn)亮掃描過(guò)程中,每位顯示器的點(diǎn)亮?xí)r間是極為短暫的(約1ms),由于人的視覺(jué)暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位顯示器并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感?;@球計(jì)分器系統(tǒng)程序設(shè)計(jì)籃球計(jì)分器系統(tǒng)程序設(shè)計(jì)開(kāi)始數(shù)碼管1置位查表取數(shù)顯示延時(shí)熄滅(關(guān)斷顯示)數(shù)碼管2置位查表取數(shù)顯示延時(shí)熄滅(關(guān)斷顯示)數(shù)碼管3置位查表取數(shù)顯示延時(shí)熄滅(關(guān)斷顯示)動(dòng)態(tài)顯示算法分析繪制程序流程圖
(1)主程序流程圖繪制
主程序包括鍵盤(pán)掃描與鍵位功能處理子程序、十進(jìn)制數(shù)分離子程序和數(shù)碼管動(dòng)態(tài)掃描顯示子程序的調(diào)用。鍵盤(pán)掃描與鍵位功能處理子程序是查詢判斷哪個(gè)功能鍵被按下,確認(rèn)某個(gè)鍵被按下后再轉(zhuǎn)到該鍵的功能處理程序。十進(jìn)制數(shù)分離子程序是將A、B兩隊(duì)積分?jǐn)?shù)據(jù)的百位、十位和個(gè)位上的數(shù)字分離出來(lái)并送數(shù)碼管顯示。數(shù)碼管動(dòng)態(tài)掃描顯示子程序是在數(shù)碼管上動(dòng)態(tài)顯示A、B隊(duì)和它們的比分情況?;@球計(jì)分器系統(tǒng)程序設(shè)計(jì)繪制程序流程圖
(2)數(shù)據(jù)分離子程序設(shè)計(jì)
十進(jìn)制數(shù)分離子程序的編寫(xiě)思路是:表示A隊(duì)在數(shù)碼管的最高位顯示“A”,則引用數(shù)組中字符A的編碼位置下標(biāo)10,接著將積分對(duì)100取整即得到百位數(shù)字送數(shù)碼管,然后將積分對(duì)100求余數(shù)運(yùn)算,用余數(shù)對(duì)10取整即得到十位數(shù)字,最后將積分對(duì)10求余運(yùn)算,得到的余數(shù)即個(gè)位數(shù)字?;@球計(jì)分器系統(tǒng)程序設(shè)計(jì)繪制程序流程圖
(3)數(shù)碼管動(dòng)態(tài)掃描顯示子程序
數(shù)碼管動(dòng)態(tài)顯示的具體編程思路是:第一位數(shù)碼管顯示“A”→延時(shí)1ms→關(guān)閉所有數(shù)碼管顯示→第二位數(shù)碼管顯示“百位數(shù)”→延時(shí)1ms→關(guān)閉所有數(shù)碼管顯示→第三位數(shù)碼管顯示“十位數(shù)”→延時(shí)1ms→關(guān)閉所有數(shù)碼管顯示→第四位數(shù)碼管顯示“個(gè)位數(shù)”→延時(shí)1ms→關(guān)閉所有數(shù)碼管顯示→返回到第一步重新進(jìn)行新一輪掃描過(guò)程?;@球計(jì)分器系統(tǒng)程序設(shè)計(jì)送段碼送位碼延時(shí)關(guān)數(shù)碼最后一位?移位N動(dòng)態(tài)顯示掃描流程圖開(kāi)始結(jié)束繪制程序流程圖
(3)數(shù)碼管動(dòng)態(tài)掃描顯示子程序
voiddisplay(){
unsignedchartmp,i;//定義局部變量tmp=0x01;for(i=0;i<4;i++){
P3=tmp;//送位碼P2=tab[i];//送段碼delay(2);//延時(shí)P2=0XFF;//關(guān)斷數(shù)碼管
tmp=tmp<<1;//左移到下一位數(shù)碼管}}
程序說(shuō)明:延時(shí)時(shí)間合理設(shè)置;過(guò)長(zhǎng)或過(guò)慢都不行?;@球計(jì)分器系統(tǒng)程序設(shè)計(jì)1.LED數(shù)碼管按顯示方式有靜態(tài)顯示和動(dòng)態(tài)(掃描)顯示。
動(dòng)態(tài)顯示掃描是一種輪流點(diǎn)亮各位數(shù)碼管的顯示方式,即在某一時(shí)段,只讓其中一位數(shù)碼管的“位選端”有效,并送出相應(yīng)的字型顯示編碼。此時(shí),其它位的數(shù)碼管因“位選端”無(wú)效而都處于熄滅狀態(tài),下一時(shí)段按順序選通數(shù)碼管的另一位“位選端”有效,并送出相應(yīng)的字型顯示編碼,按此規(guī)律循環(huán)下去,即可使各位數(shù)碼管分別間斷地顯示出相應(yīng)的字符。2.全局變量與局部變量1.在本項(xiàng)目籃球計(jì)分器現(xiàn)有功能
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026全國(guó)企業(yè)員工全面質(zhì)量管理知識(shí)考試題及答案
- 醫(yī)院智能化管理系統(tǒng)方案
- 2026年礦山防排水安全管理工作計(jì)劃
- 財(cái)務(wù)管理與會(huì)計(jì)操作指南(標(biāo)準(zhǔn)版)
- 國(guó)防科技工業(yè)保密管理手冊(cè)
- 婦幼保健院水電管線改造方案
- 婦幼保健院健康促進(jìn)活動(dòng)方案
- 通信行業(yè)設(shè)備維護(hù)與故障處理手冊(cè)
- 安全生產(chǎn)管理與應(yīng)急處理手冊(cè)
- 鋼結(jié)構(gòu)各工藝環(huán)節(jié)銜接方案
- T/CECS 10378-2024建筑用輻射致冷涂料
- 云南省昆明市云大附小小學(xué)六年級(jí)小升初期末英語(yǔ)試卷(含答案)
- 急性發(fā)熱課件
- 農(nóng)村建房合同協(xié)議書(shū)電子版(2025年版)
- SJG 46-2023 建設(shè)工程安全文明施工標(biāo)準(zhǔn)
- 部編版小學(xué)語(yǔ)文四年級(jí)上冊(cè)習(xí)作《我的心兒怦怦跳》精美課件
- DLT 593-2016 高壓開(kāi)關(guān)設(shè)備和控制設(shè)備
- DB11∕T 190-2016 公共廁所建設(shè)標(biāo)準(zhǔn)
- 房屋過(guò)戶提公積金合同
- D-二聚體和FDP聯(lián)合檢測(cè)在臨床中的應(yīng)用現(xiàn)狀
- 高一英語(yǔ)完形填空專(zhuān)項(xiàng)訓(xùn)練100(附答案)及解析
評(píng)論
0/150
提交評(píng)論