![單片機(jī)原理及接口技術(shù)(C51編程)05課件_第1頁](http://file4.renrendoc.com/view/3c5f87c268e5839cbaa96801c7505e26/3c5f87c268e5839cbaa96801c7505e261.gif)
![單片機(jī)原理及接口技術(shù)(C51編程)05課件_第2頁](http://file4.renrendoc.com/view/3c5f87c268e5839cbaa96801c7505e26/3c5f87c268e5839cbaa96801c7505e262.gif)
![單片機(jī)原理及接口技術(shù)(C51編程)05課件_第3頁](http://file4.renrendoc.com/view/3c5f87c268e5839cbaa96801c7505e26/3c5f87c268e5839cbaa96801c7505e263.gif)
![單片機(jī)原理及接口技術(shù)(C51編程)05課件_第4頁](http://file4.renrendoc.com/view/3c5f87c268e5839cbaa96801c7505e26/3c5f87c268e5839cbaa96801c7505e264.gif)
![單片機(jī)原理及接口技術(shù)(C51編程)05課件_第5頁](http://file4.renrendoc.com/view/3c5f87c268e5839cbaa96801c7505e26/3c5f87c268e5839cbaa96801c7505e265.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章單片機(jī)的開關(guān)檢測、鍵盤輸入與顯示的接口設(shè)計(jì)單片機(jī)原理及接口技術(shù)(C51編程)(第2版)第5章單片機(jī)的開關(guān)檢測、鍵盤輸入與顯示的接口設(shè)計(jì)單片機(jī)原目錄CONTENTS5.1單片機(jī)控制發(fā)光二極管顯示5.2開關(guān)狀態(tài)檢測5.3單片機(jī)控制LED數(shù)碼管的顯示5.4單片機(jī)控制LED點(diǎn)陣顯示器顯示5.5單片機(jī)控制液晶顯示模塊1602LCD的顯示5.6鍵盤接口設(shè)計(jì)目錄CONTENTS5.1單片機(jī)控制發(fā)光二極管顯示5.5.1單片機(jī)控制發(fā)光二極管顯示發(fā)光二極管常用來指示系統(tǒng)工作狀態(tài),制作節(jié)日彩燈、廣告牌匾等。大部分發(fā)光二極管工作電流1~5mA之間,其內(nèi)阻為20~100Ω。電流越大,亮度也越高。為保證發(fā)光二極管正常工作,同時(shí)減少功耗,限流電阻選擇十分重要,若供電電壓為+5V,則限流電阻可選1~3kΩ。5.1單片機(jī)控制發(fā)光二極管顯示發(fā)光二極管常用來指示系統(tǒng)工5.1.1單片機(jī)與發(fā)光二極管的連接第2章已介紹,P0口作通用I/O用,由于漏極開路,需外接上拉電阻。而P1~P3口內(nèi)部有30kΩ左右上拉電阻。下面討論P(yáng)1~P3口如何與LED發(fā)光二極管驅(qū)動連接問題。單片機(jī)并行端口P1~P3直接驅(qū)動發(fā)光二極管,電路見圖5-1。與P1、P2、P3口相比,P0口每位可驅(qū)動8個(gè)LSTTL輸入,而P1~P3口每一位驅(qū)動能力,只有P0口一半。5.1.1單片機(jī)與發(fā)光二極管的連接第2章已介紹,P0口作5.1.1單片機(jī)與發(fā)光二極管的連接圖5-1發(fā)光二極管與單片機(jī)并行口的連接5.1.1單片機(jī)與發(fā)光二極管的連接圖5-1發(fā)光二極管5.1.1單片機(jī)與發(fā)光二極管的連接當(dāng)P0口某位為高電平時(shí),可提供400μA的拉電流;當(dāng)P0口某位為低電平(0.45V)時(shí),可提供3.2mA的灌電流,而P1~P3口內(nèi)有30kΩ左右上拉電阻,如高電平輸出,則從P1、P2和P3口輸出的拉電流Id僅幾百μA,驅(qū)動能力較弱,亮度較差,見圖5-1(a)。如端口引腳為低電平,能使灌電流Id從單片機(jī)外部流入內(nèi)部,則將大大增加流過的灌電流值,見圖5-1(b)。AT89S51任一端口要想獲得較大的驅(qū)動能力,要用低電平輸出。如一定要高電平驅(qū)動,可在單片機(jī)與發(fā)光二極管間加驅(qū)動電路,如74LS04、74LS244等。5.1.1單片機(jī)與發(fā)光二極管的連接當(dāng)P0口某位為高電平5.1.2I/O端口的編程舉例對I/O端口編程控制時(shí),要對I/O端口特殊功能寄存器聲明,在C51的編譯器中,這項(xiàng)聲明包含在頭文件reg51.h中,編程時(shí),可通過預(yù)處理命令#include<reg51.h>,把這個(gè)頭文件包含進(jìn)去。下面通過案例介紹如何編程對發(fā)光二極管輸出控制。5.1.2I/O端口的編程舉例對I/O端口編程控制時(shí),要5.1.2I/O端口的編程舉例【例5-1】制作流水燈,原理電路見圖5-2,8個(gè)發(fā)光二極管LED0~LED7經(jīng)限流電阻分別接至P1口的P1.0~P1.7引腳上,陽極共同接高電平。編寫程序來控制發(fā)光二極管由上至下的反復(fù)循環(huán)流水點(diǎn)亮,每次點(diǎn)亮一個(gè)發(fā)光二極管。5.1.2I/O端口的編程舉例【例5-1】制作流水燈,5.1.2I/O端口的編程舉例圖5-2單片機(jī)控制的流水燈5.1.2I/O端口的編程舉例圖5-2單片機(jī)控制的5.1.2I/O端口的編程舉例參考程序:#include<reg51.h>#include<intrins.h>//包含移位函數(shù)_crol_()的頭文件#defineucharunsignedchar #defineuintunsignedint voiddelay(uinti) //延時(shí)函數(shù){ uchart; while(i--)
{
for(t=0;t<120;t++);
}}5.1.2I/O端口的編程舉例參考程序:5.1.2I/O端口的編程舉例voidmain()
//主程序{ P1=0xfe; //向P1口送出點(diǎn)亮數(shù)據(jù)while(1)
{
delay(500);//500為延時(shí)參數(shù),可根據(jù)實(shí)際需 //要調(diào)整
P1=_crol_(P1,1);//函數(shù)_crol_(P1,1)把P1中的數(shù)據(jù) //循環(huán)左移1位
}}5.1.2I/O端口的編程舉例voidmain(5.1.2I/O端口的編程舉例(1)while(1)兩種用法:“while(1);”:while(1)后有分號,是使程序停留在這指令上;“while(1){……;}”:反復(fù)循環(huán)執(zhí)行大括號內(nèi)程序段,本例用法,即控制流水燈反復(fù)循環(huán)顯示。5.1.2I/O端口的編程舉例(1)while(1)兩5.1.2I/O端口的編程舉例(2)C51函數(shù)庫中的循環(huán)移位函數(shù):循環(huán)移位函數(shù)包括:
循環(huán)左移函數(shù)“_crol_”。循環(huán)右移函數(shù)“_cror_”。本例用循環(huán)左移“_crol_(P1,1)”,函數(shù)。括號第1個(gè)參數(shù)為循環(huán)左移對象,即對P1中的內(nèi)容循環(huán)左移;第2個(gè)參數(shù)為左移位數(shù),即左移1位。編程中一定要把含有移位函數(shù)的頭文件intrins.h包含在內(nèi),例如第2行“#include<intrins.h>”。5.1.2I/O端口的編程舉例(2)C51函數(shù)庫中的循環(huán)5.1.2I/O端口的編程舉例在【例5-1】基礎(chǔ)上,編寫控制發(fā)光二極管反復(fù)循環(huán)點(diǎn)亮的流水燈。【例5-2】電路見圖5-2,制作由上至下再由下至上反復(fù)循環(huán)點(diǎn)亮顯示的流水燈,3種方法實(shí)現(xiàn)。數(shù)組的字節(jié)操作實(shí)現(xiàn)
建立1個(gè)字符型數(shù)組,將控制8個(gè)LED顯示的8位數(shù)據(jù)作為數(shù)組元素,依次送P1口。參考程序:01OPTION5.1.2I/O端口的編程舉例在【例5-1】基礎(chǔ)上,編寫5.1.2I/O端口的編程舉例#include<reg51.h>#defineucharunsignedchar uchartab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; /*前8個(gè)數(shù)據(jù)為左移點(diǎn)亮數(shù)據(jù),后8個(gè)為右移點(diǎn)亮數(shù)據(jù)*/voiddelay(){ uchari,j; for(i=0;i<255;i++) for(j=0;j<255;j++);}5.1.2I/O端口的編程舉例#include<reg5.1.2I/O端口的編程舉例voidmain() //主函數(shù){ uchari; while(1) { for(i=0;i<16;i++) { P1=tab[i]; //向P1口送出點(diǎn)亮數(shù)據(jù)
delay(); //延時(shí),即點(diǎn)亮一段時(shí)間
} }}5.1.2I/O端口的編程舉例voidmain(5.1.2I/O端口的編程舉例移位運(yùn)算符實(shí)現(xiàn)使用移位運(yùn)算符“>>”、“<<”,把送P1口顯示控制數(shù)據(jù)進(jìn)行移位,從而實(shí)現(xiàn)發(fā)光二極管依次點(diǎn)亮。參考程序:02OPTION#include<reg51.h>#defineucharunsignedchar
voiddelay(){ uchari,j; for(i=0;i<255;i++) for(j=0;j<255;j++);}5.1.2I/O端口的編程舉例移位運(yùn)算符實(shí)現(xiàn)02OPTI5.1.2I/O端口的編程舉例voidmain()
{//主函數(shù)
uchari,temp;while(1){
temp=0x01; //左移初值賦給temp
for(i=0;i<8;i++) {
P1=~temp; //temp中的數(shù)據(jù)取反后送P1口
delay(); //延時(shí)
temp=temp<<1; //temp中數(shù)據(jù)左移一位
}
5.1.2I/O端口的編程舉例voidmain(5.1.2I/O端口的編程舉例
temp=0x80; //賦右移初值給temp
for(i=0;i<8;i++){
P1=~temp; //temp中的數(shù)據(jù)取反后送P1口
delay(); //延時(shí)
temp=temp>>1; //temp中數(shù)據(jù)右移一位
} }}5.1.2I/O端口的編程舉例 temp=05.1.2I/O端口的編程舉例程序說明:注意使用移位運(yùn)算符“>>”、“<<”與使用循環(huán)左移函數(shù)“_crol_”和循環(huán)右移函數(shù)“_cror_”區(qū)別。左移移位運(yùn)算“<<”是將高位丟棄,低位補(bǔ)0;右移移位運(yùn)算、“>>”是將低位丟棄,高位補(bǔ)0。而循環(huán)左移函數(shù)“_crol_”是將移出的高位再補(bǔ)到低位,即循環(huán)移位;同理循環(huán)右移函數(shù)“_cror_”是將移出的低位再補(bǔ)到高位。5.1.2I/O端口的編程舉例程序說明:注意使用移位運(yùn)5.1.2I/O端口的編程舉例用循環(huán)左、右移位函數(shù)實(shí)現(xiàn)使用C51提供的庫函數(shù),即循環(huán)左移n位函數(shù)和循環(huán)右移n位函數(shù),控制發(fā)光二極管點(diǎn)亮。參考程序:03OPTION#include<reg51.h>#include<intrins.h> //包含循環(huán)左、右移位函數(shù)的頭文件#defineucharunsignedchar voiddelay(){
uchari,j; for(i=0;i<255;i++) for(j=0;j<255;j++);}5.1.2I/O端口的編程舉例用循環(huán)左、右移位函數(shù)實(shí)現(xiàn)05.1.2I/O端口的編程舉例voidmain(){ //主函數(shù)uchari,temp;
while(1){
temp=0xfe;
//初值為11111110
for(i=0;i<7;i++){
P1=temp; //temp中的點(diǎn)亮數(shù)據(jù)送P1 //口,控制點(diǎn)亮顯示
delay(); //延時(shí)
temp=_crol_(temp,1);
//temp數(shù)據(jù)循環(huán)左移1位
}5.1.2I/O端口的編程舉例voidmain(5.1.2I/O端口的編程舉例 for(i=0;i<7;i++){
P1=temp; //temp中的數(shù)據(jù)送P1口輸出
delay(); //延時(shí)
temp=_cror_(temp,1);
//temp中數(shù)據(jù)循環(huán)右移1位
}}}5.1.2I/O端口的編程舉例 for(i=0;i<7目錄CONTENTS5.1單片機(jī)控制發(fā)光二極管顯示5.2開關(guān)狀態(tài)檢測5.3單片機(jī)控制LED數(shù)碼管的顯示5.4單片機(jī)控制LED點(diǎn)陣顯示器顯示5.5單片機(jī)控制液晶顯示模塊1602LCD的顯示5.6鍵盤接口設(shè)計(jì)目錄CONTENTS5.1單片機(jī)控制發(fā)光二極管顯示5.5.2.1開關(guān)檢測案例1用I/O端口來進(jìn)行開關(guān)狀態(tài)檢測,開關(guān)一端接到I/O端口引腳上,并通過上拉電阻接+5V上,開關(guān)另一端接地,當(dāng)開關(guān)打開時(shí),I/O引腳為高電平,當(dāng)開關(guān)閉合時(shí),I/O引腳為低電平。
【例5-3】如圖5-3,單片機(jī)的P1.4~P1.7接4個(gè)開關(guān)S0~S3,P1.0~P1.3接4個(gè)發(fā)光二極管LED0~LED3。編程將P1.4~P1.7上的4個(gè)開關(guān)狀態(tài)反映在P1.0~P1.3引腳控制的4個(gè)發(fā)光二極管上,開關(guān)閉合,對應(yīng)發(fā)光二極管點(diǎn)亮。例如P1.4引腳上開關(guān)S0狀態(tài),由P1.0腳上LED0顯示,P1.6引腳上開關(guān)S2狀態(tài),由P1.2腳的LED2顯示。5.2.1開關(guān)檢測案例1用I/O端口來進(jìn)行開關(guān)狀態(tài)檢測,5.2.1開關(guān)檢測案例1圖5-3開關(guān)、LED發(fā)光二極管與P1口的連接5.2.1開關(guān)檢測案例1圖5-3開關(guān)、LED發(fā)光二5.2.1開關(guān)檢測案例1參考程序如下:#include<reg51.h>#defineucharunsignedcharvoiddelay()
//延時(shí)函數(shù){ uchari,j; for(i=0;i<255;i++) for(j=0;j<255;j++);}5.2.1開關(guān)檢測案例1參考程序如下:5.2.1開關(guān)檢測案例1voidmain(){//主函數(shù)while(1){ unsignedchartemp; //定義臨時(shí)變量temp
P1=0xff;
//P1口低4位置1,作為輸入;高4位置1,發(fā)光二極管熄滅temp=P1&0xf0;//讀P1口并屏蔽低4位,送入temp中
temp=temp>>4;
//temp內(nèi)容右移4位,P1口高4位移至低4位P1=temp; //temp中的數(shù)據(jù)送P1口輸出
delay();}}5.2.1開關(guān)檢測案例1voidmain(){5.2.2開關(guān)檢測案例2【例5-4】如圖5-4,P1.0和P1.1引腳接有兩只開關(guān)S0和S1,兩引腳上的高低電平共4種組合,4種組合分別點(diǎn)亮P2.0~P2.3引腳控制的4只LED,即S0、S1均閉合,LED0亮,其余滅;S1閉合、S0打開,LED1亮,其余滅;S0閉合、S1打開,LED2亮,其余滅;S0、S1均打開,LED3亮,其余滅。編程實(shí)現(xiàn)此功能。5.2.2開關(guān)檢測案例2【例5-4】如圖5-4,P1.5.2.2開關(guān)檢測案例2圖5-4開關(guān)檢測指示器2接口電路與仿真5.2.2開關(guān)檢測案例2圖5-4開關(guān)檢測指示器2接5.2.2開關(guān)檢測案例2參考程序:#include<reg51.h> //包含頭文件reg51.hvoidmain() {
//主函數(shù)main() charstate;
do{
P1=0xff; //P1口為輸入
state=P1; //讀入P1口的狀態(tài),送入state
state=state&0x03; //屏蔽P1口的高6位
5.2.2開關(guān)檢測案例2參考程序:#include<5.2.2開關(guān)檢測案例2
switch(state){ //判P1口低2位開關(guān)狀態(tài) case0:P2=0x01;break;
//P1.1、P1.0=00,點(diǎn)亮P2.0腳LED case1:P2=0x02;break;
//P1.1、P1.0=01,點(diǎn)亮P2.1腳LED case2:P2=0x04;break;
//P1.1、P1.0=10,點(diǎn)亮P2.2腳LED case3:P2=0x08;break;
//P1.1、P1.0=11,點(diǎn)亮P2.3腳LED } }while(1);}程序段中用到循環(huán)結(jié)構(gòu)控制語句do-while以及switch-case語句。5.2.2開關(guān)檢測案例2 switch(state)目錄CONTENTS5.1單片機(jī)控制發(fā)光二極管顯示5.2開關(guān)狀態(tài)檢測5.3單片機(jī)控制LED數(shù)碼管的顯示5.4單片機(jī)控制LED點(diǎn)陣顯示器顯示5.5單片機(jī)控制液晶顯示模塊1602LCD的顯示5.6鍵盤接口設(shè)計(jì)目錄CONTENTS5.1單片機(jī)控制發(fā)光二極管顯示5.5.3.1LED數(shù)碼管顯示原理LED數(shù)碼管:“8”字型,7段(不包括小數(shù)點(diǎn))或8段(包括小數(shù)點(diǎn)),每段對應(yīng)一個(gè)發(fā)光二極管,共陽極和共陰極兩種,見圖5-5。共陽極數(shù)碼管的陽極連接在一起,接+5V;共陰極數(shù)碼管陰極連在一起接地。對于共陰極數(shù)碼管,當(dāng)某發(fā)光二極管陽極為高電平時(shí),發(fā)光二極管點(diǎn)亮,相應(yīng)段被顯示。同樣,共陽極數(shù)碼管陽極連在一起,公共陽極接+5V,當(dāng)某個(gè)發(fā)光二極管陰極接低電平時(shí),該發(fā)光二極管被點(diǎn)亮,相應(yīng)段被顯示。5.3.1LED數(shù)碼管顯示原理LED數(shù)碼管:“8”字型5.3.1LED數(shù)碼管顯示原理圖5-58段LED數(shù)碼管結(jié)構(gòu)及外形5.3.1LED數(shù)碼管顯示原理圖5-58段LE5.3.1LED數(shù)碼管顯示原理為使LED數(shù)碼管顯示不同字符,要把某些段點(diǎn)亮,就要為數(shù)碼管各段提供一字節(jié)的二進(jìn)制碼,即字型碼(也稱段碼)。習(xí)慣上以“a”段對應(yīng)字型碼字節(jié)的最低位。各字符段碼見表5-1。5.3.1LED數(shù)碼管顯示原理為使LED數(shù)碼管顯示不同字5.3.1LED數(shù)碼管顯示原理如要在數(shù)碼管顯示某字符,只需將該字符字型碼加到各段上即可。例如某存儲單元中的數(shù)為“02H”,想在共陽極數(shù)碼管上顯示“2”,需要把“2”的字型碼“A4H”加到數(shù)碼管各段。將欲顯示字符的字型碼作成一個(gè)表(數(shù)組),根據(jù)顯示字符從表中查找到相應(yīng)字型碼,然后把該字型碼輸出數(shù)碼管各個(gè)段上,同時(shí)數(shù)碼管的公共端接+5V,此時(shí)在數(shù)碼管上顯示字符“2”。下面介紹單片機(jī)如何控制LED數(shù)碼管顯示字符。5.3.1LED數(shù)碼管顯示原理如要在數(shù)碼管顯示某字符,只5.3.1LED數(shù)碼管顯示原理【例5-5】利用單片機(jī)控制一個(gè)8段LED數(shù)碼管先循環(huán)顯示單個(gè)偶數(shù):0、2、4、6、8,再顯示單個(gè)奇數(shù):1、3、5、7、9,如此反復(fù)循環(huán)顯示。本例原理電路及仿真結(jié)果,見圖5-6。參考程序如下:5.3.1LED數(shù)碼管顯示原理【例5-5】利用單片機(jī)控制5.3.1LED數(shù)碼管顯示原理圖5-6控制數(shù)碼管循環(huán)顯示單個(gè)數(shù)字的電路及仿真5.3.1LED數(shù)碼管顯示原理圖5-6控制5.3.1LED數(shù)碼管顯示原理#include"reg51.h"#include"intrins.h"#defineucharunsignedchar#defineuintunsignedint#defineoutP0ucharcodeseg[]={0xc0,0xa4,0x99,0x82,0x80,0xf9,0xb0,0x92,0xf8,0x90,0x01};//共陽極段碼表voiddelayms(uint);
5.3.1LED數(shù)碼管顯示原理#include"reg5.3.1LED數(shù)碼管顯示原理voidmain(void){
uchari;while(1) { out=seg[i]; delayms(900); i++; if(seg[i]==0x01)i=0;
//如段碼為0x01,表明一個(gè)循環(huán)顯示已結(jié)束
}}5.3.1LED數(shù)碼管顯示原理voidmain(voi5.3.1LED數(shù)碼管顯示原理voiddelayms(uintj) //延時(shí)函數(shù) {uchari;for(;j>0;j--) { i=250; while(--i); i=249; while(--i); }}5.3.1LED數(shù)碼管顯示原理voiddelayms(5.3.1LED數(shù)碼管顯示原理說明:語句“if(seg[i]==0x01)i=0;”含義:如果欲送出的數(shù)組元素為0x01(數(shù)字“9”段碼0x90的下一個(gè)元素,即結(jié)束碼),表明一個(gè)循環(huán)顯示已結(jié)束,則i=0,則重新開始循環(huán)顯示,從段碼數(shù)組表的第一個(gè)元素seg[0],即段碼0xc0(數(shù)字0)重新開始顯示。5.3.1LED數(shù)碼管顯示原理說明:語句“if(seg[5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示1.靜態(tài)顯示方式無論多少位LED數(shù)碼管,都同時(shí)處于顯示狀態(tài)。多位LED數(shù)碼管工作于靜態(tài)顯示方式時(shí),各位共陰極(或共陽極)連接在一起并接地(或接+5V);每位數(shù)碼管段碼線(a~dp)分別與一個(gè)8位I/O口鎖存器輸出相連。如果送往各個(gè)LED數(shù)碼管所顯示字符的段碼一經(jīng)確定,則相應(yīng)I/O口鎖存器鎖存的段碼輸出將維持不變,直到送入下一個(gè)顯示字符段碼。靜態(tài)顯示方式顯示無閃爍,亮度較高,軟件控制較易。5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示1.靜態(tài)顯示5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示1.靜態(tài)顯示方式圖5-7為4位LED數(shù)碼管靜態(tài)顯示電路,各數(shù)碼管可獨(dú)立顯示,只要向控制各位I/O口鎖存器送相應(yīng)顯示段碼,該位就能保持相應(yīng)的顯示字符。這樣在同一時(shí)間,每一位顯示的字符可各不相同。靜態(tài)顯示方式占用I/O口端口線較多。圖5-7電路,要占用4個(gè)8位I/O口(或鎖存器)。如數(shù)碼管數(shù)目增多,則需增加I/O口數(shù)目。5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示1.靜態(tài)顯示5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示1.靜態(tài)顯示方式圖5-74位LED靜態(tài)顯示的示意圖5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示1.靜態(tài)顯示5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示1.靜態(tài)顯示方式【例5-6】單片機(jī)控制2只數(shù)碼管,靜態(tài)顯示2個(gè)數(shù)字“27”。原理電路見圖5-8。單片機(jī)用P0口與P1口,分別控制加到兩個(gè)數(shù)碼管DS0與DS1的段碼,而共陽極數(shù)碼管DS0與DS1的公共端(公共陽極端)直接接至+5V,因此數(shù)碼管DS0與DS1始終處于導(dǎo)通狀態(tài)。利用P0口與P1口帶有的鎖存功能,只需向單片機(jī)P0口與P1口分別寫入相應(yīng)的顯示字符“2”和“7”的段碼即可。由于一個(gè)數(shù)碼管就占用一個(gè)I/O端口。如果數(shù)碼管數(shù)目增多,則需增加I/O口,但軟件編程要簡單的多。5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示1.靜態(tài)顯示5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示圖5-82位數(shù)碼管靜態(tài)顯示的原理電路與仿真5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示圖5-85.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示1.靜態(tài)顯示方式參考程序如下:#include<reg51.h>//包含8051單片機(jī)寄存器定義的頭文件voidmain(void){
P0=0xa4; //將數(shù)字"2"的段碼送P0口
P1=0xf8; //將數(shù)字"7"的段碼送P1口
while(1) //無限循環(huán)
;}5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示1.靜態(tài)顯示5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示
2.動態(tài)顯示方式顯示位數(shù)較多時(shí),靜態(tài)顯示所占的I/O口多,這時(shí)常采用動態(tài)顯示。為節(jié)省I/O口,通常將所有顯示器段碼線相應(yīng)段并聯(lián)在一起,由一個(gè)8位I/O口控制,各顯示位公共端分別由另一單獨(dú)I/O口線控制。5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示
2.動態(tài)顯示方式圖5-9:4位8段LED動態(tài)顯示器電路示意圖。其中單片機(jī)發(fā)出的段碼占用1個(gè)8位I/O(1)端口,而位選控制使用I/O(2)端口中4位口線。動態(tài)顯示就是單片機(jī)向段碼線輸出欲顯示字符的段碼。每一時(shí)刻,只有1位位選線有效,即選中某一位顯示,其他各位位選線都無效。每隔一定時(shí)間逐位輪流點(diǎn)亮各數(shù)碼管(掃描方式),由于數(shù)碼管余輝和人眼的“視覺暫留”作用,只要控制好每位數(shù)碼管顯示時(shí)間和間隔,則可造成“多位同時(shí)亮”的假象,達(dá)到同時(shí)顯示效果。5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示
2.動態(tài)顯示方式圖5-94位LED數(shù)碼管動態(tài)顯示示意圖5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示
2.動態(tài)顯示方式各位數(shù)碼管輪流點(diǎn)亮的時(shí)間間隔(掃描間隔)應(yīng)根據(jù)實(shí)際情況定。發(fā)光二極管從導(dǎo)通到發(fā)光有一定的延時(shí),如果點(diǎn)亮?xí)r間太短,發(fā)光太弱,人眼無法看清;時(shí)間太長,產(chǎn)生閃爍現(xiàn)象,且此時(shí)間越長,占用單片機(jī)時(shí)間也越多。另外,顯示位數(shù)增多,也將占用單片機(jī)大量時(shí)間,因此動態(tài)顯示實(shí)質(zhì)是以執(zhí)行程序時(shí)間來換取I/O端口減少。下面是動態(tài)顯示實(shí)例。5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示
2.動態(tài)顯示方式【例5-7】8只數(shù)碼管,分別滾動顯示單個(gè)數(shù)字1~8。程序運(yùn)行后,單片機(jī)控制左邊第1個(gè)數(shù)碼管顯示1,其他不顯示,延時(shí)之后,控制左邊第2個(gè)數(shù)碼管顯示1,其他不顯示,直至第8個(gè)數(shù)碼管顯示8,其他不顯示,反復(fù)循環(huán)上述過程。5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示
2.動態(tài)顯示方式動態(tài)顯示電路見圖5-10,P0口輸出段碼,P2口輸出掃描的位控碼,通過由8個(gè)NPN晶體管的位驅(qū)動電路對8個(gè)數(shù)碼管位控掃描。即使掃描速度加快,由于是虛擬仿真,數(shù)碼管的余輝也不能像實(shí)際電路那樣體現(xiàn)出來。如對本例實(shí)際硬件顯示電路進(jìn)行快速掃描,由于數(shù)碼管余輝和人眼“視覺暫留”作用,只要控制好每位數(shù)碼管顯示的時(shí)間和間隔,則可造成“多位同時(shí)亮”假象,達(dá)到同時(shí)顯示效果。5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示
2.動態(tài)顯示方式但虛擬仿真做不到這一點(diǎn)。仿真運(yùn)行下,只能是一位一位點(diǎn)亮顯示,不能看到同時(shí)顯示效果,但本例使我們了解動態(tài)掃描顯示實(shí)際過程。如采用實(shí)際硬件電路,用軟件控制快速掃描,可看到“多位同時(shí)點(diǎn)亮”效果。5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示圖5-108只數(shù)碼管分別滾動顯示單個(gè)數(shù)字1~85.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示圖5-105.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯示方式參考程序如下:#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharcodedis_code[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0xc0}; //共陽數(shù)碼管段碼表voiddelay(uintt){//延時(shí)函數(shù) uchari; while(t--)for(i=0;i<200;i++);}5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯示5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯示方式voidmain(){
uchari,j=0x80; while(1){
for(i=0;i<8;i++){
j=_crol_(j,1); //_crol_(j,1)為將對象j循環(huán)左移1位
P0=dis_code[i];//P0口輸出段碼
P2=j; //P2口輸出位控碼
delay(180); //延時(shí),控制每位顯示的時(shí)間
}
}}5.3.2LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示2.動態(tài)顯示目錄CONTENTS5.1單片機(jī)控制發(fā)光二極管顯示5.2開關(guān)狀態(tài)檢測5.3單片機(jī)控制LED數(shù)碼管的顯示5.4單片機(jī)控制LED點(diǎn)陣顯示器顯示5.5單片機(jī)控制液晶顯示模塊1602LCD的顯示5.6鍵盤接口設(shè)計(jì)目錄CONTENTS5.1單片機(jī)控制發(fā)光二極管顯示5.5.4單片機(jī)控制LED點(diǎn)陣顯示器顯示
LED點(diǎn)陣顯示器應(yīng)用非常廣泛,在許多公共場合,如商場、銀行、車站、機(jī)場、醫(yī)院隨處可見。不僅能顯示文字、圖形,還能播放動畫、圖像、視頻等信號。LED點(diǎn)陣顯示器分為圖文顯示器和視頻顯示器,有單色顯示,還有彩色顯示。下面僅介紹單片機(jī)如何來控制單色LED點(diǎn)陣顯示器的顯示。5.4單片機(jī)控制LED點(diǎn)陣顯示器顯示LED點(diǎn)陣顯示器應(yīng)5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理
1.LED點(diǎn)陣結(jié)構(gòu)以8×8LED點(diǎn)陣顯示器為例,外形見圖5-11,內(nèi)部結(jié)構(gòu)見圖5-12,由64個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管是處于行線(R0~R7)和列線(C0~C7)之間交叉點(diǎn)上。圖5-118×8LED點(diǎn)陣顯示器外形5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理1.LED5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理
2.LED點(diǎn)陣顯示原理顯示的字符由一個(gè)個(gè)點(diǎn)亮的LED所構(gòu)成。由圖5-12點(diǎn)亮點(diǎn)陣中一個(gè)發(fā)光二極管條件:對應(yīng)行為高電平,對應(yīng)列為低電平。如在很短時(shí)間內(nèi)依次點(diǎn)亮很多個(gè)發(fā)光二極管,LED點(diǎn)陣就可顯示一個(gè)穩(wěn)定字符、數(shù)字或其他圖形??刂芁ED點(diǎn)陣顯示器顯示,實(shí)質(zhì)就是控制加到行線和列線上編碼,控制點(diǎn)亮某些發(fā)光二極管(點(diǎn)),從而顯示出由不同發(fā)光點(diǎn)組成的各種字符。5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理2.LED點(diǎn)5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理
1.LED點(diǎn)陣結(jié)構(gòu)圖5-128×8LED點(diǎn)陣顯示器(共陰極)的結(jié)構(gòu)5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理1.LED5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理
2.LED點(diǎn)陣顯示原理16×16LED點(diǎn)陣顯示器的結(jié)構(gòu)與8×8LED點(diǎn)陣顯示模塊內(nèi)部結(jié)構(gòu)及顯示原理是類似的,只不過行和列均為16。16×16是由4個(gè)8×8LED點(diǎn)陣組成,且每個(gè)發(fā)光二極管也是放置在行線和列線的交叉點(diǎn)上,當(dāng)對應(yīng)某一列置0電平,某一行置1電平時(shí),該發(fā)光二極管點(diǎn)亮。下面以顯示字符“子”為例,見圖5-13。5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理2.LED點(diǎn)5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理
1.LED點(diǎn)陣結(jié)構(gòu)圖5-1316×16LED點(diǎn)陣顯示器顯示字符“子”5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理1.LED5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理
2.LED點(diǎn)陣顯示原理顯示過程如下:先給LED點(diǎn)陣的第1行送高電平(行線高電平有效),同時(shí)給所有列線送高電平(列線低電平有效),從而第1行發(fā)光二極管全滅;延時(shí)一段時(shí)間后,再給第2行送高電平,同時(shí)給所有列線送“1100000000001111”,列線為0的發(fā)光二極管點(diǎn)亮,從而點(diǎn)亮10個(gè)發(fā)光二極管,顯示出漢字“子”的第一橫;5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理2.LED點(diǎn)5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理
2.LED點(diǎn)陣顯示原理延時(shí)一段時(shí)間后,再給第3行送高電平,同時(shí)加到列線的編碼為“1111111111011111”,點(diǎn)亮1個(gè)發(fā)光二極管;
……;延時(shí)一段時(shí)間后,再給第16行送高電平,同時(shí)給列線送“1111110111111111”,顯示出漢字“子”的最下面的一行,點(diǎn)亮1個(gè)發(fā)光二極管。然后再重新循環(huán)上述操作,利用人眼視覺暫留效應(yīng),一個(gè)穩(wěn)定字符“子”顯示出來,見圖5-13。5.4.1LED點(diǎn)陣顯示器結(jié)構(gòu)與顯示原理2.LED點(diǎn)5.4.2控制16×16LED點(diǎn)陣顯示屏的案例單片機(jī)控制16×16點(diǎn)陣顯示屏顯示字符案例?!纠?-8】如圖5-14,利用單片機(jī)及74LS154(4-16譯碼器)、74LS07、16×16LED點(diǎn)陣顯示屏來實(shí)現(xiàn)字符顯示,編寫程序,循環(huán)顯示字符“電子技術(shù)”。圖中16×16LED點(diǎn)陣顯示屏16行行線R0~R15電平,由P1口低4位經(jīng)4-16譯碼器74HC154的16條譯碼輸出線L0~L15經(jīng)驅(qū)動后的輸出來控制。16列列線C0~C15的電平由P0口和P2口控制。剩下問題是如何確定顯示字符的點(diǎn)陣編碼,以及控制好每一屏逐行顯示的掃描速度(刷新頻率)。5.4.2控制16×16LED點(diǎn)陣顯示屏的案例單片機(jī)控5.4.2控制16×16LED點(diǎn)陣顯示屏的案例圖5-14控制16×16LED點(diǎn)陣顯示器(共陰極)顯示字符5.4.2控制16×16LED點(diǎn)陣顯示屏的案例圖5-15.4.2控制16×16LED點(diǎn)陣顯示屏的案例參考程序如下:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#defineout0P0#defineout2P2#defineout1P1voiddelay(uintj){//延時(shí)函數(shù) uchari=250; for(;j>0;j--){ while(--i); i=100; }
}5.4.2控制16×16LED點(diǎn)陣顯示屏的案例參考程序5.4.2控制16×16LED點(diǎn)陣顯示屏的案例ucharcodestring[]={//漢字“電”16×16點(diǎn)陣列碼0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x03,0xE0,0x7B,0xEF,0x7B,0xEF,0x03,0xE0,0x7B,0xEF,0x7B,0xEF,0x7B,0xEF,0x03,0xE0,0x7B,0xEF,0x7F,0xBF,0x7F,0xBF,0xFF,0x00,0xFF,0xFF//漢字“子”16×16點(diǎn)陣列碼0xFF,0xFF,0x03,0xF0,0xFF,0xFB,0xFF,0xFD,0xFF,0xFE,0x7F,0xFF,0x7F,0xFF,0x7F,0xDF,0x00,0x80,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x5F,0xFF,0xBF,0xFF//漢字“技”16×16點(diǎn)陣列碼0xF7,0xFB,0xF7,0xFB,0xF7,0xFB,0x40,0x80,0xF7,0xFB,0xD7,0xFB,0x67,0xC0,0x73,0xEF,0xF4,0xEE,0xF7,0xF6,0xF7,0xF9,0xF7,0xF9,0xF7,0xF6,0x77,0x8F,0x95,0xDF,0xFB,0xFF5.4.2控制16×16LED點(diǎn)陣顯示屏的案例ucha5.4.2控制16×16LED點(diǎn)陣顯示屏的案例//漢字“術(shù)”的16×16點(diǎn)陣的列碼0x7F,0xFF,0x7F,0xFB,0x7F,0xF7,0x7F,0xFF,0x00,0x80,0x7F,0xFF,0x3F,0xFE,0x5F,0xFD,0x5F,0xFB,0x6F,0xF7,0x77,0xE7,0x7B,0x8F,0x7C,0xDF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,};voidmain(){ uchari,j,n; while(1){ for(j=0;j<4;j++) //共顯示4個(gè)漢字
{5.4.2控制16×16LED點(diǎn)陣顯示屏的案例//漢字5.4.2控制16×16LED點(diǎn)陣顯示屏的案例for(n=0;n<40;n++) //每個(gè)漢字整屏掃描40次{
for(i=0;i<16;i++){//逐行掃描16行
out1=i%16; //輸出行碼,
out0=string[i*2+j*32];
//輸出列碼到C0~C7,逐行掃描
out2=string[i*2+1+j*32];//輸出列碼到C8~C15,逐行掃描
delay(4); //顯示并延時(shí)一段時(shí)間
out0=0xff; //列線C0~C7為高電平,熄滅發(fā)光二極管
out2=0xff; /列線C8~C15為高電平,熄滅發(fā)光二極管
}}}}}5.4.2控制16×16LED點(diǎn)陣顯示屏的案例for5.4.2控制16×16LED點(diǎn)陣顯示屏的案例掃描顯示時(shí),單片機(jī)通過P1口低4位經(jīng)4-16譯碼器74HC154的16條譯碼輸出線L0~L15經(jīng)驅(qū)動后的輸出來控制,逐行為高電平,來進(jìn)行掃描。由P0口與P2口控制列碼的輸出,從而顯示出某行應(yīng)點(diǎn)亮的發(fā)光二極管。以顯示漢字“子”為例,說明顯示過程。由上面程序可看出,漢字“子”的前3行發(fā)光二級管的列碼為“0xFF,0xFF,0x03,0xF0,0xFF,0xFB,……”5.4.2控制16×16LED點(diǎn)陣顯示屏的案例掃描顯5.4.2控制16×16LED點(diǎn)陣顯示屏的案例按照圖5-12和圖5-14連線關(guān)系,加到從左到右發(fā)光二極管應(yīng)為C0~C7的二進(jìn)制編碼為“11000000”,即最左邊的2個(gè)發(fā)光二極管不亮,其余的6個(gè)發(fā)光二極管點(diǎn)亮。第一行列碼為:“0xff,0xff”,由P0口與P2口輸出,無點(diǎn)亮的發(fā)光二極管。第二行列碼為:“0x03,0xf0”,通過P0口與P2口輸出后,由圖5-13看出,0x03加到列線C7~C0的二進(jìn)制編碼為“00000011”,這里要注意加到8個(gè)發(fā)光二極管上的對應(yīng)位置。5.4.2控制16×16LED點(diǎn)陣顯示屏的案例按照圖55.4.2控制16×16LED點(diǎn)陣顯示屏的案例同理,P2口輸出的0xF0加到列線C15~C8的二進(jìn)制編碼為“11110000”,即加到C8~C15的二進(jìn)制編碼為“00001111”,所以第二行的最右邊的4個(gè)發(fā)光二極管不亮,如圖5-13所示。對應(yīng)通過P0口與P2口輸出加到第3行16個(gè)發(fā)光二極管的列碼為“0xFF,0xFB,”,對應(yīng)于從左到右的C0~C15的二進(jìn)制編碼為“1111111111011111”,從而第3行左邊數(shù)第11個(gè)發(fā)光二極管被點(diǎn)亮,其余均熄滅,如圖5-13所示。其余各行點(diǎn)亮的發(fā)光二極管,也是由16×16點(diǎn)陣的列碼來決定。5.4.2控制16×16LED點(diǎn)陣顯示屏的案例同理,P目錄CONTENTS5.1單片機(jī)控制發(fā)光二極管顯示5.2開關(guān)狀態(tài)檢測5.3單片機(jī)控制LED數(shù)碼管的顯示5.4單片機(jī)控制LED點(diǎn)陣顯示器顯示5.5單片機(jī)控制液晶顯示模塊1602LCD的顯示5.6鍵盤接口設(shè)計(jì)目錄CONTENTS5.1單片機(jī)控制發(fā)光二極管顯示5.5.5單片機(jī)控制液晶顯示模塊1602LCD的顯示液晶顯示器(LiquidCrystalDisplay,LCD)具有省電、體積小、抗干擾能力強(qiáng)等優(yōu)點(diǎn),LCD顯示器分為字段型、字符型和點(diǎn)陣圖形型。字段型。以長條狀組成字符顯示,主要用于數(shù)字顯示,也可用于顯示西文字母或某些字符,廣泛用于電子表、計(jì)算器、數(shù)字儀表中。01OPTION02OPTION字符型。專門用于顯示字母、數(shù)字、符號等。一個(gè)字符由5×7或5×10的點(diǎn)陣組成,在單片機(jī)系統(tǒng)中已廣泛使用。5.5單片機(jī)控制液晶顯示模塊1602LCD的顯示液晶顯5.5單片機(jī)控制液晶顯示模塊1602LCD的顯示03OPTION點(diǎn)陣圖形型。廣泛用于圖形顯示,如筆記本電腦、彩色電視和游戲機(jī)等。它是在平板上排列的多行列的矩陣式的晶格點(diǎn),點(diǎn)大小與多少決定了顯示的清晰度。5.5單片機(jī)控制液晶顯示模塊1602LCD的顯示03O5.5.1LCD1602液晶顯示模塊簡介單片機(jī)系統(tǒng)中常用的字符型液晶顯示模塊。由于LCD顯示面板較為脆弱,廠商已將LCD控制器、驅(qū)動器、RAM、ROM和液晶顯示器用PCB連接到一起,稱為液晶顯示模塊(LCdModule,LCM),購買現(xiàn)成的即可。單片機(jī)只需向LCD顯示模塊寫入相應(yīng)命令和數(shù)據(jù)就可顯示需要的內(nèi)容。5.5.1LCD1602液晶顯示模塊簡介單片機(jī)系統(tǒng)中5.5.1LCD1602液晶顯示模塊簡介字符型LCD模塊常用的有16字×1行、16字×2行、20字×2行、20字×4行等模塊,型號常用×××1602、×××1604、×××2002、×××2004來表示,其中×××為商標(biāo)名稱,16代表液晶顯示器每行可顯示16個(gè)字符,02表示顯示2行。LCD1602內(nèi)有字符庫ROM(CGROM),能顯示出192個(gè)字符(5×7點(diǎn)陣),如圖5-15所示。1.字符型液晶顯示模塊LCD1602特性與引腳5.5.1LCD1602液晶顯示模塊簡介字符型LCD模5.5.1LCD1602液晶顯示模塊簡介1.字符型液晶顯示模塊LCD1602特性與引腳圖5-15ROM字符庫的內(nèi)容5.5.1LCD1602液晶顯示模塊簡介1.字符型液晶5.5.1LCD1602液晶顯示模塊簡介1.字符型液晶顯示模塊LCD1602特性與引腳由字符庫可看出顯示器顯示的數(shù)字和字母部分代碼,恰是ASCII碼表中編碼。單片機(jī)控制LCD1602顯示字符,只需將待顯示字符的ASCII碼寫入顯示數(shù)據(jù)存儲器(DDRAM),內(nèi)部控制電路就可將字符在顯示器上顯示出來。5.5.1LCD1602液晶顯示模塊簡介1.字符型液晶5.5.1LCD1602液晶顯示模塊簡介例如,顯示字符“A”,單片機(jī)只需將字符“A”的ASCII碼41H寫入DDRAM,控制電路就會將對應(yīng)的字符庫ROM(CGROM)中的字符“A”的點(diǎn)陣數(shù)據(jù)找出來顯示在LCD上。模塊內(nèi)有80字節(jié)數(shù)據(jù)顯示RAM
(DDRAM),除顯示192個(gè)字符(5×7點(diǎn)陣)的字符庫ROM(CGROM)外,還有64字節(jié)的自定義字符RAM(CGRAM),用戶可自行定義8個(gè)5×7點(diǎn)陣字符。1.字符型液晶顯示模塊LCD1602特性與引腳5.5.1LCD1602液晶顯示模塊簡介例如,顯示字符5.5.1LCD1602液晶顯示模塊簡介
LCD1602工作電壓4.5~5.5V,典型5V,工作電流2mA。標(biāo)準(zhǔn)的14引腳(無背光)或16個(gè)引腳(有背光)的外形及引腳分布如圖5-16所示。1.字符型液晶顯示模塊LCD1602特性與引腳(a)LCD1602的外形(b)LCD1602的引腳圖5-16LCD1602外形及引腳5.5.1LCD1602液晶顯示模塊簡介LCD165.5.1LCD1602液晶顯示模塊簡介引腳包括8條數(shù)據(jù)線、3條控制線和3條電源線,見表5-2。通過單片機(jī)向模塊寫入命令和數(shù)據(jù),就可對顯示方式和顯示內(nèi)容做出選擇。1.字符型液晶顯示模塊LCD1602特性與引腳5.5.1LCD1602液晶顯示模塊簡介引腳包括8條數(shù)5.5.1LCD1602液晶顯示模塊簡介顯示字符首先要解決待顯示字符的ASCII碼產(chǎn)生。用戶只需在C51程序中寫入欲顯示的字符常量或字符串常量,C51程序在編譯后會自動生成其標(biāo)準(zhǔn)的ASCII碼,然后將生成的ASCII碼送入顯示用數(shù)據(jù)存儲器DDRAM,內(nèi)部控制電路就會自動將該ASCII碼對應(yīng)的字符在LCD1602顯示出來。2.LCD1602字符的顯示及命令字5.5.1LCD1602液晶顯示模塊簡介顯示字符首先要5.5.1LCD1602液晶顯示模塊簡介2.LCD1602字符的顯示及命令字讓液晶顯示器顯示字符,首先對其進(jìn)行初始化設(shè)置:對有、無光標(biāo)、光標(biāo)移動方向、光標(biāo)是否閃爍及字符移動方向等進(jìn)行設(shè)置,才能獲得所需顯示效果。對LCD1602的初始化、讀、寫、光標(biāo)設(shè)置、顯示數(shù)據(jù)的指針設(shè)置等,都是單片機(jī)向LCD1602寫入命令字來實(shí)現(xiàn)。命令字見表5-3。5.5.1LCD1602液晶顯示模塊簡介2.LCD165.5.1LCD1602液晶顯示模塊簡介2.LCD1602字符的顯示及命令字5.5.1LCD1602液晶顯示模塊簡介2.LCD165.5.1LCD1602液晶顯示模塊簡介2.LCD1602字符的顯示及命令字表5-3中11個(gè)命令功能說明如下:命令1:清屏,光標(biāo)返回地址00H位置(顯示屏的左上方)。命令2:光標(biāo)返回到地址00H位置(顯示屏的左上方)。命令3:光標(biāo)和顯示模式設(shè)置。5.5.1LCD1602液晶顯示模塊簡介2.LCD165.5.1LCD1602液晶顯示模塊簡介2.LCD1602字符的顯示及命令字I/D—地址指針加1或減1選擇位。
I/D=1,讀或?qū)懸粋€(gè)字符后地址指針加1;
I/D=0,讀或?qū)懸粋€(gè)字符后地址指針減1。S—屏幕上所有字符移動方向是否有效的控制位。
S=1,當(dāng)寫入一字符時(shí),整屏顯示左移
(I/D=1)或右移(I/D=0);S=0,整屏顯示不移動。5.5.1LCD1602液晶顯示模塊簡介2.LCD165.5.1LCD1602液晶顯示模塊簡介2.LCD1602字符的顯示及命令字表5-3中11個(gè)命令功能說明如下:命令4:顯示開/關(guān)及光標(biāo)設(shè)置。
D—屏幕整體顯示控制位,D=0關(guān)顯示,D=1開顯示。
C—光標(biāo)有無控制位,C=0無光標(biāo),C=1有光標(biāo)。
B—光標(biāo)閃爍控制位,B=0不閃爍,B=1閃爍。5.5.1LCD1602液晶顯示模塊簡介2.LCD165.5.1LCD1602液晶顯示模塊簡介2.LCD1602字符的顯示及命令字命令5:光標(biāo)或字符移位。
S/C—光標(biāo)或字符移位選擇控制位。0:移動光標(biāo),
1:移動顯示的字符。
R/L—移位方向選擇控制位。0:左移,1:右移,5.5.1LCD1602液晶顯示模塊簡介2.LCD165.5.1LCD1602液晶顯示模塊簡介2.LCD1602字符的顯示及命令字命令6:功能設(shè)置命令。
DL—傳輸數(shù)據(jù)的有效長度選擇控制位。1:8位數(shù)據(jù)
線接口;0:4位數(shù)據(jù)線接口。
N—顯示器行數(shù)選擇控制位。0:單行顯示,1:兩
行顯示。
F—字符顯示的點(diǎn)陣控制位。0:顯示5×7點(diǎn)陣字符,
1:顯示5×10點(diǎn)陣字符。5.5.1LCD1602液晶顯示模塊簡介2.LCD165.5.1LCD1602液晶顯示模塊簡介2.LCD1602字符的顯示及命令字命令7:CGRAM地址設(shè)置。命令8:DDRAM地址設(shè)置。LCD內(nèi)部有一個(gè)數(shù)據(jù)地址指
針,用戶可通過它訪問內(nèi)部全部80字節(jié)的數(shù)據(jù)顯
示RAM。
命令格式:80H+地址碼。其中,80H為命令碼。命令9:讀忙標(biāo)志或地址。
BF—忙標(biāo)志。1:LCD忙,此時(shí)LCD不能接受命令
或數(shù)據(jù);0:表示LCD不忙。命令10:寫數(shù)據(jù)。命令11:讀數(shù)據(jù)。5.5.1LCD1602液晶顯示模塊簡介2.LCD165.5.1LCD1602液晶顯示模塊簡介3.字符顯示位置的確定80字節(jié)的DDRAM,與顯示屏上字符顯示位置一一對應(yīng),圖5-17給出LCD1602顯示RAM地址與字符顯示位置的對應(yīng)關(guān)系。當(dāng)向DDRAM的00H~0FH(第1行)、40H~4FH(第2行)地址的任一處寫數(shù)據(jù)時(shí),LCD立即顯示出來,該區(qū)域也稱為可顯示區(qū)域。而當(dāng)寫入10H~27H或50H~67H地址處時(shí),字符不會顯示出來,該區(qū)域也稱為隱藏區(qū)域。如果要顯示寫入到隱藏區(qū)域的字符,需要通過字符移位命令(命令5)將它們移入到可顯示區(qū)域方可正常顯示。5.5.1LCD1602液晶顯示模塊簡介3.字符顯示位5.5.1LCD1602液晶顯示模塊簡介3.字符顯示位置的確定需說明的是,在向DDRAM寫入字符時(shí),首先要設(shè)置DDRAM定位數(shù)據(jù)指針,此操作可通過命令8完成。例如,要寫字符到DDRAM的40H處,則命令8的格式為:80H+40H=C0H,其中80H為命令代碼,40H是要寫入字符處的地址。5.5.1LCD1602液晶顯示模塊簡介3.字符顯示位5.5.1LCD1602液晶顯示模塊簡介圖5-17LCD內(nèi)部顯示RAM的地址映射圖3.字符顯示位置的確定5.5.1LCD1602液晶顯示模塊簡介圖5-175.5.1LCD1602液晶顯示模塊簡介4.LCD1602的復(fù)位LCD1602上電后復(fù)位狀態(tài)為:清除屏幕顯示。設(shè)置為8位數(shù)據(jù)長度,單行顯示,5×7點(diǎn)陣字符。顯示屏、光標(biāo)、閃爍功能均關(guān)閉。輸入方式為整屏顯示不移動,I/D=1。5.5.1LCD1602液晶顯示模塊簡介4.LCD165.5.1LCD1602液晶顯示模塊簡介LCD1602的一般初始化設(shè)置為:寫命令38H,即顯示模式設(shè)置(16×2顯示,5×7點(diǎn)陣,8位接口)。寫命令08H,顯示關(guān)閉。寫命令01H,顯示清屏,數(shù)據(jù)指針清0。寫命令06H,寫一個(gè)字符后地址指針加1。寫命令0CH,設(shè)置開顯示,不顯示光標(biāo)。4.LCD1602的復(fù)位5.5.1LCD1602液晶顯示模塊簡介LCD16025.5.1LCD1602液晶顯示模塊簡介4.LCD1602的復(fù)位需注意,在進(jìn)行上述設(shè)置及對數(shù)據(jù)進(jìn)行讀取時(shí),通常需要檢測忙標(biāo)志位BF如果為1,則說明忙,要等待;如果BF為0,則可進(jìn)行下一步操作。5.5.1LCD1602液晶顯示模塊簡介4.LCD165.5.1LCD1602液晶顯示模塊簡介5.LCD1602基本操作LCD慢顯示器件,所以在寫每條命令前,一定要查詢忙標(biāo)志位BF,即是否處于“忙”狀態(tài)。如LCD正忙于處理其他命令,就等待;如不忙,則向LCD寫入命令。標(biāo)志位BF連接在8位雙向數(shù)據(jù)線的D7位上。如果BF=0,表示LCD不忙;如果BF=1,表示LCD處于忙狀態(tài),需等待。LCD1602的讀寫操作規(guī)定見表5-4。5.5.1LCD1602液晶顯示模塊簡介5.LCD165.5.1LCD1602液晶顯示模塊簡介5.LCD1602基本操作5.5.1LCD1602液晶顯示模塊簡介5.LCD165.5.1LCD1602液晶顯示模塊簡介5.LCD1602基本操作LCD1602與AT89S51的接口電路見圖5-18。圖5-18單片機(jī)與LCD1602接口電路5.5.1LCD1602液晶顯示模塊簡介5.LCD165.5.1LCD1602液晶顯示模塊簡介5.LCD1602基本操作由圖5-18可看出,LCD1602的RS、R/W*和E這3個(gè)引腳分別接在P2.0、P2.1和P2.2引腳,只需通過對這3個(gè)引腳置“1”或清“0”,就可實(shí)現(xiàn)對LCD1602的讀寫操作。具體來說,顯示一個(gè)字符的操作過程為“讀狀態(tài)→寫命令→寫數(shù)據(jù)→自動顯示”。(1)讀狀態(tài)是對LCD1602的“忙”標(biāo)志BF進(jìn)行檢測,如果BF=1,說明LCD處于忙狀態(tài),不能對其寫命令;如果BF=0,則可寫入命令。檢測忙標(biāo)志函數(shù)具體如下:5.5.1LCD1602液晶顯示模塊簡介5.LCD165.5.1LCD1602液晶顯示模塊簡介5.LCD1602基本操作voidcheck_busy(void){//檢查忙標(biāo)志函數(shù)uchardt;do{ dt=0xff; //dt為變量單元,初值為0xff E=0; RS=0; //按照表5-4讀寫操作規(guī)定RS=0,E=1 //時(shí)才可讀忙標(biāo)志 RW=1; E=1; dt=out; //out為P0口,P0口的狀態(tài)送入dt中
}while(dt&0x80); //如果忙標(biāo)志BF=1,繼續(xù)循環(huán)檢測, //等待BF=0 E=0; //BF=0,LCD不忙,結(jié)束檢測}5.5.1LCD1602液晶顯示模塊簡介5.LCD165.5.1LCD1602液晶顯示模塊簡介5.LCD1602基本操作函數(shù)檢測P0.7腳電平,即檢測忙標(biāo)志BF,如BF=1,說明LCD處于忙狀態(tài),不能執(zhí)行寫命令;BF=0,可執(zhí)行寫命令。(2)寫命令寫命令函數(shù)如下:5.5.1LCD1602液晶顯示模塊簡介5.LCD165.5.1LCD1602液晶顯示模塊簡介5.LCD1602基本操作voidwrite_command(ucharcom)
{//寫命令函數(shù) check_busy(); E=0;
//按規(guī)定RS和E同時(shí)為0時(shí)可以寫入命令 RS=0; RW=0; out=com; //將命令com寫入P0口 E=1;
//按規(guī)定寫命令時(shí),E應(yīng)為正脈沖,即正 //跳變,所以前面先置E=0 _nop_(); //空操作1個(gè)機(jī)器周期,等待硬件反應(yīng) E=0; //E由高電平變?yōu)榈碗娖剑琇CD開始執(zhí)行 //命令 delay(1); //延時(shí),等待硬件響應(yīng)}5.5.1LCD1602液晶顯示模塊簡介5.LCD165.5.1LCD1602液晶顯示模塊簡介5.LCD1602基本操作(3)寫數(shù)據(jù)將要顯示字符的ASCII碼寫入LCD中的數(shù)據(jù)顯示RAM(DDRAM),例如將數(shù)據(jù)“dat”,寫入LCD模塊。寫數(shù)據(jù)函數(shù)如下:5.5.1LCD1602液晶顯示模塊簡介5.LCD165.5.1LCD1602液晶顯示模塊簡介5.LCD1602基本操作voidwrite_data(uchardat){//寫數(shù)據(jù)函數(shù) check_busy();
//檢測忙標(biāo)志BF=1則等待,若BF=0,則可對LCD操作 E=0;
//按規(guī)定寫數(shù)據(jù)時(shí),E應(yīng)為正脈沖,所以先置E=0 RS=1; //按規(guī)定RS=1和RW=0時(shí)可以寫入數(shù)據(jù) RW=0; out=dat; //將數(shù)據(jù)dat從P0口輸出,即寫入LC E=1;
//E產(chǎn)生正跳變 _nop_(); //空操作,給硬件反應(yīng)時(shí)間 E=0;
//E由高變低,寫數(shù)據(jù)操作結(jié)束 delay(1); }5.5.1LCD1602液晶顯示模塊簡介5.LCD165.5.1LCD1602液晶顯示模塊簡介5.LCD1602基本操作(4)自動顯示數(shù)據(jù)寫入LCD后,自動讀出字符庫ROM(CGROM)中的字型點(diǎn)陣數(shù)據(jù),并自動將字型點(diǎn)陣數(shù)據(jù)送到液晶顯示屏上顯示。5.5.1LCD1602液晶顯示模塊簡介5.LCD165.5.1LCD1602液晶顯示模塊簡介6.LCD1602初始化使用LCD1602前,需對其顯示模式進(jìn)行初始化設(shè)置,初始化函數(shù)如下:voidLCD_initial(void)
{//液晶顯示器初始化函數(shù)write_command(0x38);
//寫入命令0x38:兩行顯示,5×7點(diǎn)陣,8位數(shù)據(jù)_nop_();
//空操作,給硬件反應(yīng)時(shí)間write_command(0x0C);//寫入命令0x0C:開整體顯示,光標(biāo)關(guān),無黑塊_nop_();
//空操作,給硬件反應(yīng)時(shí)間write_command(0x06);
//寫入命令0x06:光標(biāo)右移_nop_();
//空操作,給硬件反應(yīng)時(shí)間write_command(0x01);
//寫入命令0x01:清屏delay(1);}▲▲▲5.5.1LCD1602液晶顯示模塊簡介6.LCD5.5.1LCD1602液晶顯示模塊簡介6.LCD1602初始化注意:在函數(shù)開始處,由于LCD尚未開始工作,所以不需檢測忙標(biāo)志,但是初始化完成后,每次再寫命令、讀寫數(shù)據(jù)操作,均需檢測忙標(biāo)志。5.5.1LCD1602液晶顯示模塊簡介6.LCD5.5.2單片機(jī)控制字符型LCD1602顯示案例【例5-9】用單片機(jī)驅(qū)動字符型液晶顯示器LCD1602,使其顯示兩行文字:“Welcom”與“HarbinCHINA”。見圖5-19。在Proteus
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《物聯(lián)網(wǎng)技術(shù)層次》課件
- 《電信詐騙宣傳》課件
- 《人的作業(yè)特征》課件
- 《硬件基礎(chǔ)知識》課件
- 《存款銀行陸》課件
- 安全生產(chǎn)法宣貫課件(企業(yè)版)
- 《個(gè)全新的商業(yè)模式》課件
- 農(nóng)田機(jī)耕費(fèi)合同范本
- ppp項(xiàng)目合同補(bǔ)充合同范例
- 兗州大安鎮(zhèn)搬遷合同范本
- 光伏發(fā)電績效考核管理
- 低空經(jīng)濟(jì)無人機(jī)行業(yè)市場趨勢與競爭分析
- 不良反應(yīng)事件及嚴(yán)重不良事件處理的標(biāo)準(zhǔn)操作規(guī)程藥物臨床試驗(yàn)機(jī)構(gòu)GCP SOP
- 2023湖南文藝出版社五年級音樂下冊全冊教案
- 2021上海春考作文題解析及范文(怎樣做與成為什么樣人)
- 醫(yī)療器械采購?fù)稑?biāo)方案(技術(shù)方案)
- 教育培訓(xùn)行業(yè)抖音號運(yùn)營推廣策劃方案課件
- 2024-2030年全球及中國水楊酸行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報(bào)告
- 山東省德州市德城區(qū)2023-2024學(xué)年八年級下學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 人教版八年級歷史下冊教材插圖
- 醫(yī)院運(yùn)營管理案例-北大國際醫(yī)院-利用精益管理提升患者體驗(yàn)
評論
0/150
提交評論