單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 劉霞 第3、4章 單片機(jī)輸出顯示控制、單片機(jī)輸入檢測(cè)_第1頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 劉霞 第3、4章 單片機(jī)輸出顯示控制、單片機(jī)輸入檢測(cè)_第2頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 劉霞 第3、4章 單片機(jī)輸出顯示控制、單片機(jī)輸入檢測(cè)_第3頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 劉霞 第3、4章 單片機(jī)輸出顯示控制、單片機(jī)輸入檢測(cè)_第4頁(yè)
單片機(jī)原理與應(yīng)用(C51編程+Proteus仿真) 課件 劉霞 第3、4章 單片機(jī)輸出顯示控制、單片機(jī)輸入檢測(cè)_第5頁(yè)
已閱讀5頁(yè),還剩109頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

單片機(jī)輸出顯示控制03介紹單片機(jī)與常用的發(fā)光二極管、數(shù)碼管、LED點(diǎn)陣顯示屏、LCD液晶顯示器的接口設(shè)計(jì)與軟件編程。3單片機(jī)輸出顯示控制01單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)0203單片機(jī)控制數(shù)碼管單片機(jī)控制發(fā)光二極管0405單片機(jī)控制液晶顯示器LCD單片機(jī)控制LED點(diǎn)陣顯示3.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)G1G20結(jié)論:P0口作為輸出口使用,需需外接上拉電阻,一般為4.7KΩ或10KΩ1P0做通用輸入輸出口使用P0做輸出口使用一、P0口3.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)一、P0口+5VG1G201P0做通用輸入輸出口使用結(jié)論:P0口作為輸入口使用,需先寫“1”P0做輸入口使用準(zhǔn)雙向口:高電平、低電平3.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)G1G212P0做數(shù)據(jù)/地址總線使用一、P0口P0口地址總線低8位P0做地址總線輸出使用控制線13.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)一、P0口G1G20P0做數(shù)據(jù)線輸入使用2P0做數(shù)據(jù)/地址總線使用結(jié)論:P0口地址總線低8位P0口數(shù)據(jù)總線(8位)控制線0此時(shí)不能作為通用的I/O端口CPU寫入1,下方場(chǎng)效應(yīng)管截止上方場(chǎng)效應(yīng)管截止高阻狀態(tài)雙向口:高電平、低電平、高阻3.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)二、P1口P1口做通用輸入輸出口使用結(jié)論:讀鎖存器內(nèi)部總線讀引腳DCLQ鎖存器P1.XVccP1作為輸入口使用,需先寫“1”P1作為輸出口使用,無(wú)需外接上拉電阻3.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)結(jié)論:1P2做通用輸入輸出口使用三、P2口DCLQ.鎖存器MUXP2.x地址控制讀鎖存器內(nèi)部總線讀引腳VccP2作為輸入口使用,需先寫“1”P2作為輸出口使用,無(wú)需外接上拉電阻3.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)結(jié)論:2P2做地址總線使用三、P2口DCLQ.鎖存器MUXP2.x地址控制讀鎖存器內(nèi)部總線讀引腳VccP2口作為地址總線高8位,與P0口構(gòu)成16位地址,尋址64KB地址空間P2做地址總線使用,就不能再做普通I/O口使用3.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)結(jié)論:1P3做通用輸入輸出口使用四、P3口P3作為輸入口使用,需先寫“1”P3作為輸出口使用,無(wú)需外接上拉電阻讀鎖存器內(nèi)部總線讀引腳DCLQ鎖存器P3.x第二功能輸出端第二功能輸入端Vcc13.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)P3第二功能四、P3口讀鎖存器內(nèi)部總線讀引腳DCLQ鎖存器P3.x第二功能輸出端第二功能輸入端Vcc21

第二輸出功能

D鎖存自動(dòng)置13.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)P3第二功能四、P3口讀鎖存器內(nèi)部總線讀引腳DCLQ鎖存器P3.x第二功能輸出端第二功能輸入端Vcc21

第二輸入功能

D鎖存自動(dòng)置1P3口第一功能與第二功能,究竟是使用哪個(gè)功能,完全是由單片機(jī)執(zhí)行的指令控制來(lái)自動(dòng)切換的,用戶不需要進(jìn)行任何設(shè)置。

第二功能輸出端自動(dòng)置113.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)1P0:通用I/O使用,每位可驅(qū)動(dòng)8個(gè)LSTTL五、I/O驅(qū)動(dòng)能力P0口的某位輸出高電平時(shí),可提供400μA的拉電流P0口某位為低電平(0.45V)時(shí),可提供3.2mA的灌電流2P1~P3:通用I/O使用,每位可驅(qū)動(dòng)4個(gè)LSTTL輸出高電平,則輸出的拉電流僅為數(shù)百微安輸出低電平,灌電流從單片機(jī)外部流入內(nèi)部,則將大大增加流過(guò)的灌電流值單片機(jī)任何一個(gè)端口要想獲得較大的驅(qū)動(dòng)能力,要采用低電平輸出3單片機(jī)I/O口驅(qū)動(dòng)能力不夠,要外接驅(qū)動(dòng)電路4三極管、ULN2003、L298N、L9110等驅(qū)動(dòng)芯片3.1單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)P0口~P3口使用方法總結(jié)P0~P3作為通用I/O口時(shí),為準(zhǔn)雙向口,只有高電平和低電平2個(gè)狀態(tài);P0~P3作為輸入口使用時(shí),要先向端口寫“1”;123P0作為輸出口使用時(shí),漏極開(kāi)路,要外接上拉電阻(1KΩ~10KΩ);45P1~P3作為輸出口使用時(shí),內(nèi)部有上拉電阻,不用外接上拉電阻;67并行總線構(gòu)成:P2口(高8位)和P0口(低8位)構(gòu)成16位地址總線;P0口數(shù)據(jù)總線,P0在ALE引腳控制下分時(shí)復(fù)用。P0~P3只要作為第二功能使用,就不能再做通用I/O使用了。P0~P3的第一功能和第二功能,由單片機(jī)執(zhí)行的指令控制自動(dòng)切換,用戶不需要進(jìn)行任何設(shè)置。3單片機(jī)輸出顯示控制01單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)0203單片機(jī)控制數(shù)碼管單片機(jī)控制發(fā)光二極管0405單片機(jī)控制液晶顯示器LCD單片機(jī)控制LED點(diǎn)陣顯示3.2單片機(jī)控制發(fā)光二極管一、發(fā)光二極管簡(jiǎn)介圖1直插式LED圖2貼片式LED圖4LED驅(qū)動(dòng)電路圖3LED符號(hào)正向?qū)妷菏?.7~2.2V;限流電阻阻值可選150Ω~3kΩ之間電流越大,燒壞的速度也就越快。在設(shè)計(jì)時(shí)需加限流電阻工作電流一般在1~20mA。!3.2單片機(jī)控制發(fā)光二極管二、單片機(jī)與LED的連接圖6單片機(jī)P1~P3口與LED的連接圖5單片機(jī)P0口與LED的連接上拉電阻:1~10kΩ之間選取。(a)LED亮單片機(jī)上電后現(xiàn)象(a)(b)(c)(d)(b)LED不亮限流電阻:150Ω~3kΩ之間P1~P3口如何連接LED??3.2單片機(jī)控制發(fā)光二極管三、點(diǎn)亮一個(gè)發(fā)光二極管仿真實(shí)例任務(wù)要求:控制1個(gè)發(fā)光二極管點(diǎn)亮。圖7P0口與LED連接圖8P1口與LED連接1硬件電路設(shè)計(jì)3.2單片機(jī)控制發(fā)光二極管三、點(diǎn)亮一個(gè)發(fā)光二極管仿真實(shí)例任務(wù)要求:控制1個(gè)發(fā)光二極管點(diǎn)亮。2軟件設(shè)計(jì)#include<reg52.h>sbitLED=P0^0;voidmain(){

while(1)

{

LED=0;

}

}#include<reg52.h>sbitLED=P0^0;voidmain(){

LED=0;while(1){

;}}分析這2段代程序的運(yùn)行過(guò)程。3.2單片機(jī)控制發(fā)光二極管三、點(diǎn)亮一個(gè)發(fā)光二極管仿真實(shí)例任務(wù)要求:控制1個(gè)發(fā)光二極管點(diǎn)亮。3仿真運(yùn)行圖9KeilC軟件編譯結(jié)果圖10點(diǎn)亮LED運(yùn)行效果圖3.2單片機(jī)控制發(fā)光二極管三、點(diǎn)亮一個(gè)發(fā)光二極管仿真實(shí)例擴(kuò)展任務(wù)要求:控制1個(gè)發(fā)光二極管閃爍。#include<reg52.h>#defineucharunsignedsbitLED=P0^0;voidmain() { while(1){uinti,j;

LED=0;

for(i=0;i<247;i++)for(j=0;j<100;j++);

LED=1;

for(i=0;i<247;i++)for(j=0;j<100;j++);

}}3.2單片機(jī)控制發(fā)光二極管三、點(diǎn)亮一個(gè)發(fā)光二極管仿真實(shí)例表1C

51延時(shí)程序設(shè)計(jì)方法序號(hào)設(shè)計(jì)方法例句說(shuō)明1for循環(huán)結(jié)構(gòu)for(i=0;i<100;i++);不精確定時(shí)2while循環(huán)結(jié)構(gòu)i=250;while(i--);不精確定時(shí)3定時(shí)器定時(shí)TMOD=0x01;TH0=0xee;TL0=0x00;TR0=1精確定時(shí)4庫(kù)函數(shù)_nop_();//一個(gè)機(jī)器周期的時(shí)間精確定時(shí)voiddelay(uintxms)//ms延時(shí)函數(shù){uinti,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);}不帶參數(shù)延時(shí)函數(shù)的寫法voiddelay()//200ms延時(shí)函數(shù){uinti,j;for(i=0;i<247;i++)for(j=0;j<100;j++);}12帶參數(shù)延時(shí)函數(shù)的寫法和調(diào)用擴(kuò)展任務(wù)要求:控制1個(gè)發(fā)光二極管閃爍。#include<reg52.h>#defineuintunsignedintsbitLED=P0^0;voidmain() { while(1){uinti,j;

LED=0;

for(i=0;i<247;i++)for(j=0;j<100;j++);

LED=1;

for(i=0;i<247;i++)for(j=0;j<100;j++);

}}用延時(shí)函數(shù)改寫這段程序?voiddelay(uintxms){uinti,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);}#include<reg52.h>#defineuintunsignedintsbitLED=P0^0;voiddelay(uintxms){uinti,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);}void

main() { while(1){LED=0;

delay(200);

LED=1;

delay(200);

}}#include<reg52.h>#defineuintunsignedintsbitLED=P0^0;voiddelay(uintxms);void

main() { while(1){LED=0;

delay(200);

LED=1;

delay(200);

}}voiddelay(uintxms){uinti,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);}3.2單片機(jī)控制發(fā)光二極管四、流水燈仿真實(shí)例任務(wù)要求:控制8個(gè)發(fā)光二極管按照一定的時(shí)間間隔依次輪流點(diǎn)亮。1硬件電路設(shè)計(jì)代碼是否需要寫8次特殊功能位定義語(yǔ)句?3.2單片機(jī)控制發(fā)光二極管四、流水燈仿真實(shí)例任務(wù)要求:控制8個(gè)發(fā)光二極管按照一定的時(shí)間間隔依次輪流點(diǎn)亮。2軟件設(shè)計(jì)狀態(tài)P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0編碼1111111100xfe2111111010xfd3111110110xfb4111101110xf75111011110xef6110111110xdf7101111110xbf8011111110x7f表2流水燈的引腳電平狀態(tài)移位(左移或右移)賦值數(shù)組:循環(huán)賦值C51邏輯運(yùn)算:循環(huán)左移_crol_intrins.h庫(kù)函數(shù):左移“<<”右移“>>”循環(huán)右移_cror_依次賦值3.2單片機(jī)控制發(fā)光二極管四、流水燈仿真實(shí)例C51邏輯運(yùn)算:循環(huán)左移_crol_intrins.h庫(kù)函數(shù):左移“<<”右移“>>”循環(huán)右移_cror_3.2單片機(jī)控制發(fā)光二極管四、流水燈仿真實(shí)例任務(wù)要求:控制8個(gè)發(fā)光二極管按照一定的時(shí)間間隔依次輪流點(diǎn)亮。2軟件設(shè)計(jì)(1)基于庫(kù)函數(shù)的流水燈程序設(shè)計(jì)#include<reg52.h>#include<intrins.h>

#defineucharunsignedchar#defineuintunsignedint voiddelayms(uinti);voidmain() { P2=0xfe;while(1){delay(500);

P2=_crol_(P2,1);}}#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint voiddelay(uinti);voidmain() { while(1){uchari,temp=0x01

;

for(i=0;i<8;i++){P2=~temp;

temp=temp<<1;

delay(500);}}}(2)基于邏輯運(yùn)算符的流水燈程序設(shè)計(jì)3.2單片機(jī)控制發(fā)光二極管四、流水燈仿真實(shí)例任務(wù)要求:控制8個(gè)發(fā)光二極管按照一定的時(shí)間間隔依次輪流點(diǎn)亮。2軟件設(shè)計(jì)(3)基于數(shù)組的流水燈程序設(shè)計(jì)#include<reg52.h>#defineucharunsignedchar #defineuintunsignedint ucharcodetab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};voiddelayms(uinti);

voidmain() { while(1){uchari;for(i=0;i<8;i++){

P2=tab[i];delayms(500);} }}3單片機(jī)輸出顯示控制01單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)0203單片機(jī)控制數(shù)碼管單片機(jī)控制發(fā)光二極管0405單片機(jī)控制液晶顯示器LCD單片機(jī)控制LED點(diǎn)陣顯示3.3單片機(jī)控制數(shù)碼管一、單個(gè)數(shù)碼管的顯示原理共陽(yáng)極數(shù)碼管陽(yáng)極連在一起LED點(diǎn)亮條件COM端接地段碼端給高電平LED點(diǎn)亮條件共陰極數(shù)碼管陰極連在一起圖1數(shù)碼管外形圖1數(shù)碼管引腳

(a)共陰極(b)共陽(yáng)極COM端高電平段碼端給低電平3.3單片機(jī)控制數(shù)碼管七段共陽(yáng)極數(shù)碼管段碼表數(shù)字dpgfedcba段碼abcdefgdp0110000000xC01111110010xF92101001000xA43101100000xB04100110010x995100100100x926100000100x827111110000xF88100000000x809100100000x90A100010000x88b100000110x83C110001100xC6d101000010xA1E100001100x86F100011100x8Eunsignedcharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共陽(yáng)0-F3.3單片機(jī)控制數(shù)碼管顯示字符共陰極段碼共陽(yáng)極段碼顯示字符共陰極段碼共陽(yáng)極段碼00x3F0xC080x7F0x8010x060xF990x6F0x9020x5B0xA4A0x770x8830x4F0xB0b0x7C0x8340x660x99C0x390xC650x6D0x92d0x5E0XA160x7D0x82E0x790x8670x070xF8F0x710x8E表3-5共陰、共陽(yáng)數(shù)碼管的段碼表3.3單片機(jī)控制數(shù)碼管二、一位數(shù)碼管顯示仿真實(shí)例任務(wù)要求:在1位共陽(yáng)極數(shù)碼管上循環(huán)顯示“0~F”。1硬件電路設(shè)計(jì)3.3單片機(jī)控制數(shù)碼管二、一位數(shù)碼管顯示仿真實(shí)例任務(wù)要求:在1位共陽(yáng)極數(shù)碼管上循環(huán)顯示“0~F”。2軟件設(shè)計(jì)共陽(yáng)極數(shù)碼管“0~F”的段碼1234ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};數(shù)碼管顯示“0~F”中的一個(gè)P2=seg[i]構(gòu)成16次循環(huán):for語(yǔ)句字符之間要加一定的延時(shí)delay函數(shù)分析3.3單片機(jī)控制數(shù)碼管二、一位數(shù)碼管顯示仿真實(shí)例任務(wù)要求:在1位共陽(yáng)極數(shù)碼管上循環(huán)顯示“0~F”。2軟件設(shè)計(jì)共陽(yáng)極數(shù)碼管“0~F”的段碼1234ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};數(shù)碼管顯示“0~F”中的一個(gè)P2=seg[i]構(gòu)成16次循環(huán):for語(yǔ)句字符之間要加一定的延時(shí)delay函數(shù)分析#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay(uintxms);voidmain(){while(1){uchari;

for(i=0;i<16;i++){P2=seg[i];

delay(500);}}} 3.3單片機(jī)控制數(shù)碼管三、多個(gè)數(shù)碼管的顯示原理單個(gè)數(shù)碼管和單片機(jī)連接方法:多個(gè)數(shù)碼管和單片機(jī)如何連接?公共端接地或高電平段碼端與一個(gè)I/O口相連3.3單片機(jī)控制數(shù)碼管三、多個(gè)數(shù)碼管的顯示原理01靜態(tài)顯示方式02動(dòng)態(tài)顯示方式公共端都連接在一起段碼端分別與一個(gè)I/O口相連公共端分別與一個(gè)I/O引腳相連段碼端都與一個(gè)I/O口相連同時(shí)顯示,無(wú)閃爍依次顯示,有閃爍3.3單片機(jī)控制數(shù)碼管四、兩位數(shù)碼管靜態(tài)顯示仿真實(shí)例任務(wù)要求:在2位共陽(yáng)數(shù)碼管采用靜態(tài)顯示方式顯示25。1硬件電路設(shè)計(jì)Seg1段碼端接P0口Seg2段碼端接P2口P0=0xa4;P2=0x92;ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽(yáng)0-92軟件設(shè)計(jì)#include<reg52.hvoidmain(void){

P0=0xa4;

P2=0x92;while(1);}3.3單片機(jī)控制數(shù)碼管四、兩位數(shù)碼管靜態(tài)顯示仿真實(shí)例任務(wù)要求:在2位共陽(yáng)數(shù)碼管采用靜態(tài)顯示方式顯示25。3仿真運(yùn)行3.3單片機(jī)控制數(shù)碼管五、四位數(shù)碼管動(dòng)態(tài)顯示仿真實(shí)例任務(wù)要求:在4位共陽(yáng)數(shù)碼管采用動(dòng)態(tài)顯示方式穩(wěn)定顯示“3210”

實(shí)物圖四位動(dòng)態(tài)共陽(yáng)數(shù)碼管內(nèi)部結(jié)構(gòu)引腳圖3.3單片機(jī)控制數(shù)碼管五、四位數(shù)碼管動(dòng)態(tài)顯示仿真實(shí)例任務(wù)要求:在4位共陽(yáng)數(shù)碼管采用動(dòng)態(tài)顯示方式穩(wěn)定顯示“3210”

P0abcdefgdpabcdefgdpabcdefgdpabcdefgdpP2.3P2.2P2.1P2.0

0001

0010

01

00

10

00w0=1;

P0=0xc0;delay(2)w0=0;P0=0xf9;delay(2)sbitw0=P2^0;sbitw1=P2^1;sbitw2=P2^2;sbitw3=P2^3;w1=1;w1=0ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};P0=0xff;P0=0xff;3.3單片機(jī)控制數(shù)碼管五、四位數(shù)碼管動(dòng)態(tài)顯示仿真實(shí)例任務(wù)要求:在4位共陽(yáng)數(shù)碼管采用動(dòng)態(tài)顯示方式穩(wěn)定顯示“3210”

P0abcdefgdpabcdefgdpabcdefgdpabcdefgdpP2.3P2.2P2.1P2.0P0=0xf9;delay(2)w1=1;w1=0P0=0xff;送段碼送位選碼延時(shí)消隱關(guān)閉位選碼掃描率大于100Hz,整體掃描時(shí)間小于10ms,無(wú)閃爍。延時(shí)時(shí)間的計(jì)算整體掃描時(shí)間=單個(gè)數(shù)碼管點(diǎn)亮?xí)r間*數(shù)碼管個(gè)數(shù)數(shù)碼管的消隱現(xiàn)象:有時(shí)會(huì)出現(xiàn)數(shù)碼管不應(yīng)該亮的段,似乎有微微的發(fā)亮。P0=0xff;消隱:?jiǎn)蝹€(gè)數(shù)碼管點(diǎn)亮?xí)r間<2.5ms,延時(shí)時(shí)間可選2ms3.3單片機(jī)控制數(shù)碼管五、四位數(shù)碼管動(dòng)態(tài)顯示仿真實(shí)例任務(wù)要求:在4位共陽(yáng)數(shù)碼管采用動(dòng)態(tài)顯示方式穩(wěn)定顯示“3210”

1硬件電路設(shè)計(jì)3.3單片機(jī)控制數(shù)碼管五、四位數(shù)碼管動(dòng)態(tài)顯示仿真實(shí)例任務(wù)要求:在4位共陽(yáng)數(shù)碼管采用動(dòng)態(tài)顯示方式穩(wěn)定顯示“3210”

2軟件設(shè)計(jì)#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitw0=P2^0;//最低位位選端sbitw1=P2^1;//第2位位選端sbitw2=P2^2;//第3位位選端sbitw3=P2^3;//第4位位選端ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};voiddelay(uintxms);voidmain(){

w2=1;P0=seg[2];delay1ms(2);P0=0xff;w2=0;w3=1;P0=seg[3];delay1ms(2);P0=0xff;w3=0;}}while(1){

w0=1;//送位選P0=seg[0];//送0的段碼delay1ms(2);//延時(shí)P0=0xff;//即消隱w0=0;

w1=1;P0=seg[1];delay1ms(2);P0=0xff;w1=0;3單片機(jī)輸出顯示控制01單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)0203單片機(jī)控制數(shù)碼管單片機(jī)控制發(fā)光二極管0405單片機(jī)控制液晶顯示器LCD單片機(jī)控制LED點(diǎn)陣顯示3.4單片機(jī)控制LED點(diǎn)陣顯示一、8*8LED點(diǎn)陣顯示器的結(jié)構(gòu)與顯示原理LED點(diǎn)陣在許多公共場(chǎng)合,如商場(chǎng)、銀行、車站、機(jī)場(chǎng)、醫(yī)院隨處可見(jiàn)。不僅能顯示文字、圖形,還能播放動(dòng)畫(huà)、圖像、視頻等信號(hào)。圖28*8LED點(diǎn)陣結(jié)構(gòu)示意圖圖18*8LED點(diǎn)陣實(shí)物圖陣列點(diǎn)數(shù)發(fā)光顏色5×75×86×88×8單色雙色三色極性排列共陰極共陽(yáng)極3.4單片機(jī)控制LED點(diǎn)陣顯示一、8*8LED點(diǎn)陣顯示器的結(jié)構(gòu)與顯示原理P0=0xfe;P2=0x00;第一行:P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.70111111100000000顯示效果P0=0xf7;P2=0x3c;第四行:第五行:P0=0xef;P2=0x00;第六行:P0=0xdf;P2=0x7e;第二行:P0=0xfd;P2=0x7e;第三行:P0=0xfb;P2=0x00;3.4單片機(jī)控制LED點(diǎn)陣顯示二、8*8LED點(diǎn)陣顯示仿真實(shí)例P0=0xfe;P2=0x00;第一行:第二行:P0=0xfd;P2=0x7e;顯示效果第三行:P0=0xfb;P2=0x00;P0=0xf7;P2=0x3c;第四行:第五行:P0=0xef;P2=0x00;第六行:P0=0xdf;P2=0x7e;任務(wù)要求:在8*8LED點(diǎn)陣(共陰)上顯示漢字“三”。1硬件電路設(shè)計(jì)3.4單片機(jī)控制LED點(diǎn)陣顯示二、8*8LED點(diǎn)陣顯示仿真實(shí)例任務(wù)要求:在8*8LED點(diǎn)陣(共陰)上顯示漢字“三”。2軟件設(shè)計(jì)行掃描碼:P0口row[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}列編碼:P2口col[]={0x00,0x7e,0x00,0x3c,0x00,0x7e,0x00,0x00}一行的顯示過(guò)程顯示一個(gè)漢字需要行掃描8次;“三”需要送出8個(gè)行掃描碼,可用for循環(huán)。確定行列編碼送行掃描碼送列編碼延時(shí)消隱漢字的顯示3.4單片機(jī)控制LED點(diǎn)陣顯示二、8*8LED點(diǎn)陣顯示仿真實(shí)例任務(wù)要求:在8*8LED點(diǎn)陣(共陰)上顯示漢字“三”。2軟件設(shè)計(jì)#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodecol[]={0x00,0x7e,0x00,0x3c,0x00,0x7e,0x00,0x00};ucharcoderow[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};voiddelay1ms(uintxms);voidmain(){uchari;while(1){

for(i=0;i<8;i++)

{

P0=row[i];//掃描碼

P2=col[i];//列編碼

delay1ms(4); //延時(shí)

P2=0x00;//消隱

}}}一行的顯示過(guò)程確定行列編碼漢字的顯示行碼:P0row[]列碼:P2col[]送行掃描碼送列編碼消隱延時(shí)for循環(huán)3.4單片機(jī)控制LED點(diǎn)陣顯示二、8*8LED點(diǎn)陣顯示仿真實(shí)例任務(wù)要求:在8*8LED點(diǎn)陣(共陰)上顯示漢字“三”。3仿真運(yùn)行3.4單片機(jī)控制LED點(diǎn)陣顯示三、16*16LED點(diǎn)陣顯示器顯示原理16*16

LED點(diǎn)陣是由4個(gè)8*8

LED點(diǎn)陣組成每行每列都有16個(gè)LED,有16根掃描線,16根列碼線。16*16

LED點(diǎn)陣(共陰)C0R0行送低電平點(diǎn)亮一個(gè)LED條件列送高電平行列交叉LED亮顯示字形過(guò)程確定行列編碼漢字的顯示:多行顯示一行3.4單片機(jī)控制LED點(diǎn)陣顯示四、16*16LED點(diǎn)陣顯示屏仿真實(shí)例行掃描線:74HC154(4-16譯碼器)任務(wù)要求:16*16LED點(diǎn)陣顯示屏(共陰)實(shí)現(xiàn)滾動(dòng)顯示漢字“歡迎學(xué)習(xí)”。1硬件電路設(shè)計(jì)列線:P2口P3口74HC07是6通道同相驅(qū)動(dòng)器74HC15474HC073.4單片機(jī)控制LED點(diǎn)陣顯示四、16*16LED點(diǎn)陣顯示屏仿真實(shí)例任務(wù)要求:16*16LED點(diǎn)陣顯示屏(共陰)實(shí)現(xiàn)滾動(dòng)顯示漢字“歡迎學(xué)習(xí)”。1硬件電路設(shè)計(jì)74HC154引腳表3-874HC154真值表3.4單片機(jī)控制LED點(diǎn)陣顯示四、16*16LED點(diǎn)陣顯示屏仿真實(shí)例任務(wù)要求:16*16LED點(diǎn)陣顯示屏(共陰)實(shí)現(xiàn)滾動(dòng)顯示漢字“歡迎學(xué)習(xí)”。1硬件電路設(shè)計(jì)74HC07引腳74HC07器件包含6路同相緩沖器/驅(qū)動(dòng)器。6路輸入為1A~6A,6路輸出為1Y~6Y。輸出為集電極開(kāi)路,需外接上拉上拉電阻。3.4單片機(jī)控制LED點(diǎn)陣顯示四、16*16LED點(diǎn)陣顯示屏仿真實(shí)例任務(wù)要求:16*16LED點(diǎn)陣顯示屏(共陰)實(shí)現(xiàn)滾動(dòng)顯示漢字“歡迎學(xué)習(xí)”。2軟件設(shè)計(jì)(1)4個(gè)漢字的編碼(字模):可以自己編碼或采用字模生成軟件(2)行掃描碼:P1口低4位經(jīng)74HC154的16條譯碼輸出線L0~L15經(jīng)74HC07驅(qū)動(dòng)后的輸出行掃描碼,逐行為低電平進(jìn)行掃描。(3)列碼:字模第一個(gè)字節(jié)送給P2口,第二個(gè)字節(jié)送給P3口,依次循環(huán)。(4)一行的顯示過(guò)程:送行掃描碼送列編碼延時(shí)消隱(5)一個(gè)漢字的顯示:一個(gè)漢字32個(gè)列碼,1行2個(gè),共16行,for循環(huán)(6)一個(gè)漢字的顯示時(shí)間:用一個(gè)40次for循環(huán),不斷刷新這個(gè)漢字(7)四個(gè)漢字的顯示:用一個(gè)4次for循環(huán)3.4單片機(jī)控制LED點(diǎn)陣顯示四、16*16LED點(diǎn)陣顯示屏仿真實(shí)例任務(wù)要求:16*16LED點(diǎn)陣顯示屏(共陰)實(shí)現(xiàn)滾動(dòng)顯示漢字“歡迎學(xué)習(xí)”。2軟件設(shè)計(jì)#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodestring[]={//漢字“歡"的16x16點(diǎn)陣的列碼0x00,0x80,0x00,0x80,0xFC,0x80,0x04,0xFC,0x45,0x04,0x46,0x48,0x28,0x40,0x28,0x40,0x10,0x40,0x28,0x40,0x24,0xA0,0x44,0xA0,0x81,0x10,0x01,0x08,0x02,0x0E,0x0C,0x04,//漢字“迎”的16x16點(diǎn)陣的列碼略//漢字“學(xué)”的16x16點(diǎn)陣的列碼

略//漢字“習(xí)”的16x16點(diǎn)陣的列碼

略voiddelay1ms(uintxms);//延時(shí)函數(shù)voidmain(){uchari,n,j;while(1){

for(j=0;j<4;j++)//共顯示4個(gè)漢字

{

for(n=0;n<40;n++)//整屏掃描40次

{

for(i=0;i<16;i++)//逐行掃描16行 {

P1=i%16;//行掃描碼P2=string[i*2+j*32];//列碼P3=string[i*2+1+j*32];//列碼

delay1ms(3); P2=0x00; //消隱 P3=0x00;//消隱

}}}}}3.4單片機(jī)控制LED點(diǎn)陣顯示四、16*16LED點(diǎn)陣顯示屏仿真實(shí)例任務(wù)要求:16*16LED點(diǎn)陣顯示屏(共陰)實(shí)現(xiàn)滾動(dòng)顯示漢字“歡迎學(xué)習(xí)”。3仿真運(yùn)行3單片機(jī)輸出顯示控制01單片機(jī)并行I/O端口的內(nèi)部結(jié)構(gòu)0203單片機(jī)控制數(shù)碼管單片機(jī)控制發(fā)光二極管0405單片機(jī)控制液晶顯示器LCD單片機(jī)控制LED點(diǎn)陣顯示3.5單片機(jī)控制液晶顯示器LCD一、LCD1602液晶顯示模塊特性與引腳液晶顯示器種類:(1)字段型。字符顯示,用于電子表、計(jì)算器等。(2)字符型。顯示字母、數(shù)字、符號(hào)等。單片機(jī)中廣泛使用。(3)點(diǎn)陣圖形型。圖形顯示,如筆記本電腦、彩色電視和游戲機(jī)等。(a)LCD1602的外形(b)LCD1602的引腳3.5單片機(jī)控制液晶顯示器LCD一、LCD1602液晶顯示模塊特性與引腳5x7點(diǎn)陣圖形特性:1、顯示數(shù)字、字符等2、5V電壓驅(qū)動(dòng)3、工作電流2mA4、標(biāo)準(zhǔn)的14引腳(無(wú)背光)

或16個(gè)引腳(有背光)5、顯示2行,每行16個(gè)字符6、內(nèi)置128個(gè)字符的ASCII字庫(kù)特性3.5單片機(jī)控制液晶顯示器LCD一、LCD1602液晶顯示模塊特性與引腳引腳號(hào)引腳名稱引腳功能1Vss電源地2VDD+5V邏輯電源3VEE液晶顯示偏壓(調(diào)節(jié)顯示對(duì)比度)4RS寄存器選擇(1-

數(shù)據(jù)寄存器,0-命令/狀態(tài)寄存器)5讀寫操作選擇(1-讀,0-寫)6E使能信號(hào)7~14D0~D7數(shù)據(jù)總線,與單片機(jī)的數(shù)據(jù)總線相連、三態(tài)15BLA背光板電源,通常為+5V,串聯(lián)1個(gè)電位器,調(diào)節(jié)背光亮度,如接地,此時(shí)無(wú)背光但不易發(fā)熱16BLK背光板電源地引腳3.5單片機(jī)控制液晶顯示器LCD二、LCD1602液晶顯示模塊顯示原理顯示字符的ASCII碼的產(chǎn)生問(wèn)題內(nèi)部字符庫(kù)ROM(CGROM),能顯示出192個(gè)字符,字符5x7點(diǎn)陣表示?!纠俊癆”的二進(jìn)制編碼為“01000001”

十六進(jìn)制編碼為“0x41”編碼和ASCII碼表中“A”的編碼一致自定義字符RAM(CGRAM)

64字節(jié),用戶可自行定義8個(gè)5x7點(diǎn)陣字符。3.5單片機(jī)控制液晶顯示器LCD二、LCD1602液晶顯示模塊顯示原理在顯示器上相應(yīng)的位置顯示字符的問(wèn)題第一行可顯示區(qū)域地址0x00~0x0F隱藏區(qū)域地址是0x10~0x27第二行可顯示區(qū)域地址0x40~0x4F隱藏區(qū)域地址是0x50~0x67DDRAM地址就對(duì)應(yīng)了顯示位置,也稱DDRAM地址為定位數(shù)據(jù)指針。3.5單片機(jī)控制液晶顯示器LCD三、LCD1602液晶顯示模塊基本操作主要操作:1、LCD液晶初始化:有無(wú)光標(biāo)、光標(biāo)移動(dòng)方向、光標(biāo)閃爍等進(jìn)行設(shè)置2、寫命令:下達(dá)任務(wù)3、寫數(shù)據(jù):寫具體要顯示的內(nèi)容或命令內(nèi)容3.5單片機(jī)控制液晶顯示器LCD三、LCD1602液晶顯示模塊基本操作初始化一般過(guò)程:(1)設(shè)置液晶的顯示模式(2)設(shè)置光標(biāo)顯示、閃爍(3)設(shè)置光標(biāo)移動(dòng)方式(4)設(shè)置光標(biāo)的起始位置(5)清屏命令6:功能設(shè)置命令。DL—數(shù)據(jù)有效長(zhǎng)度選擇控制位。1:8位數(shù)據(jù)線接口;0:4位數(shù)據(jù)線接口。N—顯示器行數(shù)選擇控制位。0:?jiǎn)涡酗@示,1:兩行顯示。F—字符顯示的點(diǎn)陣控制位。0:顯示5×7點(diǎn)陣字符,1:顯示5×10點(diǎn)陣字符?!纠?位總線,雙行顯示,顯示5×7的點(diǎn)陣字符。命令字:0x3800111000

LCD液晶初始化13.5單片機(jī)控制液晶顯示器LCD三、LCD1602液晶顯示模塊基本操作初始化一般過(guò)程:(1)設(shè)置液晶的顯示模式(2)設(shè)置光標(biāo)顯示、閃爍(3)設(shè)置光標(biāo)移動(dòng)方式(4)設(shè)置光標(biāo)的起始位置(5)清屏00001100命令4:顯示開(kāi)/關(guān)及光標(biāo)設(shè)置。

D—屏幕整體顯示控制位,D=0關(guān)顯示,D=1開(kāi)顯示。

C—光標(biāo)有無(wú)控制位,C=0無(wú)光標(biāo),C=1有光標(biāo)。

B—光標(biāo)閃爍控制位,B=0不閃爍,B=1閃爍。【例】顯示開(kāi),不顯示光標(biāo),光標(biāo)沒(méi)有閃爍。命令字:0x0CLCD液晶初始化13.5單片機(jī)控制液晶顯示器LCD三、LCD1602液晶顯示模塊基本操作初始化一般過(guò)程:(1)設(shè)置液晶的顯示模式(2)設(shè)置光標(biāo)顯示、閃爍(3)設(shè)置光標(biāo)移動(dòng)方式(4)設(shè)置光標(biāo)的起始位置(5)清屏00000110【例】光標(biāo)右移命令字:0x06命令3:光標(biāo)和顯示模式設(shè)置命令。

I/D:設(shè)置光標(biāo)的移動(dòng)方向。

I/D=1:光標(biāo)右移一字符位置

I/D=0:光標(biāo)左移一字符位置。S:顯示屏上畫(huà)面向左或向右全部移動(dòng)一個(gè)字符位。

S=1,I/D=1:顯示畫(huà)面左移

S=1,I/D=0:顯示畫(huà)面右移

S=0,整屏顯示不移動(dòng)LCD液晶初始化13.5單片機(jī)控制液晶顯示器LCD三、LCD1602液晶顯示模塊基本操作初始化一般過(guò)程:(1)設(shè)置液晶的顯示模式(2)設(shè)置光標(biāo)顯示、閃爍(3)設(shè)置光標(biāo)移動(dòng)方式(4)設(shè)置光標(biāo)的起始位置(5)清屏命令8:DDRAM地址設(shè)置。

命令格式:80H+地址碼。其中,80H為命令碼?!纠康谝恍械?個(gè)位置命令字:0x80+0x00【例】第二行第5個(gè)位置命令字:0x80+0x44LCD液晶初始化13.5單片機(jī)控制液晶顯示器LCD三、LCD1602液晶顯示模塊基本操作LCD液晶初始化初始化一般過(guò)程:(1)設(shè)置液晶的顯示模式(2)設(shè)置光標(biāo)顯示、閃爍(3)設(shè)置光標(biāo)移動(dòng)方式(4)設(shè)置光標(biāo)的起始位置(5)清屏【例】清屏命令字:0x01這些命令字如何送到LCD1602?11~8條命令需要用寫時(shí)序?qū)⒚钭謱懭隠CD1602,常把寫命令封裝為一個(gè)函數(shù)write_cmdvoidlcd_init(){

write_cmd(0x38);//顯示模式設(shè)置

write_cmd(0x0c);//顯示開(kāi)關(guān),光標(biāo)沒(méi)有閃爍

write_cmd(0x06);//顯示光標(biāo)移動(dòng)設(shè)置

write_cmd(0x01);//清除屏幕

delay(1);}三、LCD1602液晶顯示模塊基本操作/***寫命令函數(shù)***/voidwrite_cmd(ucharcmd){

lcden=0;

lcdrs=0;lcdrw=0;

out=cmd;lcden=1;

delay(1);lcden=0;delay(1);}寫命令時(shí)序圖寫命令2EN=0RS=0RW=0D0~D7=指令EN=高脈沖寫命令時(shí)序【例】清屏操作write_cmd(0x01);1三、LCD1602液晶顯示模塊基本操作寫數(shù)據(jù)時(shí)序圖寫數(shù)據(jù)3寫數(shù)據(jù)時(shí)序EN=0RS=1RW=0D0~D7=數(shù)據(jù)EN=高脈沖/***寫數(shù)據(jù)函數(shù)***/voidwrite_date(uchardat){

lcden=0;

lcdrs=1;lcdrw=0;

out=dat;lcden=1;

delay(1);lcden=0;delay(1);}【例】顯示字符“A”write_date(0x41);或write_date(‘A’);【例】顯示數(shù)字“2”write_date(0x32);或write_date(2+0x30);三、LCD1602液晶顯示模塊基本操作讀狀態(tài)時(shí)序圖讀狀態(tài)4讀狀態(tài)時(shí)序EN=0RS=0RW=1EN=1D0~D7=命令EN=高脈沖/***讀狀態(tài)函數(shù)***/voidcheck_busy(void){uchardt;do{dt=0xff; lcden=0;lcdrs=0;lcdrw=1;lcden=1;dt=out;//out為數(shù)據(jù)口}while(dt&0x80)lcden=0;}3.5單片機(jī)控制液晶顯示器LCD四、單片機(jī)控制LCD1602液晶顯示字符串仿真實(shí)例硬件電路設(shè)計(jì)1任務(wù)要求:在LCD1602上顯示“welcometolearnMCU”,分兩行顯示。四、單片機(jī)控制LCD1602液晶顯示字符串仿真實(shí)例軟件設(shè)計(jì)2任務(wù)要求:在LCD1602上顯示“welcometolearnMCU”,分兩行顯示。(1)LCD初始化(2)確定顯示位置(3)寫命令字(4)寫一個(gè)字符或字符串#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineoutP2sbitlcdrs=P3^0;//液晶的RS端接P3.0口sbitlcdrw=P3^1;//液晶的RW端接P3.1sbitlcden=P3^2;//液晶的EN使能端接P3.2口voiddelay(uintz);//1ms延時(shí)函數(shù)voidcheck_busy(void);//檢查忙標(biāo)志函數(shù)voidwrite_cmd(charcmd);//寫命令函數(shù)voidwrite_data(uchardat);//寫數(shù)據(jù)函數(shù)voidwrite_str(uchar*str);//寫字符串函數(shù)voidlcd_init();//初始化1602voidmain(){lcd_init();while(1){

write_cmd(0x80+0x04write_str("Welcome");write_cmd(0x80+0x42) write_str("tolearnMCU");}}voidwrite_str(uchar*str){while(*str!='\0')

{write_data(*str++);delay(5);}}四、單片機(jī)控制LCD1602液晶顯示字符串仿真實(shí)例仿真運(yùn)行3任務(wù)要求:在LCD1602上顯示“welcometolearnMCU”,分兩行顯示。本章小結(jié)1.P0~P3口作為輸入口使用時(shí),要先向端口寫“1”。2.P0口作為輸出口使用時(shí),漏極開(kāi)路,要外接上拉電阻(1KΩ~10KΩ),P1~P3口內(nèi)部有上拉電阻,不用外接上拉電阻。3.單片機(jī)的地址和數(shù)據(jù)總線構(gòu)成:16位地址總線由P2口(高8位)和P0口(低8位)構(gòu)成,8位數(shù)據(jù)總線由P0口構(gòu)成,P0口用作“地址/數(shù)據(jù)”總線時(shí)需要在ALE引腳輸出的時(shí)序控制下分時(shí)復(fù)用,是一個(gè)雙向口,無(wú)需外接上拉電阻。4.P3口第一功能與第二功能是由單片機(jī)執(zhí)行的指令控制自動(dòng)切換,用戶不需要進(jìn)行任何設(shè)置。P3口作為第二功能使用時(shí),就不能再作為通用I/0口使用。5.數(shù)碼管有共陽(yáng)極和共陰極兩種類型。通常將段碼存放在數(shù)組中。6.單片機(jī)控制多個(gè)數(shù)碼管顯示時(shí)有靜態(tài)顯示和動(dòng)態(tài)顯示兩種方式。靜態(tài)顯示時(shí)每個(gè)數(shù)碼管的段碼端都需要1個(gè)8位的I/O口,占據(jù)口線多,但無(wú)閃爍。動(dòng)態(tài)顯示時(shí)每個(gè)數(shù)碼管的段碼端都連接同一個(gè)8位的I/O口,每個(gè)數(shù)碼管的公共端分別由1位I/O口線控制,占用口線少,但有閃爍。本章小結(jié)7.8*8

LED點(diǎn)陣顯示器每個(gè)發(fā)光二極管都處于行線和列線之間的交叉點(diǎn)上。行接收掃描碼,列接收字形編碼。編碼控制點(diǎn)亮某些發(fā)光二極管,從而顯示出由不同發(fā)光的點(diǎn)組成的各種圖案。想顯示不同的圖案,就給不同的編碼。8.16*16

LED點(diǎn)陣是由4個(gè)8*8

LED點(diǎn)陣組成,每個(gè)發(fā)光二極管都放置在行線和列線的交叉點(diǎn)上,每行每列都有16個(gè)LED。所以,16*16點(diǎn)陣LED有16根掃描線,16根列碼線。9.LCD1602每行可顯示16個(gè)字符,可顯示2行且只能顯示數(shù)字、大小寫字母及各種字符。單片機(jī)輸入檢測(cè)04重點(diǎn)介紹鍵盤的工作原理、接口設(shè)計(jì)與軟件編程以及物理量轉(zhuǎn)換為開(kāi)關(guān)量的信號(hào)檢測(cè)。04單片機(jī)輸入檢測(cè)123獨(dú)立按鍵檢測(cè)矩陣鍵盤檢測(cè)開(kāi)關(guān)量信號(hào)檢測(cè)4.1獨(dú)立按鍵檢測(cè)

編碼鍵盤:鍵盤上閉合鍵的識(shí)別由專用的硬件編碼器實(shí)現(xiàn),并產(chǎn)生

鍵編碼號(hào)或鍵值的稱為編碼鍵盤,如計(jì)算機(jī)鍵盤。非編碼鍵盤:靠軟件編程來(lái)識(shí)別的稱為非編碼鍵盤;在單片機(jī)系統(tǒng)中,用的最多的是非編碼鍵盤。鍵盤具有向單片機(jī)輸入數(shù)據(jù)、命令等功能,是人與單片機(jī)對(duì)話的主要手段。

圖1彈性按鍵一、獨(dú)立鍵盤非編碼鍵盤分成獨(dú)立鍵盤和矩陣(行列式)鍵盤4.1獨(dú)立按鍵檢測(cè)一、獨(dú)立鍵盤彈起高電平按下低電平1按鍵檢測(cè)原理按鍵在閉合和斷開(kāi)時(shí),有10ms抖動(dòng)期如何去抖?4.1獨(dú)立按鍵檢測(cè)2軟件按鍵去抖動(dòng)

voidkeyscan(){key=1;//輸入先寫“1”

if(key==0)

{delay(10);//延時(shí)去抖

if(key==0)//按鍵按下

{while(!key);//松手檢測(cè)

程序段;

}}}

核心指令

4.1獨(dú)立按鍵檢測(cè)一、獨(dú)立鍵盤#include<reg52.h>sbitkey1=P2^0;sbitled1=P1^7;voidmain(){while(1){

key1=1;if(key1==0){led1=0;}else{led1=1;}}}

【例】P2.0引腳接按鍵,P1.7引腳接LED,按下按鍵LED點(diǎn)亮。4.1獨(dú)立按鍵檢測(cè)一、獨(dú)立鍵盤

【例】P2.0引腳接按鍵,P1.7引腳接LED,按下按鍵LED點(diǎn)亮。(標(biāo)志位)#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitkey=P2^0;//按鍵聲明sbitled=P1^7;//LED聲明ucharkeyflag=0;//按鍵標(biāo)志位voiddelay(uinti);//延時(shí)voidkeyscan();//按鍵檢測(cè)函數(shù)voidmain(){while(1){

keyscan();

if(keyflag==1)

{

led=0;}

}}voidkeyscan()//按鍵檢測(cè)函數(shù){key=1;//輸入先寫“1”

if(key==0){delay(10);//延時(shí)去抖

if(key==0)//按鍵按下

{

while(!key);//松手檢測(cè)

keyflag=1;//設(shè)標(biāo)志位

}}}

【例】設(shè)計(jì)4個(gè)按鍵,分別控制4個(gè)LED,按下一個(gè)按鍵,只亮一個(gè)LED。voidkeyscan()//按鍵檢測(cè)函數(shù){

KEY1=1;//輸入先寫“1”

if(KEY1==0){delay(10);//延時(shí)去抖

if(KEY1==0)//按鍵按下

{

while(!KEY1);//松手檢測(cè)

keyflag=1;//設(shè)標(biāo)志位

}

}

KEY2=1;//輸入先寫“1”

if(KEY2==0){delay(10);//延時(shí)去抖

if(KEY2==0)//按鍵按下

{

while(!KEY2);//松手檢測(cè)

keyflag=2;//設(shè)標(biāo)志位

}}}KEY1按下:P1=11111110B=0xfe;KEY2按下:P1=1111110 1B=0xfd;KEY3按下:P1=1111101 1B=0xfb;KEY4按下:P1=1111011 1B=0xf7;

【例】設(shè)計(jì)4個(gè)按鍵,分別控制4個(gè)LED,按下一個(gè)按鍵,只亮一個(gè)LED。voidkeyscan()//按鍵檢測(cè)函數(shù){KEY1=1;//輸入先寫“1”

if(KEY1==0){delay(10);//延時(shí)去抖

if(KEY1==0)//按鍵按下

{

while(!KEY1);//松手檢測(cè)

keyflag=1;//設(shè)標(biāo)志位

}}

KEY2=1;//輸入先寫“1”

if(KEY2==0){delay(10);//延時(shí)去抖

if(KEY2==0)//按鍵按下

{

while(!KEY2);//松手檢測(cè)

keyflag=2;//設(shè)標(biāo)志位

}…………}}voidkeyscan()//按鍵檢測(cè)函數(shù){P2=0xff;//輸入先寫“1”

if((P2&0x0f)!=0x0f)//檢測(cè)有按鍵按下{

delay(10);//延時(shí)去抖

if(KEY1==0)//KEY1按鍵按下{keyflag=1;//設(shè)標(biāo)志位1

while(!KEY1);}//松手檢測(cè)

if(KEY2==0)//

KEY2按鍵按下{keyflag=2;//設(shè)標(biāo)志位2

while(!KEY2);}//松手檢測(cè)

if(KEY3==0)//

KEY3按鍵按下{keyflag=3;//設(shè)標(biāo)志位3

while(!KEY3);}//松手檢測(cè)

if(KEY4==0)//

KEY4按鍵按下{keyflag=4;//設(shè)標(biāo)志位4

while(!KEY4);}//松手檢測(cè)

}}優(yōu)化代碼

【例】設(shè)計(jì)4個(gè)按鍵,分別控制4個(gè)LED,按下一個(gè)按鍵,只亮一個(gè)LED。#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitKEY1=P2^0;//按鍵聲明sbitKEY2=P2^1;//按鍵聲明sbitKEY3=P2^2;//按鍵聲明sbitKEY4=P2^3;//按鍵聲明ucharkeyflag=0;//按鍵標(biāo)志位voiddelay(uinti);//延時(shí)voidkeyscan();//按鍵檢測(cè)函數(shù)voidmain(){while(1){keyscan();

switch(keyflag)

{case1:P1=0xfe;break;

case2:P1=0xfd;break;case3:P1=0xfb;break;

case4:P1=0xf7;break;

}

}}KEY1按下:P1=11111110B=0xfe;KEY2按下:P1=1111110 1B=0xfd;KEY3按下:P1=1111101 1B=0xfb;KEY4按下:P1=1111011 1B=0xf7;【C語(yǔ)言知識(shí)點(diǎn)】位運(yùn)算【例】編程將P1.5清

0,P1.1置1,其他位保持不變,采用字節(jié)操作。P1=(P1&0xdf)│0x02;4.1獨(dú)立按鍵檢測(cè)二、四路搶答器仿真實(shí)例任務(wù)要求:設(shè)計(jì)四路搶答器,由主持人控制搶答輪次,主持人按下復(fù)位按鈕,搶答開(kāi)始,無(wú)人搶答時(shí)數(shù)碼管顯示8,一旦搶答,選手按下按鍵顯示相應(yīng)選手編號(hào),其他選手再按按鍵無(wú)效。主持人按下復(fù)位按鈕重新開(kāi)始搶答。硬件電路設(shè)計(jì)1數(shù)碼管段碼端:P2口按鍵:1號(hào)選手P1.02號(hào)選手P1.13號(hào)選手P1.24號(hào)選手P1.34.1獨(dú)立按鍵檢測(cè)二、四路搶答器仿真實(shí)例軟件設(shè)計(jì)2①主持人按下復(fù)位按鈕重新開(kāi)始搶答:由硬件復(fù)位按鍵實(shí)現(xiàn)②無(wú)人搶答,即沒(méi)有按鍵按下,標(biāo)志位keyflag=8,顯示“8”的段碼0x80③選手按下按鍵檢測(cè):四個(gè)按鍵標(biāo)志位keyflag分別設(shè)為1、2、3、4。④顯示選手編號(hào):keyflag的值即為選手編號(hào),

顯示其段碼0xf9,0xa4,0xb0,0x99P2=seg[keyflag]⑤其他選手再按按鍵無(wú)效:選手按下按鍵后進(jìn)入while(1)死循環(huán)“0~9”段碼(共陽(yáng)):ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};任務(wù)要求:設(shè)計(jì)四路搶答器,由主持人控制搶答輪次,①主持人按下復(fù)位按鈕,搶答開(kāi)始;②無(wú)人搶答時(shí)數(shù)碼管顯示8;③一旦搶答,選手按下按鍵

④顯示相應(yīng)選手編號(hào),⑤其他選手再按按鍵無(wú)效。主持人按下復(fù)位按鈕重新開(kāi)始搶答。二、四路搶答器仿真實(shí)例軟件設(shè)計(jì)2#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#defineoutP2 //數(shù)碼管段碼端sbitkey1=P1^0; //1號(hào)選手sbitkey2=P1^1; //2號(hào)選手sbitkey3=P1^2; //3號(hào)選手sbitkey4=P1^3; //4號(hào)選手ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽(yáng)ucharkeyflag=8;//初值為8無(wú)按鍵按下voiddelay(uinti);voidkeyscan();voidmain(){while(1)

{

keyscan()

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論