第12章應(yīng)用案例設(shè)計(jì)_第1頁(yè)
第12章應(yīng)用案例設(shè)計(jì)_第2頁(yè)
第12章應(yīng)用案例設(shè)計(jì)_第3頁(yè)
第12章應(yīng)用案例設(shè)計(jì)_第4頁(yè)
第12章應(yīng)用案例設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩123頁(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)介

1、1第第12章章 單片機(jī)的各種控制與單片機(jī)的各種控制與 檢測(cè)應(yīng)用設(shè)計(jì)檢測(cè)應(yīng)用設(shè)計(jì) 介紹各種常用的單片機(jī)測(cè)控應(yīng)用設(shè)計(jì)案例,通過(guò)案例使讀介紹各種常用的單片機(jī)測(cè)控應(yīng)用設(shè)計(jì)案例,通過(guò)案例使讀者了解單片機(jī)系統(tǒng)的的各種常見(jiàn)的應(yīng)用設(shè)計(jì)。者了解單片機(jī)系統(tǒng)的的各種常見(jiàn)的應(yīng)用設(shè)計(jì)。12.1 單片機(jī)控制步進(jìn)電機(jī)的設(shè)計(jì)單片機(jī)控制步進(jìn)電機(jī)的設(shè)計(jì) 步進(jìn)電機(jī)是步進(jìn)電機(jī)是將脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開(kāi)環(huán)控制將脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開(kāi)環(huán)控制元件元件。 非超載的情況下,電機(jī)轉(zhuǎn)速、停止位置非超載的情況下,電機(jī)轉(zhuǎn)速、停止位置只取決于脈沖信號(hào)只取決于脈沖信號(hào)的頻率和脈沖數(shù),而不受負(fù)載變化的影響,的頻率和脈沖數(shù),而不受負(fù)載變化

2、的影響,給電機(jī)加一脈沖信給電機(jī)加一脈沖信號(hào),電機(jī)則轉(zhuǎn)過(guò)一個(gè)步距角。因而步進(jìn)電機(jī)號(hào),電機(jī)則轉(zhuǎn)過(guò)一個(gè)步距角。因而步進(jìn)電機(jī)只有周期性誤差而只有周期性誤差而無(wú)累積誤差無(wú)累積誤差,在,在速度、位置速度、位置等控制領(lǐng)域有較為廣泛的應(yīng)用。等控制領(lǐng)域有較為廣泛的應(yīng)用。2312.1.1 控制步進(jìn)電機(jī)的工作原理控制步進(jìn)電機(jī)的工作原理 驅(qū)動(dòng)步進(jìn)電機(jī)由單片機(jī)通過(guò)對(duì)每組線圈中的電流的順序切換驅(qū)動(dòng)步進(jìn)電機(jī)由單片機(jī)通過(guò)對(duì)每組線圈中的電流的順序切換來(lái)使電機(jī)作步進(jìn)式旋轉(zhuǎn),切換是單片機(jī)輸出脈沖信號(hào)來(lái)實(shí)現(xiàn)。來(lái)使電機(jī)作步進(jìn)式旋轉(zhuǎn),切換是單片機(jī)輸出脈沖信號(hào)來(lái)實(shí)現(xiàn)。 調(diào)節(jié)脈沖信號(hào)頻率就可改變步進(jìn)電機(jī)轉(zhuǎn)速;改變各相脈沖先調(diào)節(jié)脈沖信號(hào)頻率就

3、可改變步進(jìn)電機(jī)轉(zhuǎn)速;改變各相脈沖先后順序,就可改變電機(jī)旋轉(zhuǎn)方向。后順序,就可改變電機(jī)旋轉(zhuǎn)方向。 步進(jìn)電機(jī)驅(qū)動(dòng)可采用步進(jìn)電機(jī)驅(qū)動(dòng)可采用雙四拍雙四拍(ABABBCBCCDCDDADAABAB)方式,)方式,也可采用也可采用單四拍單四拍(A AB BC CD DA A)方式。為使步進(jìn)電機(jī)旋轉(zhuǎn)平)方式。為使步進(jìn)電機(jī)旋轉(zhuǎn)平穩(wěn),還可采用單、雙八拍方式(穩(wěn),還可采用單、雙八拍方式(A AABABB BBCBCC CCDCDD DDADAA A)。各種工作方式時(shí)序)。各種工作方式時(shí)序見(jiàn)見(jiàn)圖圖12-112-1。 4 圖圖12-1 各種工作方式時(shí)序圖各種工作方式時(shí)序圖5 圖圖12-112-1脈沖信號(hào)是高電平有效,

4、但實(shí)際控制時(shí)公共端是接脈沖信號(hào)是高電平有效,但實(shí)際控制時(shí)公共端是接在在VCCVCC上,所以實(shí)際控制脈沖是低電平有效。上,所以實(shí)際控制脈沖是低電平有效。12.1.2 電路設(shè)計(jì)與編程電路設(shè)計(jì)與編程 【例【例12-1】單片機(jī)對(duì)步進(jìn)電機(jī)控制的原理電路見(jiàn)單片機(jī)對(duì)步進(jìn)電機(jī)控制的原理電路見(jiàn)圖圖12-1。編。編寫(xiě)程序,用四路寫(xiě)程序,用四路I/O口輸出實(shí)現(xiàn)環(huán)形脈沖分配,控制步進(jìn)電機(jī)按口輸出實(shí)現(xiàn)環(huán)形脈沖分配,控制步進(jìn)電機(jī)按固定方向連續(xù)轉(zhuǎn)動(dòng)。同時(shí),通過(guò)固定方向連續(xù)轉(zhuǎn)動(dòng)。同時(shí),通過(guò)“正轉(zhuǎn)正轉(zhuǎn)”和和“反轉(zhuǎn)反轉(zhuǎn)”兩個(gè)按鍵兩個(gè)按鍵來(lái)控制電機(jī)的正轉(zhuǎn)與反轉(zhuǎn)。按下來(lái)控制電機(jī)的正轉(zhuǎn)與反轉(zhuǎn)。按下“正轉(zhuǎn)正轉(zhuǎn)”按鍵,步進(jìn)電機(jī)正轉(zhuǎn)按鍵,步

5、進(jìn)電機(jī)正轉(zhuǎn);按下;按下“反轉(zhuǎn)反轉(zhuǎn)”按鍵,步進(jìn)電機(jī)反轉(zhuǎn);松開(kāi)按鍵,電機(jī)停止轉(zhuǎn)按鍵,步進(jìn)電機(jī)反轉(zhuǎn);松開(kāi)按鍵,電機(jī)停止轉(zhuǎn)動(dòng)。動(dòng)。 ULN2003是高耐壓、大電流達(dá)林頓陣列系列產(chǎn)品,是高耐壓、大電流達(dá)林頓陣列系列產(chǎn)品,7個(gè)個(gè)NPN達(dá)林頓管組成。多用于單片機(jī)、智能儀表、達(dá)林頓管組成。多用于單片機(jī)、智能儀表、PLC等控制電路等控制電路6圖圖12-2 單片機(jī)控制步進(jìn)電機(jī)接口電路單片機(jī)控制步進(jìn)電機(jī)接口電路7中。在中。在5V5V電壓下能與電壓下能與TTLTTL和和CMOSCMOS電路直接相連電路直接相連, ,可直接驅(qū)動(dòng)繼可直接驅(qū)動(dòng)繼電器等負(fù)載。具有電流增益高、工作電壓高、溫度范圍寬、電器等負(fù)載。具有電流增益高、

6、工作電壓高、溫度范圍寬、帶負(fù)載能力強(qiáng)等特點(diǎn)。帶負(fù)載能力強(qiáng)等特點(diǎn)。輸入輸入5V5V的的TTLTTL電平,電平,輸出可達(dá)輸出可達(dá)500mA/50V500mA/50V。適于各類高速大功率驅(qū)動(dòng)的系統(tǒng)。適于各類高速大功率驅(qū)動(dòng)的系統(tǒng)。參考程序參考程序:#include reg51.h#include reg51.h#define uchar unsigned char#define uchar unsigned char#define uint unsigned int#define uint unsigned int#define out P2#define out P2sbit pos=P00;sbi

7、t pos=P00;/定義檢測(cè)正轉(zhuǎn)控制位定義檢測(cè)正轉(zhuǎn)控制位P0.0P0.0sbit neg=P01;sbit neg=P01;/定義檢測(cè)反轉(zhuǎn)控制位定義檢測(cè)反轉(zhuǎn)控制位P0.1P0.1void delayms(uint);void delayms(uint);8uchar code turn=0 x02,0 x06,0 x04,0 x0c,0 x08,0 x09,0 x01,0 x03;uchar code turn=0 x02,0 x06,0 x04,0 x0c,0 x08,0 x09,0 x01,0 x03; / /步進(jìn)脈沖數(shù)組步進(jìn)脈沖數(shù)組void main(void)void main(vo

8、id) uchar i;uchar i;out=0 x03;out=0 x03;while(1)while(1) if(!pos) /if(!pos) /如果正轉(zhuǎn)按鍵按下如果正轉(zhuǎn)按鍵按下 i=i 8?i+1: 0; /i=i 8?i+1: 0; /如果如果i8i 0 ? i-1: 7;i = i 0 ? i-1: 7;out=turni;out=turni;delayms(50);delayms(50); void delayms(uint j)void delayms(uint j)/函數(shù)功能:延時(shí)函數(shù)功能:延時(shí) uchar i;uchar i;for(;j0;j-)for(;j0;j-)

9、i=250;i=250; while(-i);while(-i); i=249;i=249; while(-i);while(-i); 1012.2 單片機(jī)控制直流電機(jī)單片機(jī)控制直流電機(jī) 直流電機(jī)多用在直流電機(jī)多用在無(wú)無(wú)交流電源、方便移動(dòng)場(chǎng)合,具有低速大交流電源、方便移動(dòng)場(chǎng)合,具有低速大力矩等特點(diǎn)。如何用單片機(jī)控制直流電機(jī)。力矩等特點(diǎn)。如何用單片機(jī)控制直流電機(jī)。12.2.1 控制直流電機(jī)的工作原理控制直流電機(jī)的工作原理 對(duì)直流電機(jī)可精確控制其對(duì)直流電機(jī)可精確控制其旋轉(zhuǎn)速度旋轉(zhuǎn)速度或或轉(zhuǎn)矩轉(zhuǎn)矩,通過(guò)兩個(gè)磁場(chǎng),通過(guò)兩個(gè)磁場(chǎng)相互作用產(chǎn)生旋轉(zhuǎn)。結(jié)構(gòu)相互作用產(chǎn)生旋轉(zhuǎn)。結(jié)構(gòu)見(jiàn)見(jiàn)圖圖12-3(a),定子裝設(shè)

10、一對(duì)直流,定子裝設(shè)一對(duì)直流勵(lì)磁的靜止主磁極勵(lì)磁的靜止主磁極N和和S,在轉(zhuǎn)子上裝設(shè)電樞鐵心。定子與轉(zhuǎn)子,在轉(zhuǎn)子上裝設(shè)電樞鐵心。定子與轉(zhuǎn)子間有一氣隙。在電樞鐵心上放置了由兩根導(dǎo)體連成的電樞線圈,間有一氣隙。在電樞鐵心上放置了由兩根導(dǎo)體連成的電樞線圈,線圈首端和末端分別連到兩個(gè)圓弧形銅片上,此銅片稱為線圈首端和末端分別連到兩個(gè)圓弧形銅片上,此銅片稱為換向換向片片。由換向片構(gòu)成的整體稱為換向器。由換向片構(gòu)成的整體稱為換向器。11 換向器固定在轉(zhuǎn)軸上,換向片與轉(zhuǎn)軸間互相絕緣。在換向換向器固定在轉(zhuǎn)軸上,換向片與轉(zhuǎn)軸間互相絕緣。在換向片上放置一對(duì)固定不動(dòng)的電刷片上放置一對(duì)固定不動(dòng)的電刷B1B1和和B2B2,

11、當(dāng)電樞旋轉(zhuǎn)時(shí),電樞,當(dāng)電樞旋轉(zhuǎn)時(shí),電樞線圈通過(guò)換向片和電刷與外電路接通。線圈通過(guò)換向片和電刷與外電路接通。 定子通過(guò)永磁體或受激勵(lì)電磁鐵產(chǎn)生一固定磁場(chǎng),由于轉(zhuǎn)定子通過(guò)永磁體或受激勵(lì)電磁鐵產(chǎn)生一固定磁場(chǎng),由于轉(zhuǎn)子由一系列電磁體構(gòu)成,當(dāng)電流通過(guò)其中一個(gè)繞組時(shí)會(huì)產(chǎn)生子由一系列電磁體構(gòu)成,當(dāng)電流通過(guò)其中一個(gè)繞組時(shí)會(huì)產(chǎn)生一個(gè)磁場(chǎng)。一個(gè)磁場(chǎng)。 對(duì)有刷直流電機(jī),轉(zhuǎn)子上換向器和定子電刷在電機(jī)旋轉(zhuǎn)時(shí)對(duì)有刷直流電機(jī),轉(zhuǎn)子上換向器和定子電刷在電機(jī)旋轉(zhuǎn)時(shí)為每個(gè)繞組供給電能。通電轉(zhuǎn)子繞組與定子磁體有相反極性,為每個(gè)繞組供給電能。通電轉(zhuǎn)子繞組與定子磁體有相反極性,因而相互吸引,使轉(zhuǎn)子轉(zhuǎn)動(dòng)至與定子磁場(chǎng)對(duì)準(zhǔn)的位置。當(dāng)轉(zhuǎn)因而相

12、互吸引,使轉(zhuǎn)子轉(zhuǎn)動(dòng)至與定子磁場(chǎng)對(duì)準(zhǔn)的位置。當(dāng)轉(zhuǎn)子到達(dá)對(duì)準(zhǔn)位置時(shí),電刷通過(guò)換向器為下一組繞組供電,從子到達(dá)對(duì)準(zhǔn)位置時(shí),電刷通過(guò)換向器為下一組繞組供電,從而使轉(zhuǎn)子維持旋轉(zhuǎn)運(yùn)動(dòng)而使轉(zhuǎn)子維持旋轉(zhuǎn)運(yùn)動(dòng),見(jiàn),見(jiàn)圖圖12-312-3(b b)。12(a a)有刷直流電機(jī)結(jié)構(gòu)示意圖)有刷直流電機(jī)結(jié)構(gòu)示意圖(i i)導(dǎo)體)導(dǎo)體adad處于處于N N極下極下 (iiii)導(dǎo)體)導(dǎo)體adad處于處于S S極下極下(b b)有刷直流電機(jī)工作示意圖)有刷直流電機(jī)工作示意圖圖圖12-312-3 直流電機(jī)工作示意圖直流電機(jī)工作示意圖 13 直流電機(jī)直流電機(jī)轉(zhuǎn)速轉(zhuǎn)速與施加與施加電壓電壓成正比,成正比,轉(zhuǎn)矩轉(zhuǎn)矩與與電流電流成正

13、比。成正比。由于必須在工作期間改變直流電機(jī)的速度,直流電機(jī)控制是由于必須在工作期間改變直流電機(jī)的速度,直流電機(jī)控制是一較困難問(wèn)題。直流電機(jī)高效運(yùn)行的常見(jiàn)方法是施加一個(gè)一較困難問(wèn)題。直流電機(jī)高效運(yùn)行的常見(jiàn)方法是施加一個(gè) PWMPWM(脈寬調(diào)制)脈沖波,其占空比對(duì)應(yīng)于所需速度。(脈寬調(diào)制)脈沖波,其占空比對(duì)應(yīng)于所需速度。電機(jī)電機(jī)起到了一個(gè)低通濾波器作用,起到了一個(gè)低通濾波器作用,PWMPWM信號(hào)相對(duì)容易產(chǎn)生,這種信號(hào)相對(duì)容易產(chǎn)生,這種驅(qū)動(dòng)方式使用更為廣泛。驅(qū)動(dòng)方式使用更為廣泛。12.2.2 電路設(shè)計(jì)與編程電路設(shè)計(jì)與編程 【例【例12-212-2】原理電路原理電路見(jiàn)見(jiàn)圖圖12-412-4。使用單片機(jī)

14、兩個(gè)。使用單片機(jī)兩個(gè)I/OI/O腳控制腳控制直流電機(jī)轉(zhuǎn)速和旋轉(zhuǎn)方向。其中直流電機(jī)轉(zhuǎn)速和旋轉(zhuǎn)方向。其中P3.7P3.7腳腳輸出輸出PWMPWM信號(hào)控制直流信號(hào)控制直流電機(jī)轉(zhuǎn)速;電機(jī)轉(zhuǎn)速;P3.6P3.6腳腳控制直流電機(jī)旋轉(zhuǎn)方向??刂浦绷麟姍C(jī)旋轉(zhuǎn)方向。14圖圖12-412-4 單片機(jī)控制直流電機(jī)的接口電路單片機(jī)控制直流電機(jī)的接口電路 當(dāng)當(dāng)P3.6=1P3.6=1時(shí),時(shí),P3.7P3.7發(fā)送發(fā)送PWMPWM波,直流電機(jī)正轉(zhuǎn)。且可通過(guò)波,直流電機(jī)正轉(zhuǎn)。且可通過(guò)“INCINC”和和“DECDEC”兩個(gè)按鍵來(lái)增大和減少直流電機(jī)轉(zhuǎn)速。反兩個(gè)按鍵來(lái)增大和減少直流電機(jī)轉(zhuǎn)速。反之,之,P3.6=0P3.6=0時(shí),

15、時(shí),P3.7P3.7發(fā)送發(fā)送PWMPWM信號(hào),直流電機(jī)反轉(zhuǎn)。信號(hào),直流電機(jī)反轉(zhuǎn)。 因此,增大和減小電機(jī)轉(zhuǎn)速,實(shí)際上是通過(guò)按下因此,增大和減小電機(jī)轉(zhuǎn)速,實(shí)際上是通過(guò)按下 “INCINC”或或“DECDEC”按鍵來(lái)改變輸出按鍵來(lái)改變輸出PWMPWM信號(hào)占空比,控制直流信號(hào)占空比,控制直流電機(jī)轉(zhuǎn)速。圖電機(jī)轉(zhuǎn)速。圖12-412-4中驅(qū)動(dòng)電路使用了中驅(qū)動(dòng)電路使用了NPNNPN低頻、低噪聲小功率低頻、低噪聲小功率達(dá)林頓管達(dá)林頓管 2SC2547 2SC2547。 參考程序如下:參考程序如下:1516#include reg51.h#include reg51.h#include intrins.h#inc

16、lude intrins.h#define uchar unsigned char#define uchar unsigned char#define uint unsigned int #define uint unsigned int sbit INC=P34;sbit INC=P34;sbit DEC=P35;sbit DEC=P35;sbit DIR=P36;sbit DIR=P36; sbit PWM=P37;sbit PWM=P37;void delay(uint);void delay(uint);int PWM= 900;int PWM= 900;void main(void)

17、void main(void) DIR=1;DIR=1;while(1)while(1) if(!INC)if(!INC)PWM=PWM0 ? PWM-1 : 0;/PWM=PWM0 ? PWM-1 : 0;/如果如果PWM0PWM0,則,則PWM=PWM-1PWM=PWM-1;否則;否則PWM=0PWM=01712.3 電機(jī)轉(zhuǎn)速測(cè)量電機(jī)轉(zhuǎn)速測(cè)量12.3.1 12.3.1 電機(jī)轉(zhuǎn)速測(cè)量的工作原理電機(jī)轉(zhuǎn)速測(cè)量的工作原理 用光電管、單片機(jī)及用光電管、單片機(jī)及LEDLED數(shù)碼管可測(cè)量直流電機(jī)轉(zhuǎn)速并顯示。數(shù)碼管可測(cè)量直流電機(jī)轉(zhuǎn)速并顯示。 光電對(duì)管光電對(duì)管,也稱,也稱光電開(kāi)關(guān)光電開(kāi)關(guān),內(nèi)部結(jié)構(gòu)就是一發(fā)光

18、二極管和一,內(nèi)部結(jié)構(gòu)就是一發(fā)光二極管和一個(gè)光敏三極管,分為個(gè)光敏三極管,分為反射式反射式和和直射式直射式,工作原理都是光電轉(zhuǎn)化,工作原理都是光電轉(zhuǎn)化,即通過(guò)集聚光線來(lái)控制光敏三極管的導(dǎo)通與截止。即通過(guò)集聚光線來(lái)控制光敏三極管的導(dǎo)通與截止。 因此,測(cè)量電機(jī)轉(zhuǎn)速實(shí)質(zhì)是利用光電對(duì)管對(duì)因此,測(cè)量電機(jī)轉(zhuǎn)速實(shí)質(zhì)是利用光電對(duì)管對(duì)直流電機(jī)葉片底直流電機(jī)葉片底部的白色小帶部的白色小帶進(jìn)行檢測(cè),當(dāng)進(jìn)行檢測(cè),當(dāng)檢測(cè)到白色小帶時(shí)檢測(cè)到白色小帶時(shí)將產(chǎn)生一個(gè)將產(chǎn)生一個(gè)脈沖信脈沖信號(hào)號(hào)。電機(jī)轉(zhuǎn)一圈對(duì)應(yīng)一個(gè)脈沖,然后對(duì)脈沖信號(hào)放大并進(jìn)行計(jì)數(shù),。電機(jī)轉(zhuǎn)一圈對(duì)應(yīng)一個(gè)脈沖,然后對(duì)脈沖信號(hào)放大并進(jìn)行計(jì)數(shù),計(jì)算單位時(shí)間內(nèi)測(cè)得的脈沖數(shù),

19、也就測(cè)出電機(jī)轉(zhuǎn)速,并送計(jì)算單位時(shí)間內(nèi)測(cè)得的脈沖數(shù),也就測(cè)出電機(jī)轉(zhuǎn)速,并送LEDLED數(shù)數(shù)碼管顯示。碼管顯示。1812.3.2 12.3.2 電路設(shè)計(jì)與編程電路設(shè)計(jì)與編程 【例【例12-312-3】測(cè)量電機(jī)轉(zhuǎn)速電路見(jiàn)測(cè)量電機(jī)轉(zhuǎn)速電路見(jiàn)圖圖12-512-5。Z-OPTOCOULER-Z-OPTOCOULER-NPNNPN為光電管,電機(jī)旋轉(zhuǎn)時(shí),使光電管輸出脈沖信號(hào),然后脈為光電管,電機(jī)旋轉(zhuǎn)時(shí),使光電管輸出脈沖信號(hào),然后脈沖信號(hào)經(jīng)過(guò)放大,并對(duì)其計(jì)數(shù),經(jīng)計(jì)算,把轉(zhuǎn)速數(shù)據(jù)送到?jīng)_信號(hào)經(jīng)過(guò)放大,并對(duì)其計(jì)數(shù),經(jīng)計(jì)算,把轉(zhuǎn)速數(shù)據(jù)送到LEDLED數(shù)碼管顯示。數(shù)碼管顯示。 模擬直流電機(jī)轉(zhuǎn)速脈沖由數(shù)字時(shí)鐘發(fā)生器產(chǎn)生,在

20、電路中模擬直流電機(jī)轉(zhuǎn)速脈沖由數(shù)字時(shí)鐘發(fā)生器產(chǎn)生,在電路中添加數(shù)字時(shí)鐘發(fā)生器方法是,點(diǎn)擊圖添加數(shù)字時(shí)鐘發(fā)生器方法是,點(diǎn)擊圖4-2中左側(cè)工具箱中的圖中左側(cè)工具箱中的圖標(biāo)標(biāo) ,出現(xiàn)選擇菜單,選擇,出現(xiàn)選擇菜單,選擇“DCLOCK”項(xiàng),然后把其放入原項(xiàng),然后把其放入原理圖編輯窗口中進(jìn)行連線。鼠標(biāo)右鍵單擊理圖編輯窗口中進(jìn)行連線。鼠標(biāo)右鍵單擊 “DCLOCK”圖標(biāo),圖標(biāo),出現(xiàn)屬性設(shè)置窗口,選擇出現(xiàn)屬性設(shè)置窗口,選擇“數(shù)字類型數(shù)字類型”欄中的欄中的“時(shí)鐘時(shí)鐘”項(xiàng),項(xiàng),在右面的在右面的“時(shí)間時(shí)間”欄中,手動(dòng)修改輸出的數(shù)字時(shí)鐘脈沖的頻欄中,手動(dòng)修改輸出的數(shù)字時(shí)鐘脈沖的頻率,這相當(dāng)于改變電機(jī)轉(zhuǎn)速。率,這相當(dāng)于改變

21、電機(jī)轉(zhuǎn)速。19if(!DEC)if(!DEC)PWM=PWM1000?PWM+1:1000; /PWM=PWM1000?PWM+1:1000; /如如PWM1000PWM0;j-)for(;j0;j-) _nop_();_nop_(); 20圖圖12-5 測(cè)量電機(jī)轉(zhuǎn)速的原理電路與仿真測(cè)量電機(jī)轉(zhuǎn)速的原理電路與仿真21 仿真運(yùn)行后,電機(jī)轉(zhuǎn)速(即每秒計(jì)得的脈沖數(shù))顯示在仿真運(yùn)行后,電機(jī)轉(zhuǎn)速(即每秒計(jì)得的脈沖數(shù))顯示在LED數(shù)碼管上。在手動(dòng)設(shè)置數(shù)字時(shí)鐘頻率時(shí),選擇數(shù)碼管上。在手動(dòng)設(shè)置數(shù)字時(shí)鐘頻率時(shí),選擇“600”,經(jīng)過(guò)單片機(jī)測(cè)得的轉(zhuǎn)數(shù)值(轉(zhuǎn)數(shù)經(jīng)過(guò)單片機(jī)測(cè)得的轉(zhuǎn)數(shù)值(轉(zhuǎn)數(shù)/秒)在數(shù)碼管上顯示,與秒)在數(shù)

22、碼管上顯示,與設(shè)置的數(shù)字脈沖頻率相一致。設(shè)置的數(shù)字脈沖頻率相一致。參考程序如下。參考程序如下。#include reg51.h#include reg51.h#include intrins.h#include intrins.h#define uchar unsigned char#define uchar unsigned char#define uint unsigned int#define uint unsigned int#define out P0#define out P0uchar code uchar code seg=0 xc0,0 xf9,0 xa4,0 xb0,0 x

23、99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x01;seg=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x01;22int i=0;int i=0; void main(void)void main(void) int j;int j;TMOD=0 x15; TMOD=0 x15; / T0/ T0方式方式1 1計(jì)數(shù),計(jì)數(shù),T1T1方式方式1 1定時(shí)定時(shí)TH0=0;TH0=0;/ T0/ T0計(jì)數(shù)器清零計(jì)數(shù)器清零TH1=0 x3C;TH1=0 x3C;/ 12MHz/ 12MHz晶振,晶振

24、,T1T1定時(shí)定時(shí)50ms50msTL1=0 xB0;TL1=0 xB0;TR0=1;TR0=1;/ / 啟動(dòng)啟動(dòng)T0T0計(jì)數(shù)器計(jì)數(shù)器TR1=1;TR1=1;/ / 啟動(dòng)啟動(dòng)T1T1IE=0 x88;IE=0 x88;/ / 允許允許T1T1中斷和總中斷允許中斷和總中斷允許while(1)while(1) P2=0 x00; P2=0 x00; / / 輸出百位顯示值輸出百位顯示值out=segi/100;out=segi/100;P2=0 x02;P2=0 x02;for(j=0;j100;j+);for(j=0;j100;j+);P2=0 x00;P2=0 x00;out=segi%100

25、/10;out=segi%100/10;/ / 輸出十位顯示值輸出十位顯示值23P2=0 x04;P2=0 x04; for(j=0;j100;j+);for(j=0;j100;j+); P2=0 x00;P2=0 x00;out=segi%10;out=segi%10;/ / 輸出個(gè)位顯示值輸出個(gè)位顯示值P2=0 x08;P2=0 x08;for(j=0;j100;j+);for(j=0;j100;j+); void Timer1_ISR() interrupt 3 / T1void Timer1_ISR() interrupt 3 / T1中斷程序,產(chǎn)生中斷程序,產(chǎn)生50ms 50ms 定

26、時(shí)定時(shí) static char j = 0;static char j = 0;TH1=0 x3C;TH1=0 x3C;/ / 重設(shè)定時(shí)器值,重設(shè)定時(shí)器值,50ms 50ms 定時(shí),定時(shí),12MHz 12MHz 晶振晶振TL1=0 xB0;TL1=0 xB0;if(+j = 20)if(+j = 20) / / 是否中斷是否中斷2020次,即次,即50ms50ms2020次次 = 1s = 1s j=0;j=0;i=(TH0 8)|TH00;i=(TH0 8)|TH00;/ 1s/ 1s內(nèi)的計(jì)數(shù)值即為電機(jī)轉(zhuǎn)動(dòng)速度內(nèi)的計(jì)數(shù)值即為電機(jī)轉(zhuǎn)動(dòng)速度, ,單位:轉(zhuǎn)單位:轉(zhuǎn)/ /秒秒TH0=0;TH0=0;

27、 / T0 / T0清零清零TL0=0;TL0=0; 2412.4 頻率計(jì)的制作頻率計(jì)的制作12.4.1 工作原理工作原理 利用單片機(jī)定時(shí)器利用單片機(jī)定時(shí)器/計(jì)數(shù)器可實(shí)現(xiàn)信號(hào)頻率測(cè)量。頻率測(cè)量計(jì)數(shù)器可實(shí)現(xiàn)信號(hào)頻率測(cè)量。頻率測(cè)量有有測(cè)頻法測(cè)頻法和和測(cè)周法測(cè)周法兩種。兩種。測(cè)頻法測(cè)頻法利用外部電平變化引發(fā)的外利用外部電平變化引發(fā)的外部中斷,測(cè)算部中斷,測(cè)算1s內(nèi)出現(xiàn)的次數(shù),從而實(shí)現(xiàn)對(duì)頻率測(cè)內(nèi)出現(xiàn)的次數(shù),從而實(shí)現(xiàn)對(duì)頻率測(cè)量量;測(cè)周測(cè)周法法是通過(guò)測(cè)算某兩次電平變化引發(fā)的中斷間的時(shí)間,再求倒是通過(guò)測(cè)算某兩次電平變化引發(fā)的中斷間的時(shí)間,再求倒數(shù),從而實(shí)現(xiàn)對(duì)頻率測(cè)定??傊瑴y(cè)頻法是直接根據(jù)定義來(lái)數(shù),從而實(shí)現(xiàn)

28、對(duì)頻率測(cè)定。總之,測(cè)頻法是直接根據(jù)定義來(lái)測(cè)定頻率,測(cè)周法是通過(guò)測(cè)定周期間接測(cè)定頻率。理論上,測(cè)定頻率,測(cè)周法是通過(guò)測(cè)定周期間接測(cè)定頻率。理論上,測(cè)頻法適于較高頻率測(cè)量,測(cè)周法適于較低頻率測(cè)量。本例測(cè)頻法適于較高頻率測(cè)量,測(cè)周法適于較低頻率測(cè)量。本例采用測(cè)頻法。采用測(cè)頻法。 12.4.2 電路設(shè)計(jì)與軟件編程電路設(shè)計(jì)與軟件編程【例【例12-4】設(shè)計(jì)以單片機(jī)為核心的頻率測(cè)量裝置,測(cè)量加在設(shè)計(jì)以單片機(jī)為核心的頻率測(cè)量裝置,測(cè)量加在P3.4腳上數(shù)字時(shí)鐘信號(hào)頻率,并在外部擴(kuò)展的腳上數(shù)字時(shí)鐘信號(hào)頻率,并在外部擴(kuò)展的6位位LED數(shù)碼管上顯示數(shù)碼管上顯示測(cè)量頻率值。原理電路與仿真測(cè)量頻率值。原理電路與仿真見(jiàn)見(jiàn)圖

29、圖12-6。 本頻率計(jì)測(cè)量的信號(hào)由數(shù)字時(shí)鐘源本頻率計(jì)測(cè)量的信號(hào)由數(shù)字時(shí)鐘源“DCLOCK”產(chǎn)生,在電產(chǎn)生,在電路中添加數(shù)字時(shí)鐘源的具體操作與設(shè)置見(jiàn)【例路中添加數(shù)字時(shí)鐘源的具體操作與設(shè)置見(jiàn)【例12-3】。手動(dòng)改變】。手動(dòng)改變被測(cè)時(shí)鐘信號(hào)源頻率,觀察是否與被測(cè)時(shí)鐘信號(hào)源頻率,觀察是否與LED數(shù)碼管上顯示的測(cè)量結(jié)果數(shù)碼管上顯示的測(cè)量結(jié)果相同。相同。26圖圖12-6 頻率計(jì)原理電路與仿真頻率計(jì)原理電路與仿真27參考程序如下。參考程序如下。#include#includesfr16 DPTR=0 x82;sfr16 DPTR=0 x82;/定義寄存器定義寄存器DPTRDPTRunsigned char

30、cnt_t0,cnt_t1,qian,bai,shi,ge,bb,wan,shiwan;unsigned char cnt_t0,cnt_t1,qian,bai,shi,ge,bb,wan,shiwan;unsigned long freq;unsigned long freq;/定義頻率定義頻率unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d, 0 x7d, unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d, 0 x7d, 0 x07, 0 x7

31、f,0 x6f,0 x77,0 x7c, 0 x39,0 x5e,0 x79,0 x71; 0 x07, 0 x7f,0 x6f,0 x77,0 x7c, 0 x39,0 x5e,0 x79,0 x71; / /共陰數(shù)碼管段碼表共陰數(shù)碼管段碼表void delay_1ms(unsigned int z)void delay_1ms(unsigned int z)/函數(shù)功能:延時(shí)約函數(shù)功能:延時(shí)約1ms1ms unsigned char i,j;unsigned char i,j;for(i=0;iz;i+)for(i=0;iz;i+)for(j=0;j110;j+);for(j=0;jVCC1

32、+0.2VVCC2VCC1+0.2V時(shí),芯片由時(shí),芯片由VCC2VCC2供電;當(dāng)供電;當(dāng)VCC2VCC1VCC2VCC1時(shí),芯片時(shí),芯片由由VCC1VCC1供電。供電。l GND GND:地:地l X1 X1,X2X2:接:接32.768KHz32.768KHz晶振引腳。晶振引腳。 單片機(jī)與單片機(jī)與DS1302DS1302間無(wú)數(shù)據(jù)傳輸時(shí),間無(wú)數(shù)據(jù)傳輸時(shí),SCLKSCLK保持低電平,此時(shí)保持低電平,此時(shí)如果如果 從低變?yōu)楦邥r(shí),即啟動(dòng)數(shù)據(jù)傳輸,此時(shí)從低變?yōu)楦邥r(shí),即啟動(dòng)數(shù)據(jù)傳輸,此時(shí)SCLKSCLK的上升沿將的上升沿將數(shù)據(jù)寫(xiě)入數(shù)據(jù)寫(xiě)入DS1302DS1302,而在,而在SCLKSCLK的下降沿從的下

33、降沿從DS1302DS1302讀出數(shù)據(jù)。讀出數(shù)據(jù)。 為為低時(shí),則禁止數(shù)據(jù)傳輸?shù)蜁r(shí),則禁止數(shù)據(jù)傳輸, ,讀讀/ /寫(xiě)時(shí)序如圖寫(xiě)時(shí)序如圖12-812-8所示。數(shù)據(jù)傳輸所示。數(shù)據(jù)傳輸時(shí),低位在前,高位在后。時(shí),低位在前,高位在后。2. DS1302的命令字格式的命令字格式 單片機(jī)對(duì)單片機(jī)對(duì)DS1302的讀的讀/寫(xiě),都必須由單片機(jī)先向?qū)?,都必須由單片機(jī)先向DS1302寫(xiě)入一個(gè)命令字寫(xiě)入一個(gè)命令字(8位位) 發(fā)起,命令字的格式見(jiàn)發(fā)起,命令字的格式見(jiàn)表表12-1。37圖圖12-8 DS1302讀讀/寫(xiě)時(shí)序?qū)憰r(shí)序RAM/CKRD/WRAM/CKRD/W命令字各位功能:命令字各位功能:D7:必須為邏輯必須為邏

34、輯1,如為,如為0,則禁止寫(xiě)入,則禁止寫(xiě)入DS1302。D6:1讀讀/寫(xiě)寫(xiě)RAM數(shù)據(jù),數(shù)據(jù),0讀讀/寫(xiě)時(shí)鐘寫(xiě)時(shí)鐘/日歷數(shù)據(jù)。日歷數(shù)據(jù)。D5D1:為讀為讀/寫(xiě)單元的地址;寫(xiě)單元的地址;D0:1對(duì)對(duì)DS1302讀操作,讀操作,0對(duì)對(duì)DS1302寫(xiě)操作。寫(xiě)操作。 注意,命令字(注意,命令字(8位)總是低位在先,命令字每位)總是低位在先,命令字每1位都是在位都是在SCLK上升沿送出。上升沿送出。383. DS1302的內(nèi)部寄存器的內(nèi)部寄存器 片內(nèi)各時(shí)鐘片內(nèi)各時(shí)鐘/日歷寄存器以及其它的功能寄存器見(jiàn)日歷寄存器以及其它的功能寄存器見(jiàn)表表12-2。通過(guò)向寄存器寫(xiě)入命令字實(shí)現(xiàn)對(duì)通過(guò)向寄存器寫(xiě)入命令字實(shí)現(xiàn)對(duì)DS1

35、302操作。操作。 例如,如要設(shè)置秒寄存器的初始值,需要先寫(xiě)入命令字例如,如要設(shè)置秒寄存器的初始值,需要先寫(xiě)入命令字80H(見(jiàn)見(jiàn)表表12-2),然后再向秒寄存器寫(xiě)入初始值;如要讀出某,然后再向秒寄存器寫(xiě)入初始值;如要讀出某時(shí)刻秒值,需要先寫(xiě)入命令字時(shí)刻秒值,需要先寫(xiě)入命令字81H,然后再?gòu)拿爰拇嫫髯x取秒,然后再?gòu)拿爰拇嫫髯x取秒值。值。 表表12-2中各寄存器中各寄存器 “取值范圍取值范圍”1列存放的數(shù)據(jù)均為列存放的數(shù)據(jù)均為BCD碼。碼。39表表12-2 主要寄存器、命令字與取值范圍及各位內(nèi)容主要寄存器、命令字與取值范圍及各位內(nèi)容40l CH:時(shí)鐘暫停位,:時(shí)鐘暫停位,1-振蕩器停止,振蕩器停止

36、,DS1302為低功耗方式;為低功耗方式;0-時(shí)鐘開(kāi)始時(shí)鐘開(kāi)始 工作。工作。l 10SEC:秒的十位數(shù)字,:秒的十位數(shù)字,SEC為秒的個(gè)位數(shù)字為秒的個(gè)位數(shù)字l 10MIN:分的十位數(shù)字,:分的十位數(shù)字,MIN為分的個(gè)位數(shù)字為分的個(gè)位數(shù)字l 12/24:12或或24小時(shí)方式選擇位小時(shí)方式選擇位l AP:小時(shí)格式設(shè)置位,:小時(shí)格式設(shè)置位, 0-上午模式(上午模式(AM););1-下午模式下午模式(PM)l 10DATE:日期的十位數(shù)字,:日期的十位數(shù)字,DATE為日期的個(gè)位數(shù)字為日期的個(gè)位數(shù)字l 10M:月的十位數(shù)字,:月的十位數(shù)字,MONTH為日期的個(gè)位數(shù)字為日期的個(gè)位數(shù)字l DAY:星期的個(gè)位

37、數(shù)字:星期的個(gè)位數(shù)字41l10YEAR:年的十位數(shù)字,:年的十位數(shù)字,YEAR為年的十位數(shù)字為年的十位數(shù)字 表表12-2中后中后3個(gè)寄存器的功能及特殊位符號(hào)的意義說(shuō)明如下。個(gè)寄存器的功能及特殊位符號(hào)的意義說(shuō)明如下。 寫(xiě)保護(hù)寄存器:寫(xiě)保護(hù)寄存器:該寄存器的該寄存器的D7位位WP是寫(xiě)保護(hù)位,其余是寫(xiě)保護(hù)位,其余7位位(D0D6)置為)置為0。在對(duì)時(shí)鐘。在對(duì)時(shí)鐘/日歷單元和日歷單元和RAM單元進(jìn)行寫(xiě)操作單元進(jìn)行寫(xiě)操作前,前,WP必須為必須為0,即允許寫(xiě)入。當(dāng),即允許寫(xiě)入。當(dāng)WP為為1時(shí),用來(lái)防止對(duì)其它時(shí),用來(lái)防止對(duì)其它寄存器進(jìn)行寫(xiě)操作。寄存器進(jìn)行寫(xiě)操作。 涓流充電寄存器涓流充電寄存器:慢充電寄存器,

38、用于管理對(duì)備用電源的充:慢充電寄存器,用于管理對(duì)備用電源的充電。電。TCS:當(dāng)當(dāng)4位位TCS=1010時(shí),才允許使用涓流充電寄存器,其他時(shí),才允許使用涓流充電寄存器,其他任何狀態(tài)都將禁止使用涓流充電器。任何狀態(tài)都將禁止使用涓流充電器。DS:兩兩DS位用于選擇連接在位用于選擇連接在VCC2和和VCC1間的二極管數(shù)目。間的二極管數(shù)目。 01-選擇選擇1個(gè)二極管;個(gè)二極管;10-選擇選擇2個(gè)二極管;個(gè)二極管; 11或或00-涓流充電器被禁止。涓流充電器被禁止。RS:兩位兩位RS位用于選擇涓流充電器內(nèi)部在位用于選擇涓流充電器內(nèi)部在VCC2和和VCC1之間之間的連接電阻。的連接電阻。 RS=01,選擇,

39、選擇R1(2k););RS=10時(shí),選擇時(shí),選擇R2(4k););RS=11時(shí),選擇時(shí),選擇R3(8k););RS=00時(shí),不選擇任何電阻。時(shí),不選擇任何電阻。43 時(shí)鐘突發(fā)寄存器:時(shí)鐘突發(fā)寄存器:?jiǎn)纹瑱C(jī)對(duì)單片機(jī)對(duì)DS1302除單字節(jié)數(shù)據(jù)讀除單字節(jié)數(shù)據(jù)讀/寫(xiě)外,寫(xiě)外,還可采用突發(fā)方式,即多字節(jié)連續(xù)讀還可采用突發(fā)方式,即多字節(jié)連續(xù)讀/寫(xiě)。在多字節(jié)連續(xù)讀寫(xiě)。在多字節(jié)連續(xù)讀/寫(xiě)寫(xiě)中,只要對(duì)地址為中,只要對(duì)地址為3EH的時(shí)鐘突發(fā)寄存器進(jìn)行讀的時(shí)鐘突發(fā)寄存器進(jìn)行讀/寫(xiě)操作,即寫(xiě)操作,即把對(duì)時(shí)鐘把對(duì)時(shí)鐘/日歷或日歷或RAM單元的讀單元的讀/寫(xiě)設(shè)定為寫(xiě)設(shè)定為多字節(jié)方式多字節(jié)方式。該方式,。該方式,讀讀/寫(xiě)都

40、開(kāi)始于地址寫(xiě)都開(kāi)始于地址0的的D0位。當(dāng)多字節(jié)方式寫(xiě)時(shí)鐘位。當(dāng)多字節(jié)方式寫(xiě)時(shí)鐘/日歷時(shí),日歷時(shí),必須按照數(shù)據(jù)傳送的次序?qū)懭胱钕鹊谋仨毎凑諗?shù)據(jù)傳送的次序?qū)懭胱钕鹊?個(gè)寄存器;但是以多字個(gè)寄存器;但是以多字節(jié)方式寫(xiě)節(jié)方式寫(xiě)RAM時(shí),沒(méi)有必要寫(xiě)入所有的時(shí),沒(méi)有必要寫(xiě)入所有的31個(gè)字節(jié),每個(gè)被寫(xiě)個(gè)字節(jié),每個(gè)被寫(xiě)入的字節(jié)都被傳輸?shù)饺氲淖止?jié)都被傳輸?shù)絉AM,無(wú)論,無(wú)論31個(gè)字節(jié)是否都被寫(xiě)入。個(gè)字節(jié)是否都被寫(xiě)入。12.5.2 電路設(shè)計(jì)與編程電路設(shè)計(jì)與編程44 (2)閏年自動(dòng)判別。)閏年自動(dòng)判別。 (3)鍵盤(pán)采用動(dòng)態(tài)掃描方式查詢,參量應(yīng)能進(jìn)行增)鍵盤(pán)采用動(dòng)態(tài)掃描方式查詢,參量應(yīng)能進(jìn)行增1修改,由修改,由“啟動(dòng)

41、日期與時(shí)間修改啟動(dòng)日期與時(shí)間修改”功能鍵功能鍵k1與與6個(gè)參量修改鍵組合來(lái)完成個(gè)參量修改鍵組合來(lái)完成增增1修改。即先按一下修改。即先按一下k1,然后按一下被修改參量鍵,即可使該,然后按一下被修改參量鍵,即可使該參量增參量增1,修改完畢,再按一下,修改完畢,再按一下k1表示修改結(jié)束確認(rèn)。表示修改結(jié)束確認(rèn)。 本例時(shí)鐘本例時(shí)鐘/日歷原理電路與仿真見(jiàn)圖日歷原理電路與仿真見(jiàn)圖12-9。LCD1602分兩行顯分兩行顯示日歷與時(shí)鐘。示日歷與時(shí)鐘。45 【例例12-5】制作一個(gè)使用時(shí)鐘制作一個(gè)使用時(shí)鐘/日歷芯片日歷芯片DS1302并采用并采用LCD1602顯示的日歷顯示的日歷/時(shí)鐘,基本功能如下。時(shí)鐘,基本功

42、能如下。(1)顯示)顯示6個(gè)參量的內(nèi)容,個(gè)參量的內(nèi)容,第一行顯示第一行顯示:年、月、日;:年、月、日;第二行第二行顯示:顯示:時(shí)、分、秒。時(shí)、分、秒。46圖圖12-9 LCD顯示的時(shí)鐘顯示的時(shí)鐘/日歷原理電路及仿真日歷原理電路及仿真47 圖圖12-912-9的的4 43 3矩陣鍵盤(pán),只用到了其中矩陣鍵盤(pán),只用到了其中2 2行鍵共行鍵共6 6個(gè),個(gè),余下的按鍵,本例未使用,可用于將來(lái)鍵盤(pán)功能擴(kuò)展。余下的按鍵,本例未使用,可用于將來(lái)鍵盤(pán)功能擴(kuò)展。參考程序如下:參考程序如下:#include#include#include LCD1602.h#include LCD1602.h / /液晶顯示器液晶

43、顯示器LCD1602LCD1602頭文件頭文件#include DS1302.h#include DS1302.h / /時(shí)鐘時(shí)鐘/ /日歷芯片日歷芯片DS1302DS1302頭文件頭文件#define uchar unsigned char#define uchar unsigned char#define uint unsigned int#define uint unsigned intbit key_flag1=0,key_flag2=0;bit key_flag1=0,key_flag2=0;SYSTEMTIME adjusted;SYSTEMTIME adjusted; / / 此

44、處為結(jié)構(gòu)體定義此處為結(jié)構(gòu)體定義48uchar sec_add=0,min_add=0,hou_add=0;uchar sec_add=0,min_add=0,hou_add=0;uchar day_add=0,mon_add=0,yea_add=0;uchar day_add=0,mon_add=0,yea_add=0;uchar data_alarm7=0;uchar data_alarm7=0;int key_scan() int key_scan() / / 函數(shù)功能:鍵盤(pán)掃描,判是否有鍵按下函數(shù)功能:鍵盤(pán)掃描,判是否有鍵按下 int i=0;int i=0; uint temp;uin

45、t temp; P1=0 xf0;P1=0 xf0; temp=P1;temp=P1; if(temp!=0 xf0)if(temp!=0 xf0) i=1;i=1; elseelse i=0;i=0; return i;return i; 49uchar key_value()uchar key_value()/函數(shù)功能:獲取按下的按鍵值函數(shù)功能:獲取按下的按鍵值 uint m=0,n=0,temp; uint m=0,n=0,temp; uchar value; uchar value; uchar v43=2,1,0,5,4,3,8,7,6,b,a,9; uchar v43=2,1,0,

46、5,4,3,8,7,6,b,a,9; P1=0 xfe;temp=P1; if(temp!=0 xfe)m=0; P1=0 xfe;temp=P1; if(temp!=0 xfe)m=0;/采用分行、分列掃描的形式獲取按鍵鍵值采用分行、分列掃描的形式獲取按鍵鍵值 P1=0 xfd;temp=P1; if(temp!=0 xfd)m=1;P1=0 xfd;temp=P1; if(temp!=0 xfd)m=1; P1=0 xfb;temp=P1; if(temp!=0 xfb)m=2; P1=0 xfb;temp=P1; if(temp!=0 xfb)m=2; P1=0 xf7;temp=P1;

47、 if(temp!=0 xf7)m=3; P1=0 xf7;temp=P1; if(temp!=0 xf7)m=3; P1=0 xef;temp=P1; if(temp!=0 xef)n=0; P1=0 xef;temp=P1; if(temp!=0 xef)n=0; P1=0 xdf;temp=P1; if(temp!=0 xdf)n=1; P1=0 xdf;temp=P1; if(temp!=0 xdf)n=1; P1=0 xbf;temp=P1; if(temp!=0 xbf)n=2; P1=0 xbf;temp=P1; if(temp!=0 xbf)n=2;50 value=vmn;

48、value=vmn; return value; return value; void adjust(void)void adjust(void)/函數(shù)功能:修改各參量函數(shù)功能:修改各參量 if(key_scan()&key_flag1)if(key_scan()&key_flag1) switch(key_value()switch(key_value() case 0:sec_add+;break;case 0:sec_add+;break; case 1:min_add+;break;case 1:min_add+;break; case 2:hou_add+;break

49、;case 2:hou_add+;break; case 3:day_add+;break;case 3:day_add+;break;case 4:mon_add+;break;case 4:mon_add+;break; case 5:yea_add+;break;case 5:yea_add+;break;51default: break;default: break; adjusted.Second+=sec_add; adjusted.Second+=sec_add; adjusted.Minute+=min_add; adjusted.Minute+=min_add; adjust

50、ed.Hour+=hou_add; adjusted.Hour+=hou_add; adjusted.Day+=day_add; adjusted.Day+=day_add; adjusted.Month+=mon_add; adjusted.Month+=mon_add; adjusted.Year+=yea_add; adjusted.Year+=yea_add; if(adjusted.Second59) if(adjusted.Second59) adjusted.Second=adjusted.Second%60;adjusted.Second=adjusted.Second%60;

51、 adjusted.Minute+;adjusted.Minute+; if(adjusted.Minute59)if(adjusted.Minute59) adjusted.Minute=adjusted.Minute%60;adjusted.Minute=adjusted.Minute%60; adjusted.Hour+;adjusted.Hour+; 52if(adjusted.Hour23)if(adjusted.Hour23) adjusted.Hour=adjusted.Hour%24;adjusted.Hour=adjusted.Hour%24; adjusted.Day+;a

52、djusted.Day+; if(adjusted.Day31)if(adjusted.Day31) adjusted.Day=adjusted.Day%31;adjusted.Day=adjusted.Day%31;if(adjusted.Month12)if(adjusted.Month12) adjusted.Month=adjusted.Month%12;adjusted.Month=adjusted.Month%12;if(adjusted.Year100)if(adjusted.Year100) adjusted.Year=adjusted.Year%100;adjusted.Ye

53、ar=adjusted.Year%100; 53void changing(void) interrupt 0 using 0void changing(void) interrupt 0 using 0/中斷處理函數(shù),修改參量,或修改確認(rèn)中斷處理函數(shù),修改參量,或修改確認(rèn) if(key_flag1)if(key_flag1) key_flag1=0;key_flag1=0; else else key_flag1=1;key_flag1=1; main()main()/主函數(shù)主函數(shù) uint i;uint i; uchar p1=D:,p2=T:;uchar p1=D:,p2=T:; SYS

54、TEMTIME T;SYSTEMTIME T;EA=1;EA=1; EX0=1;EX0=1; IT0=1;IT0=1; EA=1;EA=1;54 EX1=1;EX1=1; IT1=1;IT1=1; init1602();init1602(); Initial_DS1302() ;Initial_DS1302() ;while(1)while(1) write_com(0 x80);write_com(0 x80); write_string(p1,2);write_string(p1,2); write_com(0 xc0);write_com(0 xc0); write_string(p2,

55、2);write_string(p2,2); DS1302_GetTime(&T) ;DS1302_GetTime(&T) ; adjusted.Second=T.Second;adjusted.Second=T.Second; adjusted.Minute=T.Minute;adjusted.Minute=T.Minute;adjusted.Hour=T.Hour;adjusted.Hour=T.Hour;adjusted.Week=T.Week;adjusted.Week=T.Week;55adjusted.Day=T.Day;adjusted.Day=T.Day;adj

56、usted.Month=T.Month;adjusted.Month=T.Month;adjusted.Year=T.Year;adjusted.Year=T.Year;for(i=0;i9;i+)for(i=0;i9;i+) adjusted.DateStringi=T.DateStringi;adjusted.DateStringi=T.DateStringi; adjusted.TimeStringi=T.TimeStringi; adjusted.TimeStringi=T.TimeStringi; adjust();adjust();DateToStr(&adjusted);

57、DateToStr(&adjusted);TimeToStr(&adjusted);TimeToStr(&adjusted);write_com(0 x82);write_com(0 x82); write_string(adjusted.DateString,8);write_string(adjusted.DateString,8); write_com(0 xc2);write_com(0 xc2); write_string(adjusted.TimeString,8);write_string(adjusted.TimeString,8);delay(10);

58、delay(10); 56 程序中,使用了自行編寫(xiě)的液晶顯示器程序中,使用了自行編寫(xiě)的液晶顯示器LCD1602LCD1602的頭文件的頭文件“LCD1602.h”“LCD1602.h”,由于液晶顯示器,由于液晶顯示器LCD1602LCD1602是單片機(jī)應(yīng)用系統(tǒng)是單片機(jī)應(yīng)用系統(tǒng)經(jīng)常用到的器件,因此將其常用到的驅(qū)動(dòng)函數(shù)等函數(shù),寫(xiě)成經(jīng)常用到的器件,因此將其常用到的驅(qū)動(dòng)函數(shù)等函數(shù),寫(xiě)成一個(gè)頭文件,如果以后在其他項(xiàng)目中也用到一個(gè)頭文件,如果以后在其他項(xiàng)目中也用到LCD1602LCD1602,只需將,只需將該頭文件包含進(jìn)來(lái)即可,這樣程序的編寫(xiě)提供了方便。同理該頭文件包含進(jìn)來(lái)即可,這樣程序的編寫(xiě)提供了方便。

59、同理涉及對(duì)時(shí)鐘涉及對(duì)時(shí)鐘/ /日歷芯片日歷芯片DS1302DS1302的控制,也可自行編寫(xiě)頭文件的控制,也可自行編寫(xiě)頭文件“DS1302.h”“DS1302.h”,以后在其他項(xiàng)目中將該頭文件包含進(jìn)來(lái)即可。,以后在其他項(xiàng)目中將該頭文件包含進(jìn)來(lái)即可。上述兩個(gè)頭文件清單見(jiàn)上述兩個(gè)頭文件清單見(jiàn)附錄附錄1 1與與附錄附錄2 2。12.6 12.6 電話撥號(hào)的模擬電話撥號(hào)的模擬12.6.1 12.6.1 模擬電話撥號(hào)的模擬電話撥號(hào)的設(shè)計(jì)要求設(shè)計(jì)要求57 設(shè)計(jì)模擬電話撥號(hào)時(shí)的狀況,把模擬電話鍵盤(pán)撥出的某一電設(shè)計(jì)模擬電話撥號(hào)時(shí)的狀況,把模擬電話鍵盤(pán)撥出的某一電話號(hào)碼,顯示在話號(hào)碼,顯示在LCDLCD顯示屏上。

60、電話鍵盤(pán)除了顯示屏上。電話鍵盤(pán)除了0 09 9的的1010個(gè)數(shù)字鍵個(gè)數(shù)字鍵外,還有外,還有“* *”鍵用于實(shí)現(xiàn)刪除功能,即刪除一位最后輸入的號(hào)鍵用于實(shí)現(xiàn)刪除功能,即刪除一位最后輸入的號(hào)碼;碼;“#”#”鍵用于清除顯示屏上所有的數(shù)字顯示。此外還要求每鍵用于清除顯示屏上所有的數(shù)字顯示。此外還要求每按下一個(gè)鍵,發(fā)出聲響,表示按下該鍵。還有按下一個(gè)鍵,發(fā)出聲響,表示按下該鍵。還有LCDLCD顯示器,顯示顯示器,顯示所撥的電話號(hào)碼。所撥的電話號(hào)碼。12.6.2 電路設(shè)計(jì)與編程電路設(shè)計(jì)與編程【例例12-612-6】設(shè)計(jì)一模擬電話撥號(hào)時(shí)的電話鍵盤(pán)及顯示裝置,設(shè)計(jì)一模擬電話撥號(hào)時(shí)的電話鍵盤(pán)及顯示裝置,把電話鍵盤(pán)撥出的電話號(hào)碼及其他信息,顯示在把電話鍵盤(pán)撥出的電話號(hào)碼及其他信息,顯

溫馨提示

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