第6章單片機常用接口電路設(shè)計ppt_第1頁
第6章單片機常用接口電路設(shè)計ppt_第2頁
第6章單片機常用接口電路設(shè)計ppt_第3頁
第6章單片機常用接口電路設(shè)計ppt_第4頁
第6章單片機常用接口電路設(shè)計ppt_第5頁
已閱讀5頁,還剩94頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計第

6

單片機常用接口電路設(shè)計6.1顯示器接口原理及應(yīng)用6.1.1

LED

顯示器6.1.2點陣顯示屏6.1.3

LCD

顯示器6.26.2.16.2.26.2.36.3鍵盤接口原理及應(yīng)用鍵盤工作原理獨立式按鍵的應(yīng)用矩陣式按鍵的應(yīng)用D/A,A/D

接口電路6.3.1

AT89S51

DAC0832

芯片接口設(shè)計6.3.2

AT89S51

ADC0809

接口設(shè)計

1第

6

單片機常用接口電路設(shè)計教知識重點1.LED

顯示接口2.LCD

液晶顯示和接口

4.矩陣式按鍵接口6.ADC0809

的功能及應(yīng)用3.獨立式按鍵接口5.A/D

轉(zhuǎn)換和

D/A

轉(zhuǎn)換的概念7.DAC0832

的功能及應(yīng)用知識難點1.LED

動態(tài)顯示接口2.LCD

液晶顯示和接口3.矩陣式按鍵接口4.

ADC0809

工作過程

5.DAC0832

雙緩沖方式

從工作任務(wù)入手,讓學生逐步熟悉各種顯示器件和鍵盤的工作原理、接口,推薦教學方式

A/D

D/A

轉(zhuǎn)換器的應(yīng)用及編程方法。建議學時學推薦學習方法12

學時1.從簡單任務(wù)入手,學習

LED

數(shù)碼管時可以先回憶發(fā)光二極管的控制,再擴展到

8

個連在一起的發(fā)光二極管即數(shù)碼管。學習數(shù)碼管接口時可以先接

1

個數(shù)碼管再擴展到多個數(shù)碼管。2.類比法,LED數(shù)碼管的動態(tài)顯示和LED大屏幕顯示的原理相似,可以

2單片機原理及應(yīng)用技術(shù)

教學導航單片機原理及應(yīng)用技術(shù)

6

單片機常用接口電路設(shè)計比較學習。3.先通過任務(wù)制作,了解數(shù)模(D/A)之間的轉(zhuǎn)換現(xiàn)象及結(jié)果。收集訓練過程中出現(xiàn)的問題及疑問,從而引入理論知識,最后再回到任務(wù)中,之前的問題及疑問便迎刃而解。1.LED

動態(tài)顯示接口3.獨立式按鍵接口2.LCD

液晶顯示和接口

4.矩陣式按鍵接口必須掌握理論知識

5.ADC0809

與單片機之間的硬件連接及軟件編程

6.DAC0832

與單片機之間的硬件連接及軟件編程必須掌握的技能簡單顯示器件和鍵盤接口的應(yīng)用,

A/D

D/A

轉(zhuǎn)換器的應(yīng)用

3單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計6.1顯示器接口原理及應(yīng)用在單片機應(yīng)用系統(tǒng)中,顯示器是最常用的輸出設(shè)備。常用的顯示器有:數(shù)碼管(LED)、液晶顯示器(LCD)和熒光屏顯示器。其中以數(shù)碼管顯示最便宜,而且它的配置靈活,與單片機接口簡單,廣泛應(yīng)用于單片機系統(tǒng)中。6.1.1LED

顯示器

1.結(jié)構(gòu)及顯示原理

LED

顯示器是單片機應(yīng)用系統(tǒng)中常用的顯示器件。它是由若干個發(fā)光二極管組成的,

當發(fā)光二極管導通時,相應(yīng)的一個點或一個筆畫發(fā)亮.控制不同組合二極管導通,就能顯示出各種字符。如表6.l

所示。常用的

LED

顯示器是

7

段數(shù)碼管,這種顯示器有共陽極和共陰極兩種。如圖

6.1

所示,共陰極數(shù)碼管公共端接地,共陽極數(shù)

4單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計5碼管公共端接電源。每段發(fā)光二極管需要

5~l0mA

的驅(qū)動電流才能正常發(fā)光,一般需加限流電阻控制電流的大小。表

6.17

LED

字形碼顯示字符

0

1

2

3

4

5

6

7

8

9

A

B共陰字碼

0x3F

0x06

0x5B

0x4F

0x66

0x6D

0x7D

0x07

0x7F

0x6F

0x77

0x7C共陽字碼

0xC0

0xF9

0xA4

0xB0

0x99

0x92

0x82

0xF8

0x80

0x90

0x88

0x83顯示字符

C

D

E

F

H

L

P

R

U

-

.

熄滅共陰字碼

0x39

0x5E

0x79

0x71

0x76

0x38

0x73

0x31

0x3E

0x40

0x80

0x00共陽字碼

0xC6

0xA1

0x86

0x8E

0x89

0xC7

0x8C

0xCE

0xC1

0xBF

0x7F

0xFF單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計圖

6.17

段數(shù)碼管結(jié)構(gòu)圖

6單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

小問答

問:對于同一個字符,共陽極和共陰極的字型編碼之間有什么關(guān)系?

答:從表

6.1

中可以看出,當顯示字符“1”時,共陽極的字型碼為

0xF9,而共陰極的字型碼為

0x06,所以對于同一個字符,共陰和共陽碼的關(guān)系為取反。

問:如何判斷數(shù)碼管的結(jié)構(gòu)是共陽極還是共陰極?如何用萬用表測試數(shù)碼管的極性及好壞?

答:根據(jù)圖

6.1,通過判斷任意段與公共端連接的二極管的極性就可以判斷出是共陽極還是共陰極數(shù)碼管。假設(shè)數(shù)碼管是共陽極的,那么將萬用表的表內(nèi)電源正極(黑表筆)與數(shù)碼管的

com

端相接.然后用萬用表的表內(nèi)電源負極(紅表筆)逐個接觸數(shù)碼管的各段,數(shù)碼管的各段將逐個點亮,則數(shù)碼管是共陽極的;如果數(shù)碼管的段均不亮,則說明數(shù)碼管是共陰極的。也可將萬用表的紅黑表筆交換連接后測試。如果數(shù)碼管只有部分段點亮,而另一部分不亮,說明數(shù)碼管已經(jīng)損壞。

7單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計2.應(yīng)用舉例

數(shù)碼管的顯示方法可以分為兩種,即靜態(tài)顯示和動態(tài)顯示。

1)

LED

靜態(tài)顯示

靜態(tài)顯示就是當要顯示某個數(shù)字時,可以通過給

LED

的數(shù)據(jù)引腳設(shè)置相應(yīng)的高低電平即可實現(xiàn)顯示相應(yīng)數(shù)據(jù)。例如:有一個共陰的數(shù)碼管,只要給它的

abcdef

腳提供高電平,g

腳提供低電平即可顯示數(shù)字

0。這種照示方法電路簡單,程序也十分的簡潔。但是這種顯示方法占用的

I/O

端口較多,當顯示的位數(shù)在一位以上,一般都不采用這種顯示方法。

例如,一個

2

位靜態(tài)顯示電路,如圖

6.2

所示。由于顯示器中各位相互獨立,而且各位的顯示字符完全取決于對應(yīng)口的輸出數(shù)據(jù),如果數(shù)據(jù)不改變那么顯示器的顯示亮度將不會受影響,所以靜態(tài)顯示器的亮度都較高。但是從圖

6.2

中可以看出它需要

2

8

位的數(shù)據(jù)總線。這對于單片機來說占用了較多的

I/O

端口。所以顯示位數(shù)過多時,就不會采用靜態(tài)顯示這種辦法。

8單片機原理及應(yīng)用技術(shù)圖

6.2第

6

單片機常用接口電路設(shè)計

2

位數(shù)碼管靜態(tài)顯示電路

91.5單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

2)

LED

動態(tài)顯示

另一種顯示方法就是動態(tài)顯示。所謂動態(tài)顯示就是將要顯示的數(shù)按顯示數(shù)的順序在各個數(shù)碼管上一位一位地顯示,它利用人眼的視覺暫留效應(yīng)使人感覺不到是一位一位顯示的,而是一起顯示的。2位數(shù)碼管動態(tài)顯示的電路如圖

6.3

所示,它將每個顯示器的段代碼連在一起,所以同樣顯示的是

2

位,但是動態(tài)顯示的段代碼數(shù)據(jù)數(shù)卻只要

8

根。各位數(shù)碼管的公共端,也稱為“位選端”,由

P2.0,

P2.1控制。動態(tài)顯示時,數(shù)碼管的數(shù)目還可以再擴展。

10單片機原理及應(yīng)用技術(shù)圖

6.3第

6

單片機常用接口電路設(shè)計

2

位數(shù)碼管動態(tài)顯示電路

11單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

6.1

編制

2

個數(shù)碼管上穩(wěn)定顯示“01”2

個字符的動態(tài)顯示程序。2

位數(shù)碼管動態(tài)顯示“01”的程序如下。

//********************************************************************************

//程序:ex6_1.c

//功能:2

LED

數(shù)碼管動態(tài)掃描顯示

//********************************************************************************#include

<reg51.h>

sbit

COM0=P2^0;

sbit

COM1=P2^1;/*包含頭文件

REG51.H*///定義

P2.0

引腳位名稱為

COM0位選端//定義

P2.1

引腳位名稱為

COM1位選端unsigned

char

const

LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9

共陽極字形碼表

//********************************************************************************

//函數(shù)名:Delay

//函數(shù)功能:軟件延時函數(shù)

//形式參數(shù):unsigned

int

cnt

//********************************************************************************void

Delay(unsigned

int

cnt){

12單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計13

while(--cnt);}

//********************************************************************************

//函數(shù)名:main

//函數(shù)功能:主函數(shù)

//********************************************************************************main(){while(1)

{P3=LED[0];COM0=1;Delay(1000);COM0=0;P3=LED[1];COM1=1;Delay(1000);COM1=0;

//顯示字符碼碼表值送

P3//選中個位

//延時//關(guān)閉個位

//顯示字符碼碼表值送

P3//選中十位

//延時//關(guān)閉十位}}單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計屏和視頻顯示屏。與圖像顯示屏相比,圖文顯示屏的特點在于無論是單色還是彩色顯示屏都沒有顏色上的灰度差別,因此圖文顯示屏體現(xiàn)不出色彩的豐富性,而視頻顯示屏不僅能夠顯示運動、清晰和全彩色的圖像,還能夠播放電視和計算機信號。雖然這三者有一些區(qū)別,但它們最基礎(chǔ)的顯示

14控制原理都是相同的。

小問答

問:在

LED

數(shù)碼管動態(tài)顯示程序中,如果把延時

50ms

函數(shù)修改為延時

ls,

LED

數(shù)碼管顯示會有什么變化?為什么?

6

個數(shù)碼管上

由于人的眼睛存在“視覺駐留效應(yīng)”,必須保證每位數(shù)碼管顯示間斷的時間間

隔小于眼睛的駐留時間,才可以給人一種穩(wěn)定顯示的視覺效果。如果延時時間太

長,每位數(shù)碼管閃動頻率太慢,就不能產(chǎn)生穩(wěn)定顯示效果。

LED

點陣顯示屏是通過

PC

機將要顯示的漢字字模提取出來,發(fā)給單片機,然后顯示在點陣屏上,主要適用于室內(nèi)外漢字顯示。

LED

點陣顯示屏按照顯示的內(nèi)容可以分為圖文顯示屏、圖像顯示單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

2.LED

點陣顯示屏結(jié)構(gòu)及原理

LED

點陣顯示屏是把很多

LED

發(fā)光管按矩陣方式排列在一起,通過對每一個

LED

進行發(fā)光控制,來完成各種字符或圖形顯示的。最常見的LED

點陣顯示模塊有

5×7(5列

7行)、

7×9(7列

9行)、

8×8(8列

8

行)結(jié)構(gòu)。

6.4

LED

點陣屏內(nèi)部等效電路

15單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

LED

點陣由一個一個的點(LED

發(fā)光管)組成,總點數(shù)為行數(shù)與列數(shù)的積,引腳數(shù)為行數(shù)與列數(shù)之和。

8×8

LED

點陣屏為例,其內(nèi)部等效電路如圖

6.4

所示。它由

8

8

行共

64

LED

構(gòu)成,對外有

16

個引腳,其中列線

8

根(Col0~Col7),行線

8

根(Row0~Row7)。

從圖

6.4

可以知道,要點亮跨接在某行某列上的發(fā)光管,要在對應(yīng)的行線輸出高電平,對應(yīng)的列線輸出低電平。如果在短時間內(nèi)依次點亮多個發(fā)光管,就可以看到多個發(fā)光管穩(wěn)定的點亮,就可以用這種動態(tài)的方式來顯示數(shù)字、字母和其它圖形符號。例如需要顯示“本”字,8×8

LED

點陣需要點亮的的位置和編碼數(shù)據(jù)如圖

6.5所示。

點陣的顯示過程是先給第

0

行送高電平,然后給

8

列送11101111;延時

2ms;再給第

1

行送高電平,然后給

8

列送

00000001,延時

2ms;……直到最后一行,不斷循環(huán)。

16單片機原理及應(yīng)用技術(shù)圖

6.5

6

單片機常用接口電路設(shè)計“本”字

8×8

LED

點陣編碼示意圖

17單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

3.

LED

點陣屏與單片機的接口

用單片機控制一個

8×8

LED

點陣屏為例,需要用到兩個并行端口,一個端口控制行線,一個端口控制列線。

如果顯示過程以行掃描的方式進行,掃描顯示過程是每次顯示一行

8

LED

發(fā)光管,顯示時間稱為行周期,

8

行掃描顯示完成后重新開始一輪掃描,這個時間段稱為場周期。行與行之間的延時

1~2ms。掃描頻率一般在

50Hz,應(yīng)保證掃描所有

8

行的時間和在

20

ms

以內(nèi)。

4.綜合應(yīng)用

6.2

LED

點陣的應(yīng)用電路圖,如圖

6.6

所示。編制程序驅(qū)動LED

點陣實現(xiàn)循環(huán)顯示數(shù)字

0~9

循環(huán)顯示。

18單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計圖

6.6

原理圖19單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計//********************************************************************************//程序:ex6_2.c//功能:LED

點陣實現(xiàn)循環(huán)顯示數(shù)字

0~9

控制程序(Keil

uVision4+Proteus

7.8

仿真通過)//********************************************************************************/*包含頭文件

reg51.h*/

/*宏定義后方便書寫*/

/*宏定義后方便書寫*/#include

<reg51.h>#define

uchar

unsigned

char#define

uint

unsigned

intvoid

Delay(uint

j)

{

uint

i;

for(;j>0;j--)

{for(i=0;i<50;i++);//大約延時

5ms

}

}void

main(){

uint

i,j,k,m;

20第

6

單片機常用接口電路設(shè)計單片機原理及應(yīng)用技術(shù)

uchar

w;uchar

code

DigitsTable[]={0xFF,0xC1,0x9C,0xBE,0xBE,0x9C,0xC1,0xFF,

//0123456780xFF,0xF7,0xC7,0xF7,0xF7,0xF7,0xF7,0xFF,

//0xFF,0xE1,0x9E,0xFD,0xF3,0x8F,0x80,0xFF,

//0xFF,0xE1,0x9E,0xF1,0xFE,0xBE,0xC1,0xFF,

//0xFF,0xF9,0xF5,0xCD,0x80,0xFD,0xFD,0xFF,

//0xFF,0xC0,0xDF,0xA1,0x9E,0xBE,0xC1,0xFF,

//0xFF,0xE1,0x9E,0x81,0xBE,0xBE,0xC1,0xFF,

//0xFF,0x80,0xFD,0xFB,0xF7,0xF7,0xEF,0xFF,

//0xFF,0xC1,0xBE,0xBD,0x80,0xBE,0xC1,0xFF,

//0xFF,0xC1,0xBE,0xBE,0xC0,0xBC,0xC3,0xFF};

//9while(1)

{for(k=0;k<10;k++)

{

for(m=0;m<200;m++)//顯示字符個數(shù)控制

(0~9,共

10

個)//每個字符掃描

200

次,字符顯示時間{

21單片機原理及應(yīng)用技術(shù)

w=0x01;

j=k*8;

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

{

P0=w;第

6

單片機常用接口電路設(shè)計//行掃描碼,從第

0

行開始//字符編碼數(shù)組下標

//每個字符有

8

個編碼(8

行),分

8

次送出//掃描碼送

P0

口選中某行P2=DigitsTable[j];Delay(2);//列線送出字符編碼//延時顯示w<<=1;j++;//行掃描碼變換,指向下一行//指向數(shù)組下一個編碼}}}}

}

小經(jīng)驗

在實際應(yīng)用時,在每條列線上需串接一個

300Ω

左右的限流電阻。同時,為提高單片機端口帶負載的能力,通常在端口和外接負載之間增加一個緩沖驅(qū)動器。在圖

6.6中,Pl

口通過

74LS245

(8路同相三態(tài)雙向總線收發(fā)器)與

LED

連接,提高了

P1

口輸出的電流,既保證了

LED

的亮度,又保護了單片機端口引腳。

22單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計6.1.3LCD

顯示器

1.結(jié)構(gòu)種類

液晶顯示器簡稱

LCD,它是利用液晶經(jīng)過處理后能改變光線的傳輸方向的特性實現(xiàn)顯示信息的。

LCD

具有體積小、重量輕、功耗極低、顯示內(nèi)容豐富等特點,正廣泛應(yīng)用于便攜式儀器儀表、智能儀器、消費類電子產(chǎn)品等領(lǐng)域。

液晶顯示是通過液晶顯示模塊實現(xiàn)的。液晶顯示模塊(LCDModule)是一種將液晶顯示器、控制器和驅(qū)動器裝配在一起的組件。按其功能可分為三類:筆段式液晶顯示器、字符點陣式顯示器和圖形點陣液晶顯示器。前兩種可顯示數(shù)字、字符和符號等,而圖形點陣式顯示器還可以顯示漢字和任意圖形,達到圖文并茂的效果。本書將只對應(yīng)用廣泛、使用比較簡單的字符點陣式液晶顯示器做介紹。

23單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

小資料

液晶顯示器的特點如下。

(1)低壓微功耗。工作電壓

3~5

V,工作電流為幾

μA,因此它成為便攜式和手持儀器儀表首選的顯示屏幕。

(2)平板型結(jié)構(gòu)。安裝時占用體積小,減小了設(shè)備體積。

(3)被動顯示。液晶本身不發(fā)光,而是靠調(diào)制外界光進行顯示,因此適合人的視覺習慣,不會使人眼睛疲勞。

(4)顯示信息量大。像素小,在相同面積上可容納更多信息。

(5)易于彩色化。

(6)沒有電磁輻射。在顯示期間不會產(chǎn)生電磁輻射,有利于人體健康。

(7)壽命長。LCD

器件本身無老化問題,因此壽命極長。

24單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

2.字符型液晶顯示模塊

RT-1602C

RT-1602C

字符型液晶模塊是兩行

16

個字的

5×7

點陣圖形來顯示字符的液晶顯示器。它的外觀形狀如圖

6.7

所示。

RT-1602C

采用標準的

16

針接口。各引腳情況如表

6.2

所示。

6.2

RT-1602C

引腳名稱

1

2

3

4

5

6

腳第

7

~14

15

1

6

引腳功能定義

VSS,電源地。

VDD,+5V

電源。

VL,液晶顯示偏壓信號。

RS,數(shù)據(jù)/命令寄存器選擇端,高電平時選擇數(shù)據(jù)寄存器,低電平時選擇指令寄存器。R/W

,讀/寫信號選擇端,高電平時進行讀操作,低電平時進行寫操作。當

RS

R/W

共同為低電平時可以寫入指令或者顯示地址;當

RS

為低電平。R/W

為高電平時可以讀忙信號;當

RS

為高電平,R/W

為低電平時可以寫入數(shù)據(jù)。

E

端為使能端,當

E

端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。

D0~D7

8

位雙向數(shù)據(jù)線。

BLA,背光源正極。

BLK,背光源負極。

25單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

6.7

RT-1602C

字符型液晶模塊外形圖

小提示

如果需要背光控制,可以采用單片機的I/O端口控制A,K端來實現(xiàn),控制方法與控制發(fā)光二極管的方法完全相同。

26單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計27

3.指令格式和指令功能

液晶顯示模塊

RT-1602C

的控制器采用

HD44780,控制器

HD44780內(nèi)有多個寄存器,通過

RS

R/W引腳共同決定選擇哪一個寄存器,選擇情況如表

6.3

所示。表

6.3HD44780

內(nèi)部寄存器選擇表RS

0

0

1

1R/W

0

1

0

1寄存器及操作指令寄存器寫入忙標志和地址計數(shù)器讀出數(shù)據(jù)寄存器寫入數(shù)據(jù)寄存器讀出總共有

11

條指令,它們的格式和功能如下。1)清屏命令格式:RS

0R/W

0D7

0D6

0D5

0D4

0D3

0D2

0D1

0D0

1單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計功能:(1)清除液晶顯示器,即將

DDRAM

的內(nèi)容全部填入"空白"的

ASCII碼

20H;(2)光標歸位,即將光標撤回液晶顯示屏的左上方;(3)將地址計數(shù)器(AC)的值設(shè)為

0。2)

光標歸位命令格式:RS

0R/W

0D7

0D6

0D5

0D4

0D3

0D2

0D1

1D0

x功能:(1)把光標撤回到顯示器的左上方;(2)把地址計數(shù)器(AC)的值設(shè)置為

0;(3)保持

DDRAM

的內(nèi)容不變。

28第

6

單片機常用接口電路設(shè)計29單片機原理及應(yīng)用技術(shù)3)

進入模式設(shè)置命令格式:RS

0R/W

0D7

0D6

0D5

0D4

0D3

0

D21

D1I/DD0

S功能:設(shè)定每次寫入

1

位數(shù)據(jù)后光標的移位方向,并且設(shè)定每次寫入的一個字符是否移動。參數(shù)設(shè)定的情況如下所示:位名設(shè)置I/D

S

0=寫入新數(shù)據(jù)后光標右移0=寫入新數(shù)據(jù)后顯示屏不移動

1=寫入新數(shù)據(jù)后光標左移1=寫入新數(shù)據(jù)后顯示屏整體右移

1

個字符

4)

顯示開關(guān)控制命令格式:RS

0R/W

0D7

0D6

0D5

0D4

0D3

1D2

DD1

CD0

B單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計功能:控制顯示器開/關(guān)、光標顯示/關(guān)閉以及光標是否閃爍。參數(shù)設(shè)定的情況如下:位名設(shè)置BCD

0=顯示功能關(guān)

0=無光標0=光標不閃爍1=顯示功能開

1=有光標

1=光標閃爍

5)

設(shè)定顯示屏或光標移動方向命令格式:RS

0R/W

0D7

0D6

0D5

0

D41

D3S/C

D2R/LD1

xD0

x功能:使光標移位或使整個顯示屏幕移位。參數(shù)設(shè)定的情況如下:S/C

0

0R/L

0

1

設(shè)定情況光標左移

1

格,且

AC

值減

1光標右移

1

格,且

AC

值加

1

30單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計311101顯示器上字符全部左移一格,但光標不動顯示器上字符全部右移一格,但光標不動

6)

功能設(shè)定命令格式:RS

0R/W

0D7

0D6

0D5

1D4DLD3

ND2

FD1

xD0

x功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下:位名設(shè)置

DL

NF0=數(shù)據(jù)總線為

4

位0=顯示

1

行0=5×7

點陣/每字符

1=數(shù)據(jù)總線為

8

1=顯示

2

行1=5×10

點陣/每字符

7)

設(shè)定

CGRAM

地址命令格式:RSR/WD7D6D5D4D3D2D1D00001CGRAM

的地址(6

位)單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計功能:設(shè)定用戶自定義的

CGRAM

地址,對用戶自定義的

CGRAM

訪問時,要先設(shè)定

CGRAM

地址,地址范圍為

0~63。8)

設(shè)定

DDRAM

地址命令格式:RSR/WD7D6D5D4D3D2D1D0001DDRAM

的地址(7

位)功能:設(shè)定當前顯示緩沖區(qū)的DDRAM地址,對DDRAM訪問時,要先設(shè)定DDRAM地址,地址范圍為

0~127。9)

讀取忙信號或

AC

地址命令格式:RSR/WD7D6D5D4D3D2D1D001BFAC

內(nèi)容(7

位)功能:(1)讀取忙碌信號

BF

的內(nèi)容,BF=1

表示液晶顯示器忙,暫時無法接

32單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計收單片機送來的數(shù)據(jù)或指令;

BF=0

時,液晶顯示器可以接收單片機送來的數(shù)據(jù)或指令;(2)讀取地址計數(shù)器(AC)的內(nèi)容。10)

數(shù)據(jù)寫入

DDRAM

CGRAM

命令格式:RSR/WD7D6D5D4D3D2D1D010要寫入的數(shù)據(jù)

D7~D0功能:(1)將字符碼寫入

DDRAM,以使液晶顯示屏顯示出相對應(yīng)的字符;(2)將使用者自己設(shè)計的圖形存入

CGRAM。11)

CGRAM

DDRAM

讀出數(shù)據(jù)的命令格式:RSR/WD7D6D5D4D3D2D1D011要讀出的數(shù)據(jù)

D7~D0功能:讀取

DDRAM

CGRAM

中的內(nèi)容。

33單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

小經(jīng)驗

字符型液晶顯示模塊比較通用,接口格式也比較統(tǒng)一,主要

是因為各制造商所采用的模塊控制器都是

HD44780

及其兼容產(chǎn)

品,不管顯示屏的尺寸如何,操作指令及其形成的模塊接口信號

定義都是兼容的。所以學會使用一種字符型液晶顯示模塊,就會

通曉所有的字符型液晶顯示模塊。

4.LCD

顯示器初始化

LCD

使用之前必須對它初始化,初始化可以通過復位完成,也可以在復位后完成,初始化過程如下。

1)清屏

2)功能設(shè)置

3)開/關(guān)顯示設(shè)置

4)輸入方式設(shè)置

5.綜合應(yīng)用

LCD

點陣顯示模塊的應(yīng)用電路圖,如圖

6.8

所示。

34單片機原理及應(yīng)用技術(shù)圖

6.8

6

單片機常用接口電路設(shè)計LCD

點陣顯示模塊的應(yīng)用電路

35單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

編程驅(qū)動

LCD

顯示器在第一行顯示字符串“Microcontroller”、第二行顯示字符串“LCD1602

Test

ok!”。

//********************************************************************************

//程序:ex6_3.c

//功能:1602

顯示程序(Keil

uVision4+Proteus

7.8

仿真通過)

//********************************************************************************#include<reg51.h>#define

uchar

unsigned

char#define

uint

unsigned

intsbit

LCD_RS=P2^0;sbit

LCD_RW=P2^1;sbit

EN=P2^2;sbit

BUSY=P3^7;

/*包含頭文件

reg51.h

*/

/*宏定義后方便書寫*/

/*宏定義后方便書寫*///定義

P2.0

引腳位名稱為

LCD_RS//定義

P2.1

引腳位名稱為

LCD_RW//定義

P2.2

引腳位名稱為

EN//定義

P3.7

引腳位名稱為

BUSYuchar

code

word1[]={"Microcontroller"};uchar

code

word2[]={"LCD1602

Test

ok!"};

36//顯示字符串//顯示字符串單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計37//********************************************************************************//函數(shù)名:Delay//函數(shù)功能:軟件延時函數(shù)//********************************************************************************void

Delay(){uint

i,j;

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

for(j=0;j<200;j++);//定義無符號字符型變量

i

j//雙重

for

循環(huán)語句實現(xiàn)軟件延時//循環(huán)體為空循環(huán)}//********************************************************************************//函數(shù)名:LCD_CheckBusy//函數(shù)功能:判斷

LCD

的忙碌狀態(tài)函數(shù)//********************************************************************************void

LCD_CheckBusy(){P3=0xff;do{LCD_RS=0;單片機原理及應(yīng)用技術(shù)

LCD_RW=1;

EN=0;

EN=1;

}

while(BUSY==1);第

6

單片機常用接口電路設(shè)計//LCD

忙,繼續(xù)查詢,否則退出

EN=0;}//********************************************************************************//函數(shù)名:LCD_WriteData//函數(shù)功能:寫數(shù)據(jù)函數(shù)//形式參數(shù):uchar

dat//********************************************************************************void

LCD_WriteData(uchar

dat){

LCD_CheckBusy();

EN=0;P3=dat;LCD_RS=1;//數(shù)據(jù)送端口//數(shù)據(jù)寄存器

38單片機原理及應(yīng)用技術(shù)

LCD_RW=0;

EN=1;

6

單片機常用接口電路設(shè)計//寫入數(shù)據(jù)寄存器

//執(zhí)行允許

(E

端由高電平跳變到低電平)

EN=0;}//********************************************************************************//函數(shù)名:LCD_WriteCommand//函數(shù)功能:寫指令函數(shù)//形式參數(shù):uchar

cmd//********************************************************************************void

LCD_WriteCommand(uchar

cmd){LCD_CheckBusy();EN=0;P3=cmd;LCD_RS=0;LCD_RW=0;EN=1;//指令送端口//指令寄存器//寫入

LCD

指令寄存器//執(zhí)行允許

(E

端由高電平跳變到低電平)EN=0;

39單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計}//********************************************************************************//函數(shù)名:LCD_Init//函數(shù)功能:LCD1602

初始化函數(shù)//********************************************************************************void

LCD_Init(){LCD_WriteCommand(0x38);LCD_WriteCommand(0x0f);LCD_WriteCommand(0x06);LCD_WriteCommand(0x01);//設(shè)置

8

位格式,2

行,5x7//整體顯示,光標,閃爍//設(shè)定輸入方式,增量不移位//清除屏幕顯示}//********************************************************************************//函數(shù)名:LCD_WriteString//函數(shù)功能:LCD1602

顯示字符函數(shù)//形式參數(shù):uchar

addr_start,

uchar

*p//********************************************************************************void

LCD_WriteString(uchar

addr_start,

uchar

*p)

40單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計{LCD_WriteCommand(addr_start);

while

(*p

!=

'\0')//行起始地址//字符串結(jié)束標志'\0'{LCD_WriteData(*p++);//取字符送出顯示

Delay();

}}//********************************************************************************//函數(shù)名:main//函數(shù)功能:主函數(shù)//********************************************************************************main(){LCD_Init();LCD_WriteString(0x80,word1);LCD_WriteString(0xc0,word2);LCD_WriteCommand(0x0c);while(1);//初始化//顯示字符串

1

//顯示字符串

2//整體顯示,關(guān)光標,不閃爍

//等待}

41單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計6.2鍵盤接口原理及應(yīng)用

鍵盤是由若干個按鍵組成的開關(guān)矩陣,它是最簡單的單片機輸入設(shè)備,通過鍵盤輸入數(shù)據(jù)或命令,實現(xiàn)簡單的人機對話。鍵盤上閉合鍵的識別是由專用硬件實現(xiàn)的,稱為編碼鍵盤,靠軟件實現(xiàn)的稱為非編碼鍵盤。6.2.1鍵盤工作原理

1.鍵輸入原理

在單片機應(yīng)用系統(tǒng)中,除了復位按鍵有專門的復位電路以及專一的復位功能外,其他的按鍵或鍵盤都是以開關(guān)狀態(tài)來設(shè)置控制功能或輸入數(shù)據(jù),這些按鍵不只是簡單的電平輸入。

當所設(shè)定的功能鍵或數(shù)字鍵按下時,計算機應(yīng)用系統(tǒng)應(yīng)完成該按鍵所設(shè)定的功能。鍵信息輸入是與軟件結(jié)構(gòu)密切相關(guān)的過程。對

42單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計某些應(yīng)用系統(tǒng),例如智能儀器儀表,鍵輸入程序是整個應(yīng)用程序的重要部分。對于一組或一個按鍵,需要通過接口電路與

CPU

相連。CPU

可以采用查詢或中斷方式了解有無按鍵輸入并檢查是哪一個按鍵按下,并將該按鍵號送入累加器

ACC

中,然后通過跳轉(zhuǎn)指令轉(zhuǎn)入執(zhí)行該鍵的功能程序,執(zhí)行完又返回到原始狀態(tài)。

小資料

按鍵按照結(jié)構(gòu)原理可分為兩類,一類是觸點式開關(guān)按

鍵,如機械式開關(guān)、導電橡膠式開關(guān)等;另一類是無觸點開

關(guān)按鍵,如電氣式按鍵、磁感應(yīng)按鍵等。前者造價低,后者

壽命長。按鍵按照接口原理可分為編碼鍵盤與非編碼鍵盤兩

類。這兩類鍵盤的主要區(qū)別是識別鍵符及給出相應(yīng)鍵碼的方

法。編碼鍵盤主要用硬件來實現(xiàn)對按鍵的識別,硬件結(jié)構(gòu)復

雜;非編碼鍵盤主要由軟件來實現(xiàn)按鍵的定義與識別,硬件

結(jié)構(gòu)簡單,軟件編程量大;這里將要介紹的獨立式按鍵和矩

陣式鍵盤都是非編碼鍵盤。

43單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

2.鍵輸入接口與軟件應(yīng)解決的問題

鍵輸入接口與軟件應(yīng)可靠快速地實現(xiàn)鍵信息輸入與執(zhí)行鍵功能任務(wù)。為此,應(yīng)解決以下問題。

1)鍵開關(guān)狀態(tài)的可靠輸入

目前,無論是按鍵或鍵盤大部分都是利用機械觸點的合、斷作用。機械觸點在閉合及斷開瞬間由于彈性作用的影響,在閉合及斷開瞬問均有抖動過程,從而使電壓信號也出現(xiàn)抖動,如圖

6.9

所示。抖動時間長短與開關(guān)機械特性有關(guān),一般為

5~l0ms。

按鍵的穩(wěn)定閉合時間,由操作人員的接鍵動作所確定,一般為十分之幾到幾秒之間。為了保證

CPU

對鍵的一次閉合僅做一次鍵輸入處理,必須去除抖動影響。

通常去除抖動影響的方法有硬、軟件兩種。在硬件上是采取在鍵輸出端加

RS

觸發(fā)器成雙穩(wěn)態(tài)電路構(gòu)成去抖動電路,如圖

6.10

所示。圖中兩個與非門構(gòu)成一個

RS

觸發(fā)器。當按鍵未按下時,輸出為“l(fā)”;當鍵按下時,輸出為“0”。此時即使按鍵因抖動而產(chǎn)生瞬時斷開(抖動跳開

b),只要按鍵不返回原始狀態(tài)

a,雙穩(wěn)態(tài)電路的狀態(tài)不改變,輸出保持為“0”,不會產(chǎn)生抖動的波形,這就是說,即

44單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計使

b

點的電壓波形是抖動的,但經(jīng)雙穩(wěn)態(tài)電路之后,其輸出波形為正規(guī)的矩形波。圖

6.9

閉合及斷開電壓波動圖

6.10

雙穩(wěn)態(tài)消抖電路

如果按鍵較多,則常用軟件方法去抖動,即檢測出鍵閉合后執(zhí)行一個延時程序產(chǎn)生

5~l0ms

的延時,等前沿抖動消失后再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平則確認為真正有鍵按下。當檢測到按鍵釋放后,也要給

5~l0ms

的延時,待后沿抖動消失后才能轉(zhuǎn)入該鍵的處理程序,從而去除了抖動影響。

2)對按鍵進行編碼以給定鍵值或直接給出鍵號

任何一組按鍵或鍵盤都要通過

I/O

線查詢按鍵的開關(guān)狀態(tài)。根據(jù)不同的鍵盤結(jié)構(gòu),采用不同的編碼方法。但無論有無編碼,以及

45單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計采用什么編碼,最后都要轉(zhuǎn)換成為與累加器中數(shù)值相對應(yīng)的鍵值,以實現(xiàn)按鍵功能程序的散轉(zhuǎn)轉(zhuǎn)移,因此一個完善的鍵盤控制程序應(yīng)能完成下述任務(wù)。

(1)檢測有無按鍵按下,有按鍵按下后,在無硬件去抖電路時,

應(yīng)用軟件延時方法除去抖動影響。

(2)可靠的邏輯處理辦法,如

n

鍵鎖定,即只處理一個鍵,其

間任何按下又松開的鍵不產(chǎn)影響,不管一次按鍵持續(xù)有多長時

間,僅執(zhí)行一次按鍵功能程序。

(3)輸出確定的鍵號以滿足散轉(zhuǎn)指令的要求。

3.按鍵盤掃描子程序的調(diào)用方式分類

當按鍵按下時,則通過執(zhí)行鍵盤掃描子程序找出按鍵的位置,并對按鍵進行識別。CPU

調(diào)用鍵盤掃描子程序的方式有程序控制方式、定時方式和中斷方式

3

種。

1)程序控制方式

在主程序中按一定的間隔設(shè)置調(diào)用鍵盤掃描子程序的命令。使CPU

在執(zhí)行主程序的過程中不斷地對鍵盤進行掃描。

46單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

2)定時方式

在主程序中設(shè)置定時器為中斷工作方式,鍵盤掃描子程序作為定時器的中斷服務(wù)程序,每產(chǎn)生一次定時器中斷調(diào)用一次鍵盤掃描子程序,達到定時掃描鍵盤的目的。

3)中斷方式

在中斷方式中,按鍵按下時所產(chǎn)生的信號一方面送入單片機的端口,另一方面通過組合電路送入單片機的外部中斷輸入端。當按鍵按下時,向

CPU

發(fā)出中斷請求,調(diào)用鍵盤掃描子程序。6.2.2獨立式按鍵的應(yīng)用

獨立式按鍵是指直接用

I/O

口線構(gòu)成的單個按健電路。每個獨立式按鍵單獨占用一根

I/O

口線,每根

I/O

口線的工作狀態(tài)不會影響其他

I/O

口線的工作狀態(tài),這是一種最簡單易懂的按鍵結(jié)構(gòu)。

1.獨立式按鍵結(jié)構(gòu)

獨立式按鍵電路結(jié)構(gòu)如圖

6.11

所示。

47單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計圖

6.11

獨立式按鍵電路

48單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計獨立式按鍵電路配置靈活,硬件結(jié)構(gòu)簡單,但每個按鍵必須占用一根

I/O

口線,在按鍵數(shù)量較多時,I/O

口線浪費較大。故只在按鍵數(shù)量較少時采用這種按鍵電路。

2.獨立式按鍵的軟件編制

6.4

編制程序?qū)D

6.11

所示電路掃描按鍵,并將鍵值通過連接在

P2

口的數(shù)碼管顯示出來。

//********************************************************************************

//程序:ex6_4.c

//功能:獨立式按鍵掃描程序(Keil

uVision4+Proteus

7.8

仿真通過)

//********************************************************************************#include

<reg52.h>sbit

SW0=P1^0;sbit

SW1=P1^1;sbit

SW2=P1^2;sbit

SW3=P1^3;sbit

SW4=P1^4;sbit

SW5=P1^5;/*包含頭文件

reg52.h

*///定義

P1.0

引腳位名稱為

SW0//定義

P1.0

引腳位名稱為

SW1//定義

P1.0

引腳位名稱為

SW2//定義

P1.0

引腳位名稱為

SW3//定義

P1.0

引腳位名稱為

SW4//定義

P1.0

引腳位名稱為

SW5

49單片機原理及應(yīng)用技術(shù)

sbit

SW6=P1^6;

sbit

SW7=P1^7;第

6

單片機常用接口電路設(shè)計//定義

P1.0

引腳位名稱為

SW6//定義

P1.0

引腳位名稱為

SW7

unsigned

char

code

Val[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//七段數(shù)碼管碼表

//********************************************************************************

//函數(shù)名:Delay

//函數(shù)功能:軟件延時函數(shù)

//形式參數(shù):uint

i

//********************************************************************************

void

Delay(unsigned

int

i)

{

while(i--);

}

//********************************************************************************

//函數(shù)名:main

//函數(shù)功能:主函數(shù)

//********************************************************************************

50單片機原理及應(yīng)用技術(shù)

main()

{

P2=0xff;

while(1)

{

if(!SW0)

{Delay(5);

if(!SW0)

{P2=Val[0];

}

}

else

if(!SW1)

{Delay(5);

if(!SW1)

{

P2=Val[1];

}

}

else

if(!SW2)

{Delay(5);

if(!SW2)第

6

單片機常用接口電路設(shè)計

//數(shù)碼管熄滅//掃描

SW0//消抖延時//再次掃描

SW0

確認

//

SW0

按下,鍵值顯示

0

//掃描

SW1

//消抖延時//再次掃描

SW1

確認//

SW1

按下,鍵值顯示

1//掃描

SW2

//消抖延時//再次掃描

SW2

確認{P2=Val[2];}//

SW2

按下,鍵值顯示

2

51單片機原理及應(yīng)用技術(shù)

}

else

if(!SW3)

{Delay(5);

if(!SW3)

{P2=Val[3];}

}

else

if(!SW4)

{Delay(5);

if(!SW4)

{

P2=Val[4];

}

}

else

if(!SW5)

{Delay(5);

if(!SW5)第

6

單片機常用接口電路設(shè)計//掃描

SW3

//消抖延時//再次掃描

SW3

確認//

SW3

按下,鍵值顯示

3

//掃描

SW4

//消抖延時//再次掃描

SW4

確認//

SW4

按下,鍵值顯示

4//掃描

SW5

//消抖延時//再次掃描

SW5

確認}{P2=Val[5];

}else

if(!SW6)

//

SW5

按下,鍵值顯示

5//掃描

SW6

52單片機原理及應(yīng)用技術(shù)

{Delay(5);

if(!SW6)

{P2=Val[6];}

}

else

if(!SW7)

{Delay(5);

if(!SW7)

{P2=Val[7];}第

6

單片機常用接口電路設(shè)計

//消抖延時//再次掃描

SW6

確認//

SW6

按下,鍵值顯示

6//掃描

SW7

//消抖延時//再次掃描

SW7

確認//

SW7

按下,鍵值顯示

7

}

}}

53單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計6.2.3矩陣式按鍵的應(yīng)用

獨立式按鍵電路每一個按鍵開關(guān)占一個

I/O

口線。當按鍵數(shù)量較多時,要占用較多的

I/O

口線。因此通常多采用矩陣式(也稱為行列式)鍵盤電路。

1.矩陣式鍵盤電路的結(jié)構(gòu)及原理

如圖6.12所示為用單片機的P0和P1口組成的矩陣式鍵盤電路。圖中行線

P0.0~P0.3,通過

4

個上拉電阻接+5V,為輸入狀態(tài)。列線為

P2.0~P2.3,處于輸出狀態(tài)。按鍵設(shè)置在行、列交點上,行、列線分別連接到按鍵開關(guān)的兩端,構(gòu)成

4×4

(16

個按鍵)的矩陣式鍵盤。

2.矩陣式鍵盤的識別

最常用的矩陣式鍵盤方法是編程掃描法,分為行掃描法(逐行掃描查詢法)和列掃描法(逐列掃描查詢法),這里采用列掃描法識別方法。

CPU

通過讀取行線的狀態(tài),即可知道有無按鍵按下。當鍵盤上沒有鍵閉合時,行、列線之間是斷開的,所有的行線輸入全部為高電

54單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計平。當鍵盤上某個鍵被按下閉合時,則對應(yīng)的行線和列線短路,行線輸入即為列線輸出。鍵盤掃描法識別可以分作以下兩個步驟。

1)判斷有無按鍵被按下

鍵被按下時,與此鍵相連的行線與列線將導通,而行線電平在無按鍵按下時處于高電平。顯然,讓所有列線處于低電平,當有鍵按下時按鍵所在行電平將被拉成低電平,根據(jù)此行電平的變化,便能判定一定有按鍵被按下。

2)判斷具體按鍵按下

方法是向列線上逐列送低電平。先送第

0

列低電平,第

1、2、3列為高電平,讀入行電平的狀態(tài)就顯示了位于第

0

行的

0、4、8、C這

4

個按鍵的狀態(tài),若讀入的行值全為高,則表示無鍵按下;再送第

1

列為低電平,第

0、2、3

列為高電平,讀入行電平的狀態(tài)就顯示了位于第

1

行的

1、5、9、D

4

個按鍵的狀態(tài),以些類推,直到4

列全部掃描完畢,再從第

0

列開始。通過上面的掃描方法可以得到按下按鍵所在的行號和列號,然后用公式計算法或查表法得到鍵值。鍵值與行號、列號之間的關(guān)系為:鍵值=行號

x4+列號。

55單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計圖

6.12

矩陣式鍵盤電路

56單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

3.矩陣式鍵盤的軟件編制

6.5

利用如圖

6.12

所示應(yīng)用電路,用列掃描法編制軟件掃描矩陣式鍵盤,并將掃描到的鍵值送到連接在

P3口的LED數(shù)管上顯示。

//********************************************************************************

//程序:ex6_5.c

//功能:矩陣式鍵盤掃描程序(Keil

uVision4+Proteus

7.8

仿真通過)

//********************************************************************************#include

<reg51.h>#define

uchar

unsigned

char/*包含頭文件

reg51.h*/

/*宏定義后方便書寫*/#define

uintunsigned

int/*宏定義后方便書寫*/

uchar

code

Table[]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//LED

碼表

//********************************************************************************

//函數(shù)名:Delay

//函數(shù)功能:軟件延時函數(shù)

//形式參數(shù):uint

i

57單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計//********************************************************************************void

Delay(uint

i){while(i--);}

//********************************************************************************

//函數(shù)名:KeyScan

//函數(shù)功能:掃描子程序

//返回值:KeyNum//********************************************************************************

uchar

KeyScan(){

uint

Row,Col,KeyNum,j,temp=0;

P0=0xff;

for(j=0;j<4;j++){P2=0xfe<<j;

temp=P0;//

Row

行值變量

,Col

列值變量,KeyNum

鍵值變量

//行線拉高(P0

口低

4

位)

//分

4

次(列)掃描//掃描列掃描碼送

P2

口(低

4

位),每次掃描一列//讀回行值

58第

6

單片機常用接口電路設(shè)計

//讀回行值取反,并去掉高

4

//如果讀回行值為

0

說明沒有按鍵按下

//消抖延時

//讀回行值

//讀回行值取反,并去掉高

4

//如果讀回行值為

0

說明沒有按鍵按下

//保存列值單片機原理及應(yīng)用技術(shù)

temp=~temp&0x0f;

if(temp!=0x00)

{Delay(5);

temp=P0;

temp=~temp&0x0f;

if(temp!=0x00)

{Col=j;

switch(temp){

case

0x01:Row=0;break;//

如果讀回值是

0x01,說明被按下的鍵在第

0

行case

0x02:Row=1;break;

//

如果讀回值是

0x02,說明被按下的鍵在第

1

行case

0x04:Row=2;break;

//

如果讀回值是

0x04,說明被按下的鍵在第

2

行case

0x08:Row=3;break;

//

如果讀回值是

0x08,說明被按下的鍵在第

3

default:break;

}break;

//如果讀回值是其它參數(shù)不處理//已經(jīng)確定行列值,提前結(jié)束掃描

}}

59單片機原理及應(yīng)用技術(shù)

}

KeyNum=Row*4+Col;

return

KeyNum;第

6

單片機常用接口電路設(shè)計

//鍵值=行號*4+列號

//鍵值返回主函數(shù)

}

//********************************************************************************

//函數(shù)名:main

//函數(shù)功能:主函數(shù)//********************************************************************************void

main(){

uchar

KeyNum;

while(1){

KeyNum=KeyScan();

P2=Table[KeyNum];//

KeyNum

鍵值變量//調(diào)用鍵盤掃描程序//鍵值送出顯示

}}

60單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

小知識

除了上面給出編程掃描法識別按鍵外,還可以采用下面兩種方法識別按鍵。

一種是定時掃描方式,每隔一段時間對鍵盤掃描一次;另一種是利用單片機定時器產(chǎn)生一個定時時間(例如

10

ms),采用中斷方式,當定時時間到產(chǎn)生定時器溢出中斷,CPU

響應(yīng)中斷后,在中斷函數(shù)中對鍵盤進行編程掃描,識別鍵值。

采用以上兩種鍵盤掃描方式時,無論是否有按鍵按下,

CPU都要定時掃描鍵盤,而單片機應(yīng)用系統(tǒng)工作時并不是經(jīng)常需掰輸入,因此,CPU

經(jīng)常處于空掃描狀態(tài)。為提高

CPU

的工作效率,可采用中斷掃描方式。當無鍵按下時,CPU

處理自己的工作;當有鍵按下時,產(chǎn)生中斷申請,CPU

轉(zhuǎn)去執(zhí)行鍵盤掃描函數(shù),并識別鍵值,這一應(yīng)用充分體現(xiàn)了中斷處理的實時處理功能。當有鍵按下時,向

CPU

申請中斷,若

CPU

開放外部中斷,則會響應(yīng)中斷請求,調(diào)用鍵盤掃描函數(shù)。

61單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計6.3D/A,A/D

接口電路

D/A

轉(zhuǎn)換器(Digital

to

Analog

Converter)是一種能把數(shù)字量信號轉(zhuǎn)換成模擬量信號的電子器件,

A/D

轉(zhuǎn)換器(Analog

to

Digital

Convcrter)則是一種能把模擬量信號轉(zhuǎn)換成數(shù)字量信號的電子器件。在單片機控制的應(yīng)用系統(tǒng)中,如圖

6.14

所示,經(jīng)常需要用到模數(shù)轉(zhuǎn)換器(A/D

轉(zhuǎn)換器)和數(shù)模轉(zhuǎn)換器(D/A

轉(zhuǎn)換器)。被控對象的過程信號可以是電量(如電流、電壓和開關(guān)量等),也可以是非電量(如溫度、壓力、速度和密度等),其數(shù)值是隨時間連續(xù)變化的。通常情況下,過程信號是由變送器和各類傳感器變換成相應(yīng)的模擬電量信號(多為電流信號),然后經(jīng)圖

6.13

中的多路電子開關(guān)匯集再經(jīng)過信號調(diào)理電路傳給

A/D

轉(zhuǎn)換器,由

A/D

轉(zhuǎn)換器轉(zhuǎn)換成相應(yīng)的數(shù)字量傳給單片機。單片機對過程信息進行運算和處理,把過程信息、進行輸出(如顯示,打印等),或輸出被控對象的工作狀態(tài)或故障狀況。另一方面,單片機還把處理后的數(shù)字量信號送給

D

/A

轉(zhuǎn)換器,再經(jīng)過

V/I

轉(zhuǎn)換(電壓/電流轉(zhuǎn)換。驅(qū)動執(zhí)行器對被控系統(tǒng)實施控制和調(diào)整,使之始終處于最佳狀態(tài)。

62單片機原理及應(yīng)用技術(shù)第

6

單片機常用接口電路設(shè)計

6.13

單片機控制系統(tǒng)

A/D

轉(zhuǎn)換器在單片機控制系統(tǒng)中主要用于數(shù)據(jù)采集,向單片機提供被控對象的各種實時參數(shù),以便單片機對被控對象進行監(jiān)視;D/A轉(zhuǎn)換器用于模擬控制,通過機械或電氣手段對被控對象進行調(diào)整和控制。因此,

A/D

轉(zhuǎn)換器和

D/A

轉(zhuǎn)換器是架設(shè)在單片機和被控對象之間的橋梁,在單片機控制系統(tǒng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論