《MSP430系列超低功耗單片機(jī)原理與系統(tǒng)設(shè)計(jì)》課件第6章_第1頁(yè)
《MSP430系列超低功耗單片機(jī)原理與系統(tǒng)設(shè)計(jì)》課件第6章_第2頁(yè)
《MSP430系列超低功耗單片機(jī)原理與系統(tǒng)設(shè)計(jì)》課件第6章_第3頁(yè)
《MSP430系列超低功耗單片機(jī)原理與系統(tǒng)設(shè)計(jì)》課件第6章_第4頁(yè)
《MSP430系列超低功耗單片機(jī)原理與系統(tǒng)設(shè)計(jì)》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩128頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

VIP免費(fèi)下載

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

文檔簡(jiǎn)介

第6章MSP430系列單片機(jī)的應(yīng)用

6.1MSP430系列單片機(jī)常用接口設(shè)計(jì)

6.2MSP430系列單片機(jī)應(yīng)用設(shè)計(jì)舉例

習(xí)題

6.1MSP430系列單片機(jī)常用接口設(shè)計(jì)

6.1.1鍵盤接口設(shè)計(jì)

1.獨(dú)立按鍵式鍵盤獨(dú)立按鍵式鍵盤是指使用按鍵與單片機(jī)的I/O口線直接連接的方法構(gòu)成的單個(gè)按鍵電路,如圖6-1所示,3個(gè)獨(dú)立按鍵直接與3條口線相連形成3按鍵獨(dú)立式鍵盤。當(dāng)某一按鍵KEYn(n=1~3)閉合時(shí),P1.n輸入為低電平,釋放時(shí)P1.n輸入為高電平。由于機(jī)械按鍵的彈簧片存在著輕微的彈跳現(xiàn)象,當(dāng)再按下一次KEYn時(shí),P1.n的輸入波形如圖6-2所示。

圖6-1獨(dú)立式鍵盤連接示例

圖6-2按鍵抖動(dòng)波形

圖6-2中t1和t3分別為鍵閉合和釋放過(guò)程的抖動(dòng)期,呈現(xiàn)一串抖動(dòng)脈沖波,其時(shí)間長(zhǎng)短與按鍵的機(jī)械特性有關(guān),一般在5~10ms之間。在鍵閉合的穩(wěn)定期t2期間,P1.n為低電平,其時(shí)間由操作員按鍵的動(dòng)作所確定,一般為幾百毫秒至幾秒。t0和t4為按鍵釋放期。為了確保CPU對(duì)按鍵的一次閉合僅作一次處理,必須去除抖動(dòng),常用的清除抖動(dòng)的方法有3種:

(1)R-S觸發(fā)器構(gòu)成的去抖動(dòng)電路;

(2)使用電阻和電容構(gòu)成積分器;

(3)使用軟件延時(shí)。

一般的按鍵采用軟件延時(shí)方法,鍵盤程序主要有如下3個(gè)步驟:

(1)消除按鍵抖動(dòng)(若使用硬件,則可略);

(2)判斷是哪個(gè)按鍵按下,識(shí)別鍵碼;

(3)等到按鍵松開(kāi)。

鍵盤掃描控制有定時(shí)查詢法和中斷控制法兩種。因?yàn)镸SP430的P0,P1,P2等3個(gè)8位端口都有中斷能力,建議讀者使用中斷方式,在主程序中須設(shè)置P1口中斷使能。圖6-1的鍵盤連接的示例中斷服務(wù)程序如下:

#include<msp430x44x.h>

unsignedcharkeybuf; //鍵值緩存器

unsignedcharP1key(void) //判鍵子程序

{unsignedcharx;

x=(P1IN&0x0e); //P1.3~P1.1接有按鍵

return(x); //有按鍵返回

}unsignedcharkeycode()//找哪個(gè)按鍵被按下,查鍵值子程序

{

unsignedcharx=0x0e;

if((P1IN&0x0e)==0x0c) //是否第一個(gè)按鍵被按下

x=1;

//給出鍵帽值1

else

if((P1IN&0x0e)==0x0a)//是否第二個(gè)按鍵被按下

x=2;

//給出鍵帽值2

else

if((P1IN&0x0e)==0x06) //是否第三個(gè)按鍵被按下

x=3;

//給出鍵帽值3

return(x);

}#pragmavector=PORT1_VECTOR //端口1的中斷服務(wù)程序

_interruptvoidport1_vector(void)

{unsignedinti;

while(P1key()!=0x0e)

{

for(i=0;i<100;i++); //延時(shí)消除抖動(dòng)

}

while(P1key()!=0x0e)

{

keybuf=keycode();//確信有鍵被按下,找按鍵得鍵值

}

while(P1key()==0x0e) //等待按鍵松開(kāi)

P1IFG=0x00; //消除中斷標(biāo)志

}

main()

{ WDTCTL=WDTPW+WDTHOLD; //停止看門狗

P1IES|=BIT1+BIT2+BIT3;//對(duì)應(yīng)引腳下降沿使相應(yīng)標(biāo)志置位

P1IE|=BIT1+BIT2+BIT3; //允許對(duì)應(yīng)位中斷

_EINT(); //開(kāi)中斷

P5DIR|=BIT1;

P5OUT&=~BIT1;

while(1)

{//keycode();

switch(keycode())

{case0x0e:break;

case1:_______ //鍵1的處理

case2:_______ //鍵2的處理

case3:_______ //鍵3的處理

}

}

2.矩陣式鍵盤

獨(dú)立式按鍵一般都只能應(yīng)用在按鍵用量較少的簡(jiǎn)單場(chǎng)合,當(dāng)系統(tǒng)功能較多,用鍵量較大時(shí)就要采用矩陣式鍵盤結(jié)構(gòu)(行列掃描式鍵盤),這樣可使用較少的I/O口線連接較多的按鍵。圖6-3所示為通過(guò)MSP430的P1口接的12(3×4=12)個(gè)按鍵(編號(hào)為1~9、a~c)構(gòu)成的行列掃描式鍵盤示例。下面分析如何在行列掃描式鍵盤上實(shí)現(xiàn)鍵盤的3個(gè)步驟:判鍵消抖動(dòng)、鍵碼識(shí)別、等待按鍵的松開(kāi)。

圖6-3矩陣按鍵接口

1)判斷有無(wú)按鍵按下

在上圖6-3中,P1口的7條I/O口線被分成三條行線P1.3~P1.1,4條列線P1.7~P1.4,其中列線分別由電阻上拉到電源。按鍵的兩端分別接在行線和列線上,行線與列線的每一個(gè)交界處均有一個(gè)按鍵。如果有按鍵按下,則與之相連的行線和列線被接通。要想檢測(cè)是否有按鍵按下,先使3條行線輸出低電平,讀列線P1.7~P1.4。因所有的列線經(jīng)上拉電阻接至VCC,所以如果有按鍵按下,則讀進(jìn)來(lái)的高4位不是F,與按下按鍵相接的列線讀得的是0;如果沒(méi)有按鍵按下,讀進(jìn)來(lái)的高4位是F,由此即可以判斷是否有按鍵被按下。相應(yīng)程序如下:

unsignedcharP1key(void) //判鍵子程序

{unsignedcharx;

x=(P1IN&0xf0);//P1.7~P1.4接有按鍵,另一端接VCC

return(x); //有按鍵返回

}

當(dāng)使用軟件延時(shí),當(dāng)檢測(cè)到有按鍵按下之后,等待10ms再檢測(cè)是否有按鍵被按下。

2)鍵碼識(shí)別

對(duì)于行列式矩陣鍵盤,常采用掃描的辦法識(shí)別鍵碼。通過(guò)3條行線輸出低電平,讀列線P1.7~P1.4的辦法來(lái)得知是否有按鍵被按下??梢杂猛瑯拥姆椒▉?lái)確認(rèn)究竟是哪一個(gè)按鍵被按下。

由圖6-3可知,如果3條行線沒(méi)有輸出低電平,則盡管有按鍵被按下,從列線讀到高電平。利用這一原理進(jìn)行分時(shí)掃描,在行線上分別掃描輸出低電平,當(dāng)在某一條列線上讀取到不是“1”時(shí),根據(jù)輸出“0”電平的行線和讀到“0”的列線就可以確定是哪一按鍵被按下了,由此可識(shí)別出所按之鍵的鍵位,鍵碼也可以由此得到。

3)等待按鍵松開(kāi)

與獨(dú)立式按鍵一樣,反復(fù)調(diào)用鍵號(hào)掃描子程序,直到判斷結(jié)果為沒(méi)有按鍵按下為止。圖6-3所示矩陣按鍵連接圖的完整的鍵盤掃描子程序如下(供參考):

#include<msp430x44x.h>

unsignedcharkeybuf;

//鍵值緩存器

unsignedcharP1key(void) //鍵掃描子程序

{unsignedcharx;

x=(P1IN&0xf0);

return(x); //有按鍵返回

}

unsignedcharkeycode() //判斷是否有按鍵按下,查鍵掃描子程序

{unsignedcharx=0xff;

P1OUT=0XF7;

if((P1IN&0XF0)==0X70)

//是否第一個(gè)按鍵被按下

x=1;

//給出鍵號(hào)#1

else

if((P1IN&0XF0)==0XB0)//是否第二個(gè)按鍵被按下

x=2; //給出鍵號(hào)#2

else

if((P1IN&0XF0)==0XD0)

x=3;

else

if((P1IN&0XF0)==0XE0)

x=0x0a;

else

{P1OUT=0XFB;

if((P1IN&0XF0)==0X70)

x=4;

else

if((P1IN&0XF0)==0XB0)

x=5;

else

if((P1IN&0XF0)==0XD0)

x=6;

else

if((P1IN&0XF0)==0XE0)

x=0x0b;

else

{P1OUT=0XFD;

if((P1IN&0XF0)==0X70)

x=7;

else if((P1IN&0XF0)==0XB0)

x=8;

else

if((P1IN&0XF0)==0XD0)

x=9;

else

if((P1IN&0XF0)==0XE0)

x=0x0c;elsex=0xff;

}

}

return(x);

}

#pragmavector=PORT1_VECTOR

//P1的中斷服務(wù)程序

__interruptvoidport1_vector(void)

{unsignedinti;6.1.2數(shù)字顯示系統(tǒng)設(shè)計(jì)

單片機(jī)應(yīng)用系統(tǒng)中,使用的顯示器件主要有LED數(shù)碼管(發(fā)光二極管)、LCD液晶顯示器和CRT顯示器。前兩種顯示器成本低廉,配置靈活,與單片機(jī)連接方便。本節(jié)主要介紹LED和LCD顯示接口的設(shè)計(jì)方法。

1.LED數(shù)碼管顯示接口

LED顯示塊是利用發(fā)光二極管顯示字段的顯示器件。LED顯示塊具有亮度高、結(jié)構(gòu)簡(jiǎn)單、全天候的特點(diǎn),因此在單片機(jī)應(yīng)用系統(tǒng)中應(yīng)用最廣。

1)

LED顯示器結(jié)構(gòu)與原理

單片機(jī)應(yīng)用系統(tǒng)中通常使用的是七段LED,通常的七段LED顯示塊中有七個(gè)發(fā)光二極管構(gòu)成七筆字形“日”與一個(gè)發(fā)光二極管為圓點(diǎn)形狀構(gòu)成小數(shù)點(diǎn)組成。這種顯示器有共陰極和共陽(yáng)極兩種。將發(fā)光二極管的所有正極并接后組成公共端,8個(gè)發(fā)光二極管的負(fù)極則各自獨(dú)立引出,稱為共陽(yáng)顯示器,如圖6-4(c)所示。當(dāng)某個(gè)字段的負(fù)極加低電平時(shí),對(duì)應(yīng)的字段就點(diǎn)亮。將8個(gè)發(fā)光二極管的負(fù)極全部連接在一起組成公共端,8個(gè)發(fā)光二極管的正極則各自獨(dú)立引出,稱為共陰顯示器,如圖6-4(d)所示。當(dāng)某個(gè)字段的陽(yáng)極加高電平時(shí),對(duì)應(yīng)的字段就點(diǎn)亮。無(wú)論何種形式的LED顯示器,它們排列成“日”字形的各個(gè)筆畫(huà)段和名稱都是相同的,如圖6-4所示,分別為a、b、c、d、e、f、g、h,這些筆畫(huà)段的引腳排列也是統(tǒng)一的。

圖6-4LED數(shù)碼顯示器

2)?LED顯示器的顯示方式

在單片機(jī)應(yīng)用系統(tǒng)中使用LED顯示塊可以構(gòu)成N位LED顯示器。N位LED顯示器有N根位選線和8?×?N根段選線。根據(jù)顯示方式不同,位選線與段選線的連接方法也不同。段選線控制字符選擇,位選線控制顯示位的亮、暗。

LED顯示器有靜態(tài)和動(dòng)態(tài)兩種方法。所謂靜態(tài)顯示(如圖6-5所示),是指共陰極或共陽(yáng)極連接在一起接地或接+5V,每位的段選線(a~dp)與一個(gè)8位并行口相連,每一位可獨(dú)立顯示,只要在該位的段選線上保持段選碼電平,該位就能保持相應(yīng)的顯示字符。如果要在數(shù)碼管上顯示“1”、“2”、“3”、“4”,則只需要在P1口輸出。

圖6-5靜態(tài)顯示連接

在靜態(tài)顯示中,每一顯示位都需要一個(gè)8位的輸出口控制,占用硬件較多,一般僅用于顯示器位數(shù)較少的場(chǎng)合。

動(dòng)態(tài)顯示(如圖6-6所示)就是一位一位地輪流點(diǎn)亮各位顯示器。在多位LED顯示時(shí),為了簡(jiǎn)化電路和降低成本,可將所有位的段選線并聯(lián)在一起,由一個(gè)8位I/O口控制,而共陰極點(diǎn)或共陽(yáng)極點(diǎn)分別由相應(yīng)的I/O口線控制。要想每位顯示不同的字符,必須采用掃描顯示方式。即在每一瞬間只使某一位顯示相應(yīng)字符。顯示位的亮度既跟導(dǎo)通電流有關(guān),也和點(diǎn)亮?xí)r間與間隔時(shí)間的比例有關(guān)。動(dòng)態(tài)顯示器因其硬件成本較低,常被使用。

圖6-6動(dòng)態(tài)顯示連接

3)

LED顯示器接口實(shí)例

LED顯示器接口電路實(shí)例如圖6-7所示,其中,LED為共陰極數(shù)碼管,P3.0~P3.7既為L(zhǎng)ED的段選線,又為L(zhǎng)ED的位選線,通過(guò)373鎖存與P4.1、P4.2的選擇來(lái)實(shí)現(xiàn)。其工作方式為:當(dāng)P4.1為低電平時(shí),P3.0~P3.7為L(zhǎng)ED的段選線,依次對(duì)應(yīng)LED的a、f、b、g、c、h、d、e;當(dāng)P4.0為低電平時(shí),P3.0~P3.5為L(zhǎng)ED的位選線,依次對(duì)應(yīng)D5、D4、D3、D2、D1、D0。

圖6-7LED顯示器接口電路

voidDisplay(intx)

{

P3OUT=Digit[x];

P4OUT=0X02;

P4OUT=0X00;

P3OUT=LED3;

P4OUT=0x01;

P4OUT=0X00;

Delay(500);

}

voidmain(void)

{WDTCTL=WDTHOLD+WDTPW;

while(1)

{

P4DIR=0X03;

P3DIR=0XFF;

P3OUT=0X00; //clearalltheledsdisplay

P4OUT=0X02; //dataselectchoose

P4OUT=0X00;

Display(8); //要顯的數(shù)據(jù)

}

}

2.點(diǎn)陣式液晶顯示接口

液晶是一種具有規(guī)則性分子排列的有機(jī)化合物。液晶顯示是一種極低功耗的顯示器件,有段式液晶顯示器和點(diǎn)陣液晶顯示器兩種。段式液晶顯示由段型液晶顯示器件和專用集成電路組成,只能顯示數(shù)字和一些標(biāo)識(shí)符號(hào)。有些MSP430系列單片機(jī)本身就含有段式液晶驅(qū)動(dòng)模塊,使用起來(lái)非常方便,本節(jié)不作介紹。點(diǎn)陣式液晶能以點(diǎn)陣或圖形方式顯示出各種信息,因此在電子設(shè)計(jì)中得到了廣泛應(yīng)用。但是,對(duì)它的接口設(shè)計(jì)必須遵循一定的硬件和時(shí)序規(guī)范,不同的液晶顯示驅(qū)動(dòng)器,可能需要采用不同的接口方式和控制指令才能夠?qū)崿F(xiàn)所需信息的顯示。

點(diǎn)陣式液晶顯示有字符點(diǎn)陣式液晶和圖形全點(diǎn)陣式液晶顯示兩種。典型的字符點(diǎn)陣式液晶顯示器由控制器、驅(qū)動(dòng)器、字符發(fā)生器ROM、字符發(fā)生器RAM和液晶屏組成。字符由5×7點(diǎn)陣或5×10點(diǎn)陣組成。但是在一些高端應(yīng)用或有圖形顯示要求的系統(tǒng)中,段式液晶顯示屏或字符點(diǎn)陣式液晶顯示器就不再適用了,因?yàn)檫@兩種屏幕只能顯示數(shù)字或一些西文字母,要想顯示中文字或圖形信息,可以采用全點(diǎn)陣圖形液晶顯示器。

全點(diǎn)陣圖形液晶顯示器一般由控制器、驅(qū)動(dòng)器和全點(diǎn)陣液晶顯示屏組成。對(duì)于全點(diǎn)陣圖形液晶顯示器,可以把它看做一張位圖畫(huà)布,對(duì)于單色屏幕,其上的每一個(gè)點(diǎn),都用一個(gè)bit來(lái)表示,“1”表示點(diǎn)亮,“0”表示熄滅;對(duì)于灰度或彩色屏幕,則一個(gè)點(diǎn)用若干bit來(lái)表示。下面以香港信利的MSC-G12864DGEB-7N點(diǎn)陣液晶為例,介紹點(diǎn)陣圖形液晶顯示器的設(shè)計(jì)。

1)?MSC-G12864DGEB-7N全點(diǎn)陣式液晶顯示芯片簡(jiǎn)介

MSC-G12864DGEB-7N是一個(gè)帶有LCD驅(qū)動(dòng)器和控制器的全點(diǎn)陣式液晶顯示芯片,其分辨率是128?×?64,屏幕共64行,分為8頁(yè),每頁(yè)8行,每行128列。其內(nèi)部結(jié)構(gòu)如圖6-8所示,該顯示芯片主要由液晶屏陣列驅(qū)動(dòng)電路KS0108B、點(diǎn)陣式顯示控制器KS0107B、LCD顯示器和LED背光燈等4部分組成。其中KS0107B是公共動(dòng)芯片,KS0108B是通過(guò)它產(chǎn)生的時(shí)序控制的。兩片KS0108B是列驅(qū)動(dòng)及控制芯片,分別控制顯示屏的兩部分。MSC-G12864DGEB-7N共有20個(gè)引腳,引腳及其定義如表6-1所示。

表6-1MSC-G12864-7N的引腳說(shuō)明

圖6-8MSC-G12864DGEB-7N內(nèi)部結(jié)構(gòu)圖

2)?MSC-G12864DGEB-7N工作原理

MSC-G12864DGEB-7N的顯示RAM保存著被顯示內(nèi)容的點(diǎn)陣信息。顯示RAM的每一位對(duì)應(yīng)顯示屏上的一個(gè)點(diǎn),總共可以存儲(chǔ)128×64點(diǎn)的信息。通過(guò)選擇對(duì)應(yīng)的RAM頁(yè)地址和列地址,微控制器可以訪問(wèn)其中的任何一個(gè)點(diǎn)。微控制器對(duì)MSC-G12864DGEB-7N的顯示RAM的讀/寫操作通過(guò)MSC-G12864DGEB-7N的I/O緩沖器進(jìn)行,并且該讀操作和液晶顯示屏驅(qū)動(dòng)信號(hào)的讀取操作是獨(dú)立的,因此,當(dāng)顯示內(nèi)存的數(shù)據(jù)同時(shí)被雙方訪問(wèn)時(shí),不會(huì)出現(xiàn)顯示信息的抖動(dòng)等現(xiàn)象。CS1和CS2是芯片的片選信號(hào),只有CS1或者CS2選通時(shí),才能實(shí)現(xiàn)數(shù)據(jù)的輸入或者輸出,或者指令的執(zhí)行。一旦復(fù)位信號(hào)有效,則除了讀狀態(tài)其它指令都不能執(zhí)行。當(dāng)KS0108B正在進(jìn)行內(nèi)部操作時(shí),忙標(biāo)志為高。此時(shí)KS0108B不再接收任何外部指令和數(shù)據(jù)。反之,當(dāng)忙標(biāo)志為低時(shí),KS0108B能夠接收外部指令和數(shù)據(jù)。MSC-G12864DGEB-7N顯示芯片共有7個(gè)寄存器,下面依次進(jìn)行介紹。

(1)輸入寄存器。輸入寄存器用來(lái)存儲(chǔ)寫入顯示數(shù)據(jù)前RAM的臨時(shí)數(shù)據(jù)。當(dāng)CS1或者CS2有效時(shí),R/W和RS選擇輸入寄存器,數(shù)據(jù)從微處理器寫入到輸入寄存器,接著寫入到顯示數(shù)據(jù)存儲(chǔ)器。當(dāng)使能端E下跳沿到來(lái)時(shí),數(shù)據(jù)自動(dòng)鎖存到顯示數(shù)據(jù)存儲(chǔ)器。

(2)輸出寄存器。輸出寄存器存儲(chǔ)的是來(lái)自顯示數(shù)據(jù)RAM的臨時(shí)數(shù)據(jù)。當(dāng)片選有效,R/W有效,且D/I為高時(shí),在顯示數(shù)據(jù)RAM中存儲(chǔ)的數(shù)據(jù)被鎖存到輸出寄存器;當(dāng)片選有效,R/W為高,且D/I為低時(shí),可以讀出存儲(chǔ)的數(shù)據(jù)。要讀顯示數(shù)據(jù)RAM的內(nèi)容,需要兩次讀指令,第一次訪問(wèn),顯示數(shù)據(jù)RAM中的數(shù)據(jù)被鎖存到了輸出寄存器中;第二次訪問(wèn),微處理器才可以讀到已鎖存的數(shù)據(jù)。其功能表6-2所示。

表6-2輸出寄存器的功能

(3)顯示控制觸發(fā)器。顯示控制觸發(fā)器用于屏幕顯示的開(kāi)關(guān)控制。當(dāng)觸發(fā)器復(fù)位(邏輯低電平)時(shí),顯示打開(kāi),允許段輸出;當(dāng)觸發(fā)器置位(邏輯高電平)時(shí),顯示關(guān)閉。

顯示控制觸發(fā)器可以通過(guò)指令改變狀態(tài),當(dāng)復(fù)位信號(hào)有效時(shí),所有端的顯示數(shù)據(jù)都消失,觸發(fā)器的狀態(tài)通過(guò)讀指令輸出到DB5。

①X頁(yè)寄存器。X頁(yè)寄存器用于指定內(nèi)部顯示數(shù)據(jù)RAM頁(yè),它沒(méi)有計(jì)數(shù)功能,只能通過(guò)指令來(lái)設(shè)置地址。

②Y地址計(jì)數(shù)器。Y地址計(jì)數(shù)器用來(lái)指定內(nèi)部顯示數(shù)據(jù)RAM的地址,可以通過(guò)指令來(lái)設(shè)置,也可以通過(guò)讀或者寫顯示數(shù)據(jù)來(lái)自動(dòng)進(jìn)行增1計(jì)數(shù)。

③顯示數(shù)據(jù)RAM。顯示數(shù)據(jù)RAM用來(lái)存儲(chǔ)液晶顯示器要顯示的數(shù)據(jù)。顯示為“1”,關(guān)閉為“0”。

顯示起始行寄存器。顯示起始行寄存器用來(lái)說(shuō)明顯示數(shù)據(jù)RAM到液晶顯示器的顯示頂行的地址。顯示開(kāi)始行的數(shù)據(jù)位(DB0~DB5)的設(shè)置指令是由顯示起始行寄存器鎖存的,它用來(lái)滾動(dòng)液晶顯示屏。

3)

MSC-G12864DGEB-7N顯示控制指令

顯示控制指令用來(lái)控制KS0108B內(nèi)在的狀態(tài),微處理器發(fā)出的顯示控制指令用來(lái)完成KS0108B的顯示控制。

(1)顯示開(kāi)關(guān)控制(DisplayON/OFF)。顯示開(kāi)關(guān)設(shè)置如下:

Display:控制顯示的開(kāi)或者關(guān),不影響內(nèi)部狀態(tài)和顯示RAM的狀態(tài)。

0關(guān)閉顯示;

1打開(kāi)顯示。

(2)設(shè)置Y地址(SetAddress)。地址設(shè)置如下:

該指令是將(DB5~DB0)送入Y地址寄存器,作為Y地址指針。在對(duì)顯示數(shù)據(jù)RAM進(jìn)行讀/寫操作后,Y地址自動(dòng)加1,指向下一個(gè)顯示數(shù)據(jù)RAM單元。

(3)設(shè)置頁(yè)地址(X地址)(SetPage)。頁(yè)地址(X地址)設(shè)置如下:

所謂頁(yè)地址,也就是顯示數(shù)據(jù)的行地址,8行為一頁(yè),所以64行共8頁(yè)。D2~D0表示0~7頁(yè)。該指令用來(lái)設(shè)置X地址到X地址寄存器。

(4)設(shè)置起始地址(DisplayStartLine)。起始地址設(shè)置如下:

將DB5~DB0送入起始地址寄存器,起始行可以是0~63的任意一行。

(5)讀狀態(tài)(StatusRead)。讀狀態(tài)時(shí)各位定義如下:

BUSY:表示顯示器當(dāng)前的忙閑狀態(tài)。

0準(zhǔn)備狀態(tài);

1忙,工作中。ON/OFF:表示顯示器的開(kāi)閉狀態(tài)。

0開(kāi)顯示;

1關(guān)顯示。RESET:表示顯示器當(dāng)前的工作狀態(tài)。

0正常工作;

1復(fù)位。

(6)寫顯示數(shù)據(jù)(WriteDisplayData)。寫指令將數(shù)據(jù)(DB7~DB0)寫到顯示數(shù)據(jù)RAM,

Y地址指針自動(dòng)加1。

(7)讀顯示數(shù)據(jù)(ReadDisplayData)。從顯示數(shù)據(jù)RAM中將數(shù)據(jù)(DB7~DB0)讀到數(shù)據(jù)總線上。

4)?MSC-G12864DGEB-7N液晶顯示屏模塊與MSP430系列單片機(jī)的接口

MSC-G12864DGEB-7N可以通過(guò)8位雙向數(shù)據(jù)總線(并行模式下)接收來(lái)自微控制器的數(shù)據(jù),MSC-G12864DGEB-7N的片選信號(hào)端、讀/寫信號(hào)端以及控制信號(hào)端(D/I)和數(shù)據(jù)線(DB0~DB7)都應(yīng)該同微控制器的對(duì)應(yīng)端口進(jìn)行連接。此時(shí)MSC-G12864DGEB-7N內(nèi)部顯示RAM的數(shù)據(jù)以刷新液晶顯示的內(nèi)容,也可以通過(guò)數(shù)據(jù)總線讀取顯示內(nèi)存的內(nèi)容。

MSC-G12864DGEB-7N液晶顯示屏模塊與MSP430系列單片機(jī)的一般連接方式如圖6-9所示。MSP430的I/O口都是復(fù)用端口,因此必須根據(jù)需要設(shè)置引腳的狀態(tài)。其中P3.0和P3.1與

LCD的片選信號(hào)CS1、CS2相連,P4.0~

P4.3與LCD的RES、E、R/W和D/I相連,作為L(zhǎng)CD的控制線;P2口與DB0~DB7相連,作為L(zhǎng)CD的數(shù)據(jù)線。

圖6-9MSP430F149與MSC-G12864-DGEB-7N接口

6.1.3實(shí)時(shí)時(shí)鐘芯片DS1302的接口設(shè)計(jì)

1.DS1302的工作原理

DS1302時(shí)鐘芯片是一個(gè)帶秒、時(shí)、分、日、日期、月、年的串行時(shí)鐘保持芯片,該芯片具有低功耗工作方式,并能夠進(jìn)行每月天數(shù)以及閏年的自動(dòng)調(diào)節(jié)。

DS1302的性能特性如下:

工作電壓:2.0~5.5V。

最大輸入串行時(shí)鐘:2.0V時(shí),500Hz;5.0V時(shí),2MHz。

工作電流:2.0V時(shí),小于300nA;5.0V時(shí),至少為1μA。

與TTL電平兼容。

串行I/O口傳送,簡(jiǎn)單的3線接口。

兩種數(shù)據(jù)傳送方式:?jiǎn)巫止?jié)傳送、多字節(jié)傳送(字符組方式)。

所有寄存器都以BCD碼格式存儲(chǔ)。

DS1302時(shí)鐘的運(yùn)行可以采用24h或帶AM(上午)/PM(下午)的12h格式,只需要3根線與CPU進(jìn)行同步通信。DS1302的引腳如圖6-10所示,該芯片只有8個(gè)管腳,具體功能如下:

X1、X2:外接32kHz晶體的管腳。

GND:接地管腳。

RES:復(fù)位/片選線。

I/O:數(shù)據(jù)輸入/輸出管腳。

SCLK:串行時(shí)鐘輸入管腳。

VCC1、VCC2:電源管腳,其中VCC1為備用電源管腳。

圖6-10DS1302芯片管腳圖

DS1302有主電源/后備電源雙電源引腳:VCC1在單電源與電池供電的系統(tǒng)中提供低電源,并提供低功率的電池備份;VCC2在雙電源系統(tǒng)中提供主電源,在這種運(yùn)行方式中,VCC1連接到備份電,以便在沒(méi)有主電源的情況下能保存時(shí)間信息以及數(shù)據(jù)。DS1302由VCC1或VCC2中較大者提供。當(dāng)VCC2大于VCC1+0.2V時(shí),VCC2給DS1302供電;當(dāng)VCC2小于VCC1時(shí),VCC1給DS1302供電。

DS1302的控制字如下:

R/W:為1時(shí)讀,為0時(shí)寫。

A0~A4:指示操作單元地址。

RAM/CK:為1表示存取RAM數(shù)據(jù),為0則表示存取日歷時(shí)鐘數(shù)據(jù)。

最高位必須為邏輯1,如果為0,數(shù)據(jù)則寫不進(jìn)DS1302。

控制字節(jié)總是從最低位開(kāi)始輸入/輸出。

當(dāng)命令字節(jié)為1001XXX1時(shí),DS1302設(shè)置在測(cè)試模式,這種模式僅為半導(dǎo)體公司測(cè)試時(shí)使用。

DS1302數(shù)據(jù)讀/寫時(shí)序如圖6-11所示,DS1302在任何數(shù)據(jù)輸送時(shí)都必須先初始化,即在開(kāi)始傳送數(shù)據(jù)之前,先把置高。發(fā)送一個(gè)帶地址和命令信息的8位命令字,緊跟命令之后,時(shí)鐘/日歷數(shù)據(jù)傳至相應(yīng)的寄存器或從相應(yīng)的寄存器傳出(讀)。所有數(shù)據(jù)的輸入在SCLK的上升沿有效,輸出在SCLK的下降沿有效。數(shù)據(jù)傳送有單字節(jié)和多字節(jié)兩種方式。單字節(jié)傳送需要16個(gè)SCLK時(shí)鐘脈沖,多字節(jié)需要72個(gè)SCLK時(shí)鐘脈沖,數(shù)據(jù)的輸入/輸出都是從0位開(kāi)始。如果在數(shù)據(jù)傳送過(guò)程中置引腳低電平,則終止本次數(shù)據(jù)傳送,且I/O引腳呈高阻態(tài)。只有在SCLK為低電平時(shí),才能將RST置高電平。

圖6-11DS1302數(shù)據(jù)讀/寫時(shí)序

該器件還包括兩個(gè)附加位:時(shí)鐘停止位(CH)和寫保護(hù)位(WP)。這兩位用于控制振蕩器的工作和數(shù)據(jù)能否寫入寄存器。當(dāng)把寄存器的第7位(時(shí)鐘停止位)設(shè)置為1時(shí),時(shí)鐘振蕩器停止,DS1302進(jìn)入低功耗方式;當(dāng)該位寫入0時(shí),啟動(dòng)時(shí)鐘開(kāi)始。寄存器的地址和數(shù)據(jù)格式如表6-3所示。

表6-3內(nèi)部寄存器地址和內(nèi)容

CH:時(shí)鐘停止位。

CH=0振蕩器工作允許;

CH=1振蕩器停止。

WP:寫保護(hù)位。

WP=0寄存器數(shù)據(jù)能夠?qū)懭耄?/p>

WP=1寄存器數(shù)據(jù)不能寫入。

寄存器2的第7位:12/24小時(shí)模式轉(zhuǎn)換位。

bit7=024小時(shí)模式;

bit7=112小時(shí)模式。

寄存器2的第5位:AM/PM定義。

AP=0上午模式;

AP=1下午模式。

2.DS1302接口設(shè)計(jì)

DS1302應(yīng)該選用32.768kHz的晶振,電容推薦為6pF。因?yàn)檎袷庮l率較低,也可以不接電容,對(duì)計(jì)時(shí)精度影響不大。DS1302的外圍電路如圖6-12所示。VCC1管腳在需要使用時(shí),可以外接電池或者充電電容。DS1302工作的時(shí)候,在VCC2和VCC1兩個(gè)管腳中,選擇電壓高的那個(gè)管腳的電源作為工作電源。

圖6-12DS1302的接口電路

需要通過(guò)軟件設(shè)計(jì)完成對(duì)時(shí)鐘芯片

DS1302日歷數(shù)據(jù)的獲取。DS1302內(nèi)部有“年、月、日、時(shí)、分、秒”等寄存器,也有

RAM。由于DS1302的“年、月、日、時(shí)、分、秒”寄存器里面的內(nèi)容是按

BCD編碼進(jìn)行存儲(chǔ)的,所以在寫程序時(shí)需要注意。對(duì)DS1302的操作分為單字節(jié)和多字節(jié)操作。單字節(jié)操作時(shí),需要發(fā)送一個(gè)命令,再進(jìn)行一個(gè)字節(jié)讀/寫。為了提高處理的效率,可采用連續(xù)讀/寫的多字節(jié)操作,比如連續(xù)讀出“年、月、日、時(shí)、分、秒”內(nèi)容,單字節(jié)操作和多字節(jié)操作區(qū)別在于命令不同,并且一次操作的數(shù)據(jù)個(gè)數(shù)不同。下面給出圖6-12接口電路的模塊功能程序?qū)嵗?/p>

6.2MSP430系列單片機(jī)應(yīng)用設(shè)計(jì)舉例

6.2.1單片機(jī)應(yīng)用系統(tǒng)方案設(shè)計(jì)單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)內(nèi)容與步驟包括總體設(shè)計(jì)、功能設(shè)計(jì)、可靠性設(shè)計(jì)和系統(tǒng)調(diào)試,如圖6-13所示。

圖6-13單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)內(nèi)容與步驟示意圖

1.總體設(shè)計(jì)

合理的總體設(shè)計(jì)來(lái)自于對(duì)系統(tǒng)要求的全面分析和實(shí)現(xiàn)方法的正確選擇。在對(duì)系統(tǒng)要求進(jìn)行全面分析之后,確定單片機(jī)應(yīng)用系統(tǒng)的總體方案,畫(huà)出系統(tǒng)的硬件結(jié)構(gòu)框圖和應(yīng)用程序結(jié)構(gòu)框圖。

(1)制定設(shè)計(jì)任務(wù)書(shū)。設(shè)計(jì)者首先應(yīng)對(duì)系統(tǒng)的任務(wù)、控制對(duì)象、硬件資料和工作環(huán)境作出詳盡而周密的調(diào)查研究,明確各項(xiàng)設(shè)計(jì)任務(wù)。在此基礎(chǔ)上對(duì)設(shè)計(jì)目標(biāo)、系統(tǒng)功能、處理方案、控制精度、輸入/輸出速度、地址分配、存儲(chǔ)容量、I/O接口和出錯(cuò)處理等給出明確的定義,制定出完整的設(shè)計(jì)任務(wù)書(shū)。

(2)建立數(shù)學(xué)模型。設(shè)計(jì)者在制定好任務(wù)書(shū)后,要對(duì)測(cè)控對(duì)象的物理過(guò)程和計(jì)算任務(wù)進(jìn)行全面分析,從中抽象出數(shù)學(xué)模型,真實(shí)客觀地描述測(cè)控過(guò)程。

(3)總體方案設(shè)計(jì)。在設(shè)計(jì)任務(wù)書(shū)和數(shù)學(xué)模型的基礎(chǔ)上,確定系統(tǒng)總體方案,劃分硬件和軟件的任務(wù),完成系統(tǒng)結(jié)構(gòu)設(shè)計(jì)。

2.系統(tǒng)功能設(shè)計(jì)

1)系統(tǒng)資源的配置

系統(tǒng)資源的配置包括芯片硬件資源的配置和RAM資源的分配。

芯片硬件資源的配置主要包括對(duì)端口引腳、中斷源、定時(shí)器/計(jì)數(shù)器和其它功能部件(如串行口、A/D、PWM、比較器和看門狗等)進(jìn)行合理配置與設(shè)計(jì)。

RAM資源的分配。片內(nèi)RAM用來(lái)存放各種變量、標(biāo)志、堆棧和數(shù)據(jù)處理中的臨時(shí)結(jié)果等,片外RAM主要用來(lái)存放數(shù)據(jù)塊。如果采用匯編語(yǔ)言編制程序,需要對(duì)RAM資源進(jìn)行有效分配。但是,如果采用高級(jí)語(yǔ)言,如C語(yǔ)言編寫程序,則該步驟可省略。

2)系統(tǒng)軟件結(jié)構(gòu)分析與模塊設(shè)計(jì)

單片機(jī)應(yīng)用系統(tǒng)的軟件設(shè)計(jì),首先應(yīng)能滿足系統(tǒng)的測(cè)試、控制要求,其次應(yīng)考慮程序設(shè)計(jì)的具體方法和超低功耗設(shè)計(jì)的要求。一般為了便于編程和調(diào)試,應(yīng)先進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)。

軟件結(jié)構(gòu)設(shè)計(jì)是進(jìn)行模塊化編程的準(zhǔn)備階段,可以直接根據(jù)功能要求畫(huà)出流程圖,或?qū)傮w方案適當(dāng)分塊,然后再確定各塊的功能,并畫(huà)出相應(yīng)的流程圖。流程圖是設(shè)計(jì)者對(duì)用戶要求和生產(chǎn)工藝過(guò)程的表達(dá),應(yīng)該做到結(jié)構(gòu)清晰、嚴(yán)謹(jǐn),既便于編程,也便于閱讀,還可用圖形和文字來(lái)對(duì)流程圖進(jìn)行描述和說(shuō)明。

編寫源程序有效的辦法是以各模塊之間連接關(guān)系最簡(jiǎn)為原則,明確各模塊應(yīng)完成的功能,劃分程序模塊,采用模塊化程序設(shè)計(jì)。在編程過(guò)程中,應(yīng)充分利用單片機(jī)指令系統(tǒng)功能強(qiáng)、尋址方式多的優(yōu)點(diǎn)編制出層次清楚、運(yùn)行速度快、所占內(nèi)存單元少的源程序,并盡量引用成熟的子程序或模塊,這樣會(huì)給編程及調(diào)試都帶來(lái)很多便利。系統(tǒng)軟件一般包含以下模塊:

(1)自檢模塊,通常安排在主程序中系統(tǒng)上電后執(zhí)行,一般包括:

程序代碼自檢。判斷程序代碼是否改變,如執(zhí)行校驗(yàn)算法;

數(shù)據(jù)存儲(chǔ)器自檢。進(jìn)行非破壞性讀/寫校驗(yàn),判斷是否正常;

I/O口狀態(tài)自檢。檢查I/O口在待機(jī)狀態(tài)下的狀態(tài)是否正常;

其它自檢。檢查A/D通道、D/A通道、顯示器和蜂鳴器等,看是否工作正常。

(2)初始化模塊,通常安排在主程序中系統(tǒng)上電后執(zhí)行,一般包括:

外部硬件初始化。對(duì)各種外部芯片設(shè)定明確初始化狀態(tài);

功能部件初始化。對(duì)片內(nèi)功能部件設(shè)定明確的初始狀態(tài);

堆棧初始化。設(shè)置堆??臻g,初始化堆棧指針;

變量初始化。為各種變量和指針設(shè)置初始值、默認(rèn)值;

其它初始化。數(shù)據(jù)區(qū)初始化、時(shí)鐘初始化、軟件標(biāo)志初始化等。

(3)監(jiān)控模塊,其實(shí)質(zhì)是保證系統(tǒng)在運(yùn)行過(guò)程中的當(dāng)前狀態(tài)、各項(xiàng)操作和狀態(tài)的變化是否符合設(shè)計(jì)要求,一般可安排在主程序中,也可安排在中斷子程序中。監(jiān)控模塊的任務(wù)有:獲取外部輸入控制的信息,并作相應(yīng)的解釋,如常用的鍵盤操作信息,調(diào)度執(zhí)行相應(yīng)模塊完成預(yù)定任務(wù)。遙控操作也可以合并到監(jiān)控模塊中進(jìn)行解釋執(zhí)行。

(4)顯示模塊,通常可安排在主程序中,也可安排在中斷子程序中,一般包括:

顯示輸出集中處理:將系統(tǒng)所有的顯示輸出全部集中到本模塊中。

顯示數(shù)據(jù)的獲?。和ㄟ^(guò)查詢系統(tǒng)的狀態(tài)信息(狀態(tài)編碼和各種狀態(tài)標(biāo)志)判斷出應(yīng)該顯示的數(shù)據(jù),在預(yù)定的位置找到這些數(shù)據(jù),并將其轉(zhuǎn)換成顯示所需要的格式。

顯示內(nèi)容的刷新:當(dāng)某顯示內(nèi)容發(fā)生變化時(shí),應(yīng)該定時(shí)刷新。

(5)信息采集模塊,通??砂才旁谥鞒绦蛑?,也可安排在中斷子程序中,一般包括數(shù)字信號(hào)的采集、模擬信號(hào)的采集、多路信號(hào)的采集以及隨機(jī)信號(hào)的采樣。其中,隨機(jī)信號(hào)的采樣一般是指由隨機(jī)信號(hào)產(chǎn)生外部中斷,在該中斷子程序中進(jìn)行采集。

(6)數(shù)據(jù)處理模塊,通??砂才旁谥鞒绦蛑?,也可安排在中斷子程序中,一般包括由數(shù)據(jù)的變化范圍和分辨率確定的數(shù)據(jù)格式的選擇、數(shù)據(jù)格式的轉(zhuǎn)換和數(shù)據(jù)的處理過(guò)程。

(7)控制決策模塊,通常可安排在主程序中,也可安排在中斷子程序中,在信息采集模塊和數(shù)據(jù)處理模塊之后,信號(hào)輸出之前,一般包括:

控制決策模塊的選擇??梢愿鶕?jù)控制對(duì)象的特性和系統(tǒng)控制指標(biāo)的要求來(lái)選擇。常用的算法有PID算法和模糊控制算法等。

控制決策模塊的輸出:用來(lái)對(duì)對(duì)象進(jìn)行邏輯控制(通斷控制、起??刂频?的決策,結(jié)果一般用軟件標(biāo)志來(lái)表示;用來(lái)對(duì)對(duì)象進(jìn)行程度控制(如溫度控制、流量控制等)的決策,結(jié)果應(yīng)轉(zhuǎn)換成D/A器件對(duì)應(yīng)的整形數(shù)據(jù)。

(8)信號(hào)輸出模塊,一般包括輸出信號(hào)的緩沖、異步?jīng)Q策同步捆綁輸出和按狀態(tài)輸出。

(9)通信模塊,一般包括:

波特率的設(shè)置,與信道質(zhì)量有關(guān),通信雙方共同約定。

通信協(xié)議(結(jié)構(gòu))的設(shè)計(jì),由通信內(nèi)容來(lái)決定,一般包括地址碼、幀長(zhǎng)、命令碼和數(shù)據(jù)校驗(yàn)位。

通信緩沖區(qū),其長(zhǎng)度應(yīng)該能夠存放下最長(zhǎng)幀。工作時(shí)和一個(gè)指針進(jìn)行配合,完成一幀數(shù)據(jù)的收發(fā)。

通信過(guò)程,如果采用查詢模式,可一次接收或發(fā)送完一幀內(nèi)容。為提高系統(tǒng)效率,最好采用中斷模式,一次中斷只接收或發(fā)送一個(gè)字節(jié)。

通信命令的執(zhí)行,最好在監(jiān)控模塊中執(zhí)行。

3.系統(tǒng)可靠性設(shè)計(jì)

可靠性是單片機(jī)應(yīng)用系統(tǒng)的重要性能指標(biāo),由多種因素決定。單片機(jī)應(yīng)用系統(tǒng)所在現(xiàn)場(chǎng)的各種干擾是影響可靠性的主要因素。形成干擾的基本要素有三個(gè):

(1)干擾源,指產(chǎn)生干擾的元件、設(shè)備或信號(hào),如雷電、繼電器、電機(jī)、高頻時(shí)鐘等。

(2)傳播路徑,指干擾從干擾源傳播到敏感器件的通路或媒介。典型的干擾傳播路徑是通過(guò)導(dǎo)線的傳導(dǎo)和空間的輻射。

(3)敏感器件,指容易被干擾的對(duì)象。如A/D變換器、D/A變換器、單片機(jī)、數(shù)字IC、弱信號(hào)放大器等。

一般的抗干擾設(shè)計(jì)的基本原則有下述五個(gè)方面。

1)抑制干擾源

這是抗干擾設(shè)計(jì)中應(yīng)該最優(yōu)先考慮和最重要的原則。通常包括:

(1)減小干擾源的du/dt,可通過(guò)在干擾源兩端并聯(lián)電容來(lái)實(shí)現(xiàn)。

(2)減小干擾源的di/dt,可在干擾源回路串聯(lián)電感或電阻以及增加續(xù)流二極管來(lái)實(shí)現(xiàn)。僅加續(xù)流二極管會(huì)使繼電器的斷開(kāi)時(shí)間滯后,增加穩(wěn)壓二極管后繼電器在單位時(shí)間內(nèi)可動(dòng)作更多的次數(shù)。

2)切斷干擾傳播途徑

干擾按傳播途徑可分為傳導(dǎo)干擾和輻射干擾兩類。所謂傳導(dǎo)干擾,是指通過(guò)導(dǎo)線傳播到敏感器件的干擾;輻射干擾是指通過(guò)空間輻射傳播到敏感器件的干擾。

(1)可以通過(guò)在導(dǎo)線上增加濾波器和加隔離光耦來(lái)切斷高頻干擾。

(2)增加干擾源與敏感器件的距離,用地線把它們隔離并在敏感器件上加屏蔽罩。

(3)給單片機(jī)電源加濾波電路或穩(wěn)壓器,以減小電源噪聲對(duì)單片機(jī)的干擾。

(4)當(dāng)單片機(jī)的I/O口用來(lái)控制電機(jī)等噪聲器件時(shí),在I/O口與噪聲源之間應(yīng)加隔離(增加π形濾波電路)。

(5)晶振與單片機(jī)引腳盡量靠近,用地線把時(shí)鐘區(qū)隔離起來(lái),晶振外殼接地并固定。

(6)數(shù)字地與模擬地要分離,最后在一點(diǎn)接于電源地。

(7)單片機(jī)和大功率器件的地線要單獨(dú)接地,以減小相互干擾。大功率器件盡可能放在電路板邊緣等。

3)提高敏感器件的抗干擾性能

提高敏感器件的抗干擾性能可以從敏感器件方面考慮,盡量減少對(duì)干擾噪聲的拾取,以及從不正常狀態(tài)下盡快恢復(fù)。

(1)布線時(shí)盡量減少回路環(huán)的面積,以降低感應(yīng)噪聲。

(2)盡可能縮短高頻元器件之間的連線,設(shè)法減少它們的分布參數(shù)和相互間的電磁干擾。易受干擾的元器件不能相互挨得太近,輸入和輸出元件應(yīng)盡量遠(yuǎn)離。

(3)布線時(shí),電源線和地線要盡量粗,減少環(huán)路電阻。除減少壓降外,更重要的是降低耦合噪聲,同時(shí),使電源線、地線的走向和數(shù)據(jù)傳遞的方向一致,這樣有助于增強(qiáng)抗噪聲能力。布線時(shí)避免90°折線,減少高頻噪聲發(fā)射。

(4)對(duì)于單片機(jī)閑置的I/O接口,不要懸空,要接地或接電源。其它IC的閑置端在不改變系統(tǒng)邏輯的情況下接地或接電源。

(5)對(duì)單片機(jī)使用電源監(jiān)控及看門狗電路,可大幅度提高整個(gè)電路的抗干擾性能。

(6)在速度能滿足要求的前提下,盡量降低單片機(jī)的晶振和選用低速數(shù)字電路。

(7)?IC器件盡量直接焊在電路板上,少用IC插座。

4)采用軟件抗干擾措施

(1)多用查詢代替中斷,把中斷源減到最少。中斷信號(hào)線的長(zhǎng)度應(yīng)不大于0.1米,以防止誤觸發(fā)感應(yīng)觸發(fā)。

(2)A/D轉(zhuǎn)換采用數(shù)字濾波,如平均法、比較平均法等,以防止突發(fā)性干擾。

(3)在單片機(jī)空單元寫上00H,最后放跳轉(zhuǎn)指令到ORG0000H。因干擾程序走飛,可能跳轉(zhuǎn)回去。

(4)開(kāi)機(jī)自檢自診斷,RAM中重要內(nèi)容要分區(qū)存放,經(jīng)常進(jìn)行比較檢查。

(5)表格參數(shù)放在EPROM中,檢驗(yàn)和存于最后單元,以防止EPROM內(nèi)容被修改。

(6)加看門狗,軟件走飛可從頭開(kāi)始。

(7)開(kāi)關(guān)信號(hào)延時(shí)去抖動(dòng)。

(8)通信應(yīng)加奇偶校驗(yàn)或查詢表決比較等措施,防止通信出錯(cuò)。

5)利用其它抗干擾措施

(1)變壓器雙隔離措施。變壓器初級(jí)輸入端串接電容,初、次級(jí)線圈間屏蔽層與初級(jí)間電容中心接點(diǎn)接大地,次級(jí)外屏蔽層接印制板地,這是硬件抗干擾的關(guān)鍵手段。次級(jí)加低通濾波器吸收變壓器產(chǎn)生的浪涌電壓。

(2)通信線用雙絞線,以排除平行互感。

(3)防雷電用光纖隔離最為有效。

(4)A/D轉(zhuǎn)換用隔離放大器或采用現(xiàn)場(chǎng)轉(zhuǎn)換,以減少誤差。

(5)外殼接大地,可解決人身安全及防外界電磁場(chǎng)干擾。

(6)加復(fù)位電壓檢測(cè)電路,以防止復(fù)位不充分CPU就工作,如對(duì)E2PROM的器件復(fù)位不充分會(huì)改變E2PROM的內(nèi)容。

4.系統(tǒng)調(diào)試

單片機(jī)應(yīng)用系統(tǒng)需要先進(jìn)行調(diào)試,然后才能驗(yàn)證所設(shè)計(jì)的硬件和軟件的正確性。調(diào)試時(shí),應(yīng)將硬件和軟件分成幾部分,逐一調(diào)試,各部分均調(diào)試通過(guò)后再進(jìn)行聯(lián)調(diào)。調(diào)試完成后,應(yīng)在實(shí)驗(yàn)室模擬現(xiàn)場(chǎng)條件,對(duì)所設(shè)計(jì)的硬件、軟件進(jìn)行性能測(cè)定?,F(xiàn)場(chǎng)試用時(shí),要對(duì)使用情況做詳細(xì)記錄,在各種可能的情況下都要做實(shí)驗(yàn),寫出詳細(xì)的試用報(bào)告。

6.2.2

數(shù)字溫度測(cè)試儀

1.系統(tǒng)總體方案設(shè)計(jì)

數(shù)字溫度測(cè)試儀的主要功能為檢測(cè)并顯示環(huán)境溫度,當(dāng)溫度超過(guò)設(shè)定的警戒值時(shí)予以報(bào)警。系統(tǒng)性能指標(biāo)如下:

測(cè)溫范圍:-50~110℃。

精度誤差:0.1℃以內(nèi)。

溫度報(bào)警設(shè)置:可設(shè)置溫度的上下限報(bào)警值,超過(guò)最高溫度值和低于最低溫度值引起報(bào)警。

該數(shù)字溫度測(cè)試儀的實(shí)現(xiàn)主要包括5個(gè)關(guān)鍵環(huán)節(jié):主控制器、溫度檢測(cè)部分、顯示部分、電源、鍵盤和報(bào)警電路,如圖6-14所示。

圖6-14數(shù)字溫度測(cè)試系統(tǒng)方框圖

1)主控制器

MSP430單片機(jī)系列具有多種型號(hào),本系統(tǒng)可以采用MSP430F4270單片機(jī)為主控制器。MSP430F4270具有供電電壓低和體積小的特點(diǎn),其中包括32KBFLASH,256字節(jié)RAM,32個(gè)I/O口,56段LCD,SD16位ADC(具有內(nèi)部參考電壓),12位DAC,1個(gè)16位Timer_A(3個(gè)捕獲/比較寄存器),并具有電源檢測(cè)功能,適合便攜手持式產(chǎn)品的設(shè)計(jì)使用。其內(nèi)置的LCD驅(qū)動(dòng)模塊可以直接驅(qū)動(dòng)LCD段式液晶顯示器的顯示。

2)溫度檢測(cè)電路

本系統(tǒng)采用美國(guó)DALLAS半導(dǎo)體公司繼DS1820之后最新推出的一種改進(jìn)型智能溫度傳感芯片DS18B20作為檢測(cè)元件,DS18B20的測(cè)溫范圍為-55~+125℃,精度為9~12位(與數(shù)據(jù)位數(shù)的設(shè)定有關(guān)),缺省值為12位。如果溫度低于0℃,需取反加1,再乘以0.0625才能求出實(shí)際溫度。DS18B20與單片機(jī)以串行方式通信。傳輸協(xié)議要求對(duì)DS18B20進(jìn)行一次操作,包括復(fù)位、發(fā)一條ROM指令、發(fā)一條RAM指令三步。與傳統(tǒng)的熱敏電阻相比,它能夠直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)值讀數(shù)方式,可以分別在93.75μs和750μs內(nèi)完成9位和12位的數(shù)字量。溫度變換功率來(lái)源于數(shù)據(jù)總線,因而使用DS18B20溫度芯片可使系統(tǒng)結(jié)構(gòu)更趨簡(jiǎn)單。

DS18B20溫度傳感器只有三個(gè)引腳,其中,引腳1和引腳3分別是GND和VDD,引腳2是DQ端,作為數(shù)據(jù)的輸入/輸出引腳。當(dāng)給DS18B20加電后,單片機(jī)可以通過(guò)DQ寫入命令,并可讀出含有溫度信息的數(shù)字量。DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的E2PRAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,頭2字節(jié)包含測(cè)得的溫度信息,第3和第4是TH和TL的拷貝,是易失性的,每次上電復(fù)位時(shí)被刷新。而配置寄存器為高速暫存器中的第5個(gè)字節(jié),它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率,DS18B20工作時(shí)按此寄存器中的分辨率將溫度轉(zhuǎn)換為相應(yīng)精度的數(shù)值(見(jiàn)表6-4)。

表6-4DS18B20分辨率的設(shè)置

設(shè)定的分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間就越長(zhǎng)。因此,在實(shí)際應(yīng)用中要在分辨率和轉(zhuǎn)換時(shí)間之間權(quán)衡考慮。

DS18B20完成溫度轉(zhuǎn)換后,就把測(cè)得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較。若T>TH或T<TL,則該器件內(nèi)的報(bào)警標(biāo)值位置位,并對(duì)主機(jī)發(fā)出的報(bào)警搜索命令作出響應(yīng)。因此可用多只DS18B20同時(shí)測(cè)量溫度并進(jìn)行報(bào)警搜索。

在使用DS18B20時(shí),主機(jī)應(yīng)先向DS18B20發(fā)送復(fù)位信號(hào),主機(jī)將數(shù)據(jù)線拉低并保持480~960μs,然后再釋放數(shù)據(jù)線,由上拉電阻拉高15~60μs,最后由DS18B20發(fā)出低電平60~240μs,這樣就完成了復(fù)位操作。

在主機(jī)對(duì)DS18B20寫數(shù)據(jù)時(shí),應(yīng)先將數(shù)據(jù)線拉低1μs以上,再寫入數(shù)據(jù)。待主機(jī)寫入的數(shù)據(jù)變化15~60μs后,DS18B20將對(duì)數(shù)據(jù)線采樣,要求主機(jī)寫入數(shù)據(jù)到DS18B20的保持時(shí)間應(yīng)為60~120μs。2次寫數(shù)據(jù)操作的間隙應(yīng)大于1μs。

3)顯示與報(bào)警電路

顯示電路采用MSP430F4270單片機(jī)內(nèi)置的LCD驅(qū)動(dòng)模塊驅(qū)動(dòng)外部LCD段碼顯示。LCD的4種驅(qū)動(dòng)方式中可選用4MUX方式,這樣可以節(jié)省口線以備它用。

由于采用MSP430F4270內(nèi)部集成的LCD顯示驅(qū)動(dòng)模塊,故LCD顯示非常簡(jiǎn)單,只需在軟件中設(shè)置相應(yīng)的控制寄存器,把顯示代碼送入相應(yīng)的LCD緩存寄存器即可。

報(bào)警電路可采用簡(jiǎn)單的LED發(fā)光二極管報(bào)警,通過(guò)控制P口的輸出電平,可實(shí)現(xiàn)上下限報(bào)警功能。

4)鍵盤接口

根據(jù)該系統(tǒng)功能,可以設(shè)置4個(gè)按鍵。鍵盤可以通過(guò)具有中斷的I/O直接和單片機(jī)連接,并通過(guò)680kΩ的上拉電阻和3.3V電源相連。利用該I/O口的中斷功能,只有有鍵按下時(shí),P1口相應(yīng)的中斷標(biāo)志位才置1,并向CPU申請(qǐng)中斷,這時(shí)CPU才會(huì)在中斷子程序中對(duì)按鍵進(jìn)行處理。

2.系統(tǒng)功能設(shè)計(jì)

1)系統(tǒng)資源配置

MSP430F4570內(nèi)部有32KBFLASH程序存儲(chǔ)器,256個(gè)SRAM和32個(gè)I/O口。可采用C語(yǔ)言編寫程序,無(wú)須對(duì)RAM分配。I/O口分配情況如下:

P1可用于鍵盤接口、DS18B20的接口和上下限報(bào)警控制線;

P5口和P2口與S端口復(fù)用,作為L(zhǎng)CD的段驅(qū)動(dòng)。

2)系統(tǒng)軟件結(jié)構(gòu)分析與模塊設(shè)計(jì)

(1)系統(tǒng)主程序的主要功能:

初始化堆棧、DS18B20、看門狗等;

檢測(cè)鍵盤鍵入溫度上下限值;

溫度的采集與處理;

溫度的顯示;

報(bào)警控制。

主程序流程圖如圖6-15所示。

圖6-15主程序流程圖

3)部分子程序清單

系統(tǒng)程序主要包括主程序、數(shù)據(jù)處理子程序、顯示子程序、鍵盤子程序等。本例中只給出了有關(guān)溫度部分的程序。

//有關(guān)溫度子程序

voidInit_1820(void)

{

//BEEP_IN;

DS18B20_PORT_OUT&=~DQ;

//Open_Close_18b20(1);

}

intRead_Temp_1820(void)

//讀溫度子程序

{

unsignedchartempL,tempH;

inttemp;

signedchardata;

ow_reset();

write_byte(0xcc); //跳過(guò)ROM

write_byte(0x44); //開(kāi)始轉(zhuǎn)換

delay(5); //延遲(255);

_NOP();

ow_reset();

_NOP();

write_byte(0xcc); //跳過(guò)ROM

_NOP();

write_byte(0xbe); //發(fā)出讀命令

tempL=read_byte();

tempH=read_byte();

temp=tempH*256+tempL;

temp=temp*0.625;

data=temp/10;

return(temp);

}

voidwrite_bit(charbitval) //寫一位子程序

{

DQ_OUTPUT;

if(bitval==1)DQ_INPUT;

delay(5);

DQ_INPUT;

}

voidwrite_byte(charval) //寫一個(gè)字節(jié)子程序

{

unsignedchari,temp;

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

{

temp=val>>i;

temp&=0x01;

write_bit(temp);

}

delay(5);

}

unsignedcharread_bit(void) //讀一位子程序

{

unsignedshortinti;

unsignedcharh;

DQ_OUTPUT;

DQ_INPUT;

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

_NOP();

_NOP();

h=DS18B20_PORT_IN;

h&=DQ;

return(h);

}

unsignedcharread_byte(void)//讀一個(gè)字節(jié)子程序

{

unsignedchari;

unsignedcharvalue=0;

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

{

if(read_bit()!=0)value|=0x01<<i;

delay(6);

}

return(value);

}6.2.3

智能瓦斯測(cè)試儀

1.系統(tǒng)總體設(shè)計(jì)

智能瓦斯測(cè)試儀主要實(shí)現(xiàn)可燃?xì)怏wCH4濃度的檢測(cè)與顯示,當(dāng)可燃?xì)怏w濃度超過(guò)所規(guī)定的標(biāo)準(zhǔn)時(shí),能夠報(bào)警提示,并且將采集的信息傳送給總系統(tǒng)監(jiān)控平臺(tái)。該測(cè)試儀實(shí)際上是一個(gè)典型的數(shù)據(jù)采集系統(tǒng),其性能指標(biāo)如下:

甲烷測(cè)量范圍:0~100%(百分比濃度);

甲烷測(cè)量分辨率:1%;

甲烷測(cè)量精度:0.2%;

響應(yīng)時(shí)間:15s。

該測(cè)試儀可以由電源管理控制、數(shù)據(jù)采集、數(shù)據(jù)處理、信息存儲(chǔ)、結(jié)果顯示和報(bào)警控制等部分組成。數(shù)據(jù)采集的對(duì)象是甲烷氣體的濃度,故選用甲烷傳感器進(jìn)行物理量的測(cè)量,同時(shí)選用溫度傳感器采集的現(xiàn)場(chǎng)溫度對(duì)該測(cè)量值進(jìn)行補(bǔ)償。該測(cè)試儀的系統(tǒng)框圖如圖6-16所示。

圖6-16硬件結(jié)構(gòu)框圖

由氣泵吸入的甲烷氣體的濃度信息通過(guò)甲烷傳感器部分的采集,經(jīng)過(guò)信號(hào)調(diào)理電路對(duì)微弱的傳感信號(hào)進(jìn)行調(diào)理放大,送到主控制器進(jìn)行處理。主控制器主要實(shí)現(xiàn)將檢測(cè)到的模擬量通過(guò)A/D轉(zhuǎn)換模塊轉(zhuǎn)換為數(shù)字量,經(jīng)過(guò)數(shù)字處理之后,送入液晶顯示器進(jìn)行顯示、報(bào)警等一系列操作的控制。溫度傳感器主要完成對(duì)環(huán)境溫度的檢測(cè),用于對(duì)甲烷氣體濃度的補(bǔ)償。顯示部分可以完成甲烷氣體濃度的顯示、環(huán)境溫度的顯示以及時(shí)間的顯示。鍵盤部分完成對(duì)一些功能的設(shè)置,如報(bào)警的上下限、時(shí)間的設(shè)置等。

2.硬件系統(tǒng)設(shè)計(jì)

根據(jù)前述總體方案,系統(tǒng)主機(jī)可采用MSP430F149單片機(jī),甲烷傳感器可采用邯鄲平安機(jī)電研究所生產(chǎn)的JZY4-13礦用型催化燃燒式傳感器。溫度的檢測(cè)可采用常用的DS18B20。因?yàn)椴粌H顯示當(dāng)前的時(shí)間,而且還要顯示當(dāng)前的濃度,所以顯示部分可采用點(diǎn)陣液晶顯示進(jìn)行濃度顯示。報(bào)警裝置可以選用簡(jiǎn)單的蜂鳴器和發(fā)光二極管進(jìn)行濃度超限聲光報(bào)警。鍵盤部分可以設(shè)置4個(gè)按鍵,分別用作功能選擇與確定,設(shè)置上行、下行顯示和控制電源開(kāi)關(guān)。

1)主控制器

本系統(tǒng)采用TI公司的MSP430F149單片機(jī),其內(nèi)部資源豐富,存儲(chǔ)容量大,有60KB+256B的閃速存儲(chǔ)器以及2KB的RAM,共64個(gè)引腳,采用方形扁平封裝(QFP)。MSP430F149單片機(jī)片內(nèi)自帶12位A/D轉(zhuǎn)換器,轉(zhuǎn)換精度高,噪聲小,轉(zhuǎn)換速度快,這樣就可以避免增加額外的A/D轉(zhuǎn)換芯片,即避免使用過(guò)多的I/O口,以達(dá)到降低成本,縮小體積的目的。單片機(jī)片內(nèi)的12位A/D轉(zhuǎn)換器在2.5V滿量程狀態(tài)下,最小分辨電壓U=2.5V/4096=0.6mV,若使用內(nèi)部時(shí)鐘,轉(zhuǎn)化時(shí)間最大為3.51μs,而使用外部時(shí)鐘轉(zhuǎn)換時(shí)間

=?13?×?分頻系數(shù)

×?外部時(shí)鐘周期。單片機(jī)將A/D轉(zhuǎn)換的數(shù)據(jù)經(jīng)過(guò)數(shù)字濾波后,一方面送入存儲(chǔ)器,另一方面送到液晶屏顯示。

MSP430單片機(jī)片內(nèi)A/D基準(zhǔn)有片內(nèi)基準(zhǔn)和片外基準(zhǔn)兩種選擇。雖然選用片內(nèi)基準(zhǔn)就可以不外接基準(zhǔn),減小電路的復(fù)雜程度,但因?yàn)樗璧霓D(zhuǎn)換精度較高,而片內(nèi)基準(zhǔn)的溫度系數(shù)較大(100ppm/℃),且大于12位A/D的分辨率,所以可以選用精度比較高的片外基準(zhǔn)電壓源MC1403。它的輸入電壓VIN在4.5~40V之間,輸出電壓VOUT=2.5V,最大溫度系數(shù)為40ppm/℃,典型值為10ppm/℃,可達(dá)到設(shè)計(jì)要求。

甲烷氣體的濃度經(jīng)過(guò)傳感器采集之后,通過(guò)信號(hào)調(diào)理轉(zhuǎn)換為0~2.5V的電壓,可直接送入MSP430F149單片機(jī)的A/D輸入通道P6口MSP430F149單片機(jī)的A/D轉(zhuǎn)換模塊將輸入的模擬量轉(zhuǎn)化為相應(yīng)的數(shù)字量,通過(guò)采集到的溫度信息,經(jīng)補(bǔ)償修正處理之后,可以控制液晶顯示器顯示濃度值。同時(shí),單片機(jī)還采集時(shí)間信息,對(duì)當(dāng)前濃度對(duì)應(yīng)的時(shí)間信息進(jìn)行同時(shí)顯示,并可通過(guò)報(bào)警裝置實(shí)現(xiàn)超濃度報(bào)警。

2)傳感器電路

系統(tǒng)可采用邯鄲平安機(jī)電研究所生產(chǎn)的JZY4-13礦用型催化燃燒式傳感器。該傳感器由兩個(gè)相同的鉑絲電阻構(gòu)成一端作測(cè)量用,另一端密封用作溫度濕度補(bǔ)償,電路采用橋式連接,有效地提高了測(cè)量的線性度。該型號(hào)傳感器具有高精度高線性度特點(diǎn),其輸出經(jīng)過(guò)儀器調(diào)理電路可產(chǎn)生0~2.5V的標(biāo)準(zhǔn)信號(hào),可滿足MSP430自帶12位ADC的需要。外界氣體濃度與輸出電壓之間基本呈線性關(guān)系,只需簡(jiǎn)單補(bǔ)償,同時(shí)在氣體標(biāo)定時(shí)較好地解決了精度與量程之間的矛盾。

儀器調(diào)理電路部分可采用電源電壓為3.3V的ICL27L2和ICL27L4低功耗運(yùn)放,以便能與整個(gè)系統(tǒng)的低功耗特性相匹配。橋式變送電路如圖6-17所示。

圖6-17橋式變送電路

3)溫度檢測(cè)電路

由于溫度檢測(cè)主要用于對(duì)測(cè)量結(jié)果進(jìn)行修正,對(duì)于提高氣體檢測(cè)精度具有十分重要的意義,因此,可以選用具有功耗低、性能穩(wěn)定、轉(zhuǎn)換精度高、外接電路簡(jiǎn)單等優(yōu)點(diǎn)的集成溫度傳感器DS18B20對(duì)

溫馨提示

  • 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)論