溫度采集與顯示(DSP控制器及其應(yīng)用 )課程設(shè)計(jì)說(shuō)明書(shū)
《溫度采集與顯示(DSP控制器及其應(yīng)用 )課程設(shè)計(jì)說(shuō)明書(shū)》由會(huì)員分享,可在線閱讀,更多相關(guān)《溫度采集與顯示(DSP控制器及其應(yīng)用 )課程設(shè)計(jì)說(shuō)明書(shū)(17頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、DSP課程設(shè)計(jì)報(bào)告 溫度采集與顯示 科信學(xué)院 課程設(shè)計(jì)說(shuō)明書(shū) (2010/2011學(xué)年第一學(xué)期) 課程名稱 : DSP控制器及其應(yīng)用 題 目 : 溫度采集與顯示 專業(yè)班級(jí) : 通信工程07-2 班 學(xué)生姓名 : 學(xué) 號(hào) : 070312227 指導(dǎo)教師 : 設(shè)計(jì)周數(shù) : 2 周
2、 設(shè)計(jì)成績(jī) : 2010年12月29日 目 錄 1 課程設(shè)計(jì)目的 1 2 課程設(shè)計(jì)正文 1 2.1系統(tǒng)分析 1 2.1.1 設(shè)計(jì)的任務(wù)及步驟 1 2.1.2 技術(shù)要求 2 2.1.3設(shè)計(jì)思路 2 2.2 總體設(shè)計(jì) 2 2.2.1硬件設(shè)計(jì) 2 2.2.2 系統(tǒng)框圖設(shè)計(jì) 3 2.3 元器件的選擇 3 2.3.1 單元電路設(shè)計(jì) 3 2.3.2 單元模塊分析 4 2.4 程序流程圖與源程序 5 2.4.1 軟件系統(tǒng)流程圖 5 2.4.2 軟件程序設(shè)計(jì) 5 3 運(yùn)行結(jié)果 5 4
3、課程設(shè)計(jì)總結(jié) 6 5 參考文獻(xiàn) 7 附錄 7 1 課程設(shè)計(jì)目的 通過(guò)我們對(duì)DSP控制器及其應(yīng)用課程的學(xué)習(xí)和理解,綜合運(yùn)用課本中所學(xué)到的理論知識(shí)完成一個(gè)溫度采集與顯示的課程設(shè)計(jì)。通過(guò)這次實(shí)踐鍛煉我們查閱資料、方案比較、團(tuán)結(jié)合作的能力。在這個(gè)過(guò)程我們必須掌握溫度采集技術(shù)的硬件設(shè)計(jì)、熟悉A/D轉(zhuǎn)換技術(shù)和DSP液晶顯示功能的軟件設(shè)計(jì)。學(xué)會(huì)采用簡(jiǎn)單電路的實(shí)驗(yàn)調(diào)試和整機(jī)指標(biāo)測(cè)試方法,增強(qiáng)我們的動(dòng)手能力,為以后學(xué)習(xí)和工作打下堅(jiān)實(shí)基礎(chǔ)。 2 課程設(shè)計(jì)正文 2.1系統(tǒng)分析 2.1.1 設(shè)計(jì)的任務(wù)及步驟 (1)熟悉MC1403芯片的應(yīng)用; (2
4、)根據(jù)實(shí)驗(yàn)測(cè)得熱敏電阻和溫度的一些數(shù)據(jù),設(shè)計(jì)溫度——電阻公式; (3)設(shè)計(jì)外部硬件電路; (4)軟件完成程序流程圖設(shè)計(jì)和編程,其中包括A/D轉(zhuǎn)換和液晶顯示部分; (5)軟硬件聯(lián)合調(diào)試; (6)書(shū)寫(xiě)設(shè)計(jì)說(shuō)明書(shū)。 2.1.2 技術(shù)要求 此系統(tǒng)利用熱敏電阻測(cè)得電阻—溫度之間的關(guān)系,找到電阻和溫度之間的代數(shù)關(guān)系,從而檢測(cè)溫度,設(shè)計(jì)硬件外擴(kuò)電路,同時(shí)設(shè)計(jì)軟件程序,包括A/D程序設(shè)計(jì),進(jìn)行軟硬件聯(lián)系調(diào)試,能在液晶顯示屏上顯示溫度。 2.1.3設(shè)計(jì)思路 系統(tǒng)首先設(shè)計(jì)溫度采集硬件電路,在多次實(shí)驗(yàn)運(yùn)算擬合出熱敏電阻輸出電壓值與溫度之間的函數(shù)關(guān)系,熱敏電阻的輸出
5、的電壓值隨溫度的上升而下降,呈現(xiàn)出負(fù)系數(shù),從而運(yùn)用于實(shí)驗(yàn)中檢測(cè)溫度;然后將采集的溫度送入DSPTMS320F2812模數(shù)轉(zhuǎn)換模塊將電壓信號(hào)變?yōu)閿?shù)字信號(hào),再編寫(xiě)函數(shù)來(lái)控制LCD來(lái)顯示相應(yīng)的溫度及相關(guān)文字。 2.2 總體設(shè)計(jì) 2.2.1硬件設(shè)計(jì) TMS320F2812作為使用的DSP芯片。它包含33個(gè)電源引腳(為使器件正常運(yùn)行,所有電源引腳必須正確連接且不能懸空)時(shí)鐘源模塊,DSP有六種信號(hào)可以使DSP控制器復(fù)位,即電源復(fù)位、復(fù)位引腳~RS、軟件復(fù)位、非法地址復(fù)位、看門(mén)狗定時(shí)器溢出、欠壓復(fù)位六種復(fù)位信號(hào)。所以在設(shè)計(jì)的初期,把它分成了五個(gè)模塊。其中復(fù)位采用電源復(fù)位的方式,由引腳PCRESET
6、引起。為了可靠復(fù)位,其中低電平的有效時(shí)間至少6個(gè)CPU時(shí)鐘周期。DSP最小系統(tǒng)組成框圖如圖1所示。 圖1 DSP最小系統(tǒng) 其中:開(kāi)關(guān)SW-PB、電容C1、兩個(gè)反相器及其電阻電源構(gòu)成了復(fù)位電路,晶振與兩個(gè)并聯(lián)電容接X(jué)TAL1與XTAL2構(gòu)成振蕩電路,PWM1與PWM7構(gòu)成了調(diào)制信號(hào)的輸入與輸出,旁路引腳接地,請(qǐng)求控制信號(hào)MP/MC與GND接地。 2.2.2 系統(tǒng)框圖設(shè)計(jì) 該系統(tǒng)包括溫度采集電路模塊、DSPF2812芯片、A/D轉(zhuǎn)換部分和LCD液晶顯示,首先要初始化A/D轉(zhuǎn)換模塊,然后等待中斷,當(dāng)產(chǎn)生中斷后對(duì)采集到的模擬信號(hào)進(jìn)行處理,為確保轉(zhuǎn)換精度要進(jìn)行多次取值求平均,轉(zhuǎn)換結(jié)果放在結(jié)
7、果寄存器的高12位上,通過(guò)編程將處理后的溫度值送到LCD上進(jìn)行顯示。 溫度采集電路 DSPF2812 A/D轉(zhuǎn)換電路 液晶顯示模塊 圖2 系統(tǒng)設(shè)計(jì)流程圖 2.3 元器件的選擇 2.3.1 單元電路設(shè)計(jì) (1)設(shè)計(jì)方案 MC1403芯片為模數(shù)轉(zhuǎn)換提供基準(zhǔn)電壓,且輸入端接+5V電源后再并聯(lián)一個(gè)去噪聲的電容,利用熱敏電阻進(jìn)行溫度采集,采集后的輸出電壓(不得大于3.3v)與DSP的P2端口23引腳相連。 (2)外擴(kuò)電路設(shè)計(jì)圖 圖3 溫度采集電路原理圖 2.3.2 單元模塊分析 (1)MC1403芯片的引腳結(jié)構(gòu)如下
8、圖所示。 圖4 MC1403芯片 Vin端口輸入一個(gè)4.5~5.0V的模擬電壓值(接P2口的1引腳),在輸入端接一個(gè)電容濾除其他頻率分量,在Vout端輸出了一個(gè)穩(wěn)定的電壓值(接P2口的23引腳),該電壓值不得大于3.3V,GND端接模擬地(接P2口的33引腳)。 (2) A/D轉(zhuǎn)換模塊 當(dāng)模/數(shù)轉(zhuǎn)換完成后,讀取結(jié)果寄存器前,最好先讀取模/數(shù)轉(zhuǎn)換控制寄存器ADCRL2的ADCFIF01或ADCFIF02,以確定當(dāng)前結(jié)果寄存器的狀態(tài),保證讀取的結(jié)果是正確。另外,要注意12位的轉(zhuǎn)換結(jié)果放在結(jié)果寄存器中的高12位上,該12位數(shù)據(jù)與外部模擬輸入電壓的關(guān)系為: 12位數(shù)字
9、結(jié)果=4095*(輸入電壓/基準(zhǔn)電壓) (3) LCD液晶顯示模塊 DSP經(jīng)常會(huì)對(duì)讀寫(xiě)周期較慢的輸入/輸出設(shè)備(如液晶顯示模塊、打印機(jī)、鍵盤(pán)等)進(jìn)行訪問(wèn),通常以下兩種方法來(lái)解決DSP與這些慢速設(shè)備之間的輸入/輸出時(shí)序匹配問(wèn)題。直接訪問(wèn)方式是將DSP的讀寫(xiě)信號(hào)限于慢速設(shè)備接口控制板引出的讀寫(xiě)信號(hào)線直接相連,時(shí)序由DSP內(nèi)部讀寫(xiě)邏輯控制。由于慢速外設(shè)的讀寫(xiě)周期相對(duì)DSP較慢,是兩者的時(shí)序匹配,還必須進(jìn)行一些時(shí)序方面的控制處理。一中處理方法是軟件編程等待狀態(tài)發(fā)生器,將外部總線周期擴(kuò)展到數(shù)個(gè)機(jī)器周期。由于受硬件條件的限制,這種擴(kuò)展通常也是有限的。 液晶顯示為128行和64列的矩陣,它分左
10、右兩個(gè)平面,而一個(gè)字是16行和16列的矩陣,在按頁(yè)的顯示中每一頁(yè)是一個(gè)8行和128列的矩陣,所以每一行字是分兩頁(yè)顯示的。 2.4 程序流程圖與源程序 2.4.1 軟件系統(tǒng)流程圖 軟件系統(tǒng)流程圖如圖5所示。 開(kāi) 始 初始化DSP時(shí)鐘 初始化CTR 初始化AD采樣時(shí)鐘 中斷采集數(shù)據(jù)存入Voltagel中 數(shù)據(jù)處理后的溫度值送到LCD顯示 清楚并顯示相關(guān)文字 啟動(dòng)AD0通道采集 圖5 程序流程圖 2.4.2 軟件程序設(shè)計(jì) 該程序主要包括主程序、延時(shí)
11、、A/D轉(zhuǎn)換,液晶屏相應(yīng)漢字顯示、溫度計(jì)算與顯示等子程序?qū)崿F(xiàn)溫度采集與顯示的功能,程序詳見(jiàn)附錄。 3 運(yùn)行結(jié)果 (1)運(yùn)行描述 M1403芯片作為模數(shù)轉(zhuǎn)換提供基準(zhǔn)電壓,利用熱敏電阻進(jìn)行采集,采集后的輸出電壓與DSP的P2口23引腳相連。將采集到的電壓送入A/D轉(zhuǎn)換模塊,編寫(xiě)程序?qū)崿F(xiàn)A/D轉(zhuǎn)換,轉(zhuǎn)換結(jié)果放在結(jié)果寄存器的高12位上,編寫(xiě)函數(shù)獲取A/D轉(zhuǎn)換結(jié)果,將處理的溫度值的各個(gè)對(duì)應(yīng)顯示到LCD上。 (2)系統(tǒng)調(diào)試 MC1403 芯片Vin 端輸入一個(gè)+5V的模擬電壓值;在輸入端接一個(gè)電容濾除其它頻率分量;在 Vout 端輸出了一個(gè)穩(wěn)定的電壓值;GND端直接接模擬地;給試驗(yàn)箱供電,打
12、開(kāi) Setup CCS2(‘C2000), 在彈出的對(duì)話框中選擇ICETEK-5100 USB Emulator for TMS320F2812 導(dǎo)入,進(jìn)行配置設(shè)置然后進(jìn)入 CCS2(‘C2000),打開(kāi)工程文件進(jìn)行編譯生成 .out 文件下載到硬盤(pán)中然后調(diào)試,觀察液晶顯示屏,第一行顯示“溫度顯示”,第二行顯示“ 溫度值 ℃”,當(dāng)用手觸摸時(shí),溫度顯示不斷變化,實(shí)現(xiàn)了溫度的采集與現(xiàn)實(shí)。 (3)調(diào)試結(jié)果 將程序燒到實(shí)驗(yàn)箱中,得到運(yùn)行結(jié)果如下圖6所示。 圖 6 調(diào)試結(jié)果 4 課程設(shè)計(jì)總結(jié) 通過(guò)學(xué)習(xí)DSP課程我們都知道,DS
13、P實(shí)際上也是一種單片機(jī),它同樣是將中央處理單元、控制單元和外圍設(shè)備集成到一塊芯片上。但DSP有別于普通的單片機(jī),它采用了多組總線技術(shù)實(shí)現(xiàn)并行運(yùn)行機(jī)制,從而極大地提高了運(yùn)算速度,也提供了非常靈活的指令系統(tǒng)。 此次的課程設(shè)計(jì)我們組做的設(shè)計(jì)是—溫度采集與顯示,通過(guò)老師和同學(xué)們的努力我們終于成功完成此次課程設(shè)計(jì)的全部任務(wù),設(shè)計(jì)的一開(kāi)始我們就著手準(zhǔn)備設(shè)計(jì)資料,上網(wǎng)、圖書(shū)館查閱資料,我們分工明確,每個(gè)同學(xué)都有自己的任務(wù),因此工作進(jìn)行得有條不紊,大家都很有責(zé)任感,認(rèn)真做好自己的工作。 在這次課程設(shè)計(jì)中我主要負(fù)責(zé)的軟件編程部分,程序調(diào)試我采用的是CCS 2 (C2000)軟件,至于軟件如何配置和使用,老師
14、在上實(shí)驗(yàn)課的時(shí)候已經(jīng)簡(jiǎn)單的介紹過(guò),所以再次看到它的時(shí)候不是很陌生,但是在用它編程序時(shí)就出現(xiàn)了很多問(wèn)題,在這里我遇到了很大的困難,雖然有書(shū)籍和網(wǎng)絡(luò)上查找的輔導(dǎo)資料,但是由于軟件設(shè)計(jì)是靈活的東西,它不僅需要有過(guò)硬的編程知識(shí),還必須有靈活的應(yīng)用,因此在這方面的調(diào)試時(shí)花費(fèi)了大量的時(shí)間。首先,我把編程序想的過(guò)于簡(jiǎn)單,以為只是把每個(gè)模塊的子程序編寫(xiě)成功便可以,卻忽視了模塊與模塊之間的相關(guān)性和銜接性,因此總出現(xiàn)參數(shù)定義不準(zhǔn)確和函數(shù)聲明不相符的錯(cuò)誤。其次,因?yàn)樽砸训拇中牟粐?yán)謹(jǐn),導(dǎo)致出現(xiàn)大小寫(xiě)不符,缺少分號(hào)或大括號(hào)的低級(jí)錯(cuò)誤。程序語(yǔ)法不對(duì),調(diào)試不過(guò)去,生成不了.out文件,不過(guò)通過(guò)請(qǐng)教老師和同學(xué)問(wèn)題都解決了,當(dāng)
15、我看到我調(diào)試出來(lái)的結(jié)果是那種激動(dòng)的心情就別提了,感覺(jué)特別有成就感。 通過(guò)這次課程設(shè)計(jì),不僅是我進(jìn)一步加深對(duì)課本知識(shí)的理解,更讓我學(xué)會(huì)了團(tuán)結(jié)合作的精神,不但鍛煉了我們動(dòng)手動(dòng)腦的能力,還提高了我們分析問(wèn)題、解決問(wèn)題的能力,在這次設(shè)計(jì)中我也學(xué)會(huì)了遇事要冷靜,團(tuán)結(jié)合作,虛心請(qǐng)教,沒(méi)有任何事情解決不了,最后衷心的感謝始終支持我們的老師們,你們辛苦了! 5 參考文獻(xiàn) [1] 萬(wàn)山明.TMS320F281x DSP原理及應(yīng)用實(shí)例.北京航空航天大學(xué)出版社,2007 [2] 鄭紅,王鵬,董云鳳,吳冠.DSP應(yīng)用系統(tǒng)設(shè)計(jì)實(shí)踐.北京航空航天大學(xué)出版社,2006 [3] 徐科軍,張瀚,陳智淵.TMS3
16、20F281xDSP 原理與應(yīng)用.北京航空航天大學(xué)出版社,2006 附錄 #include "DSP281x_Device.h" // DSP281x Headerfile Include File #include "DSP281x_Examples.h" // DSP281x Examples Include File // Prototype statements for functions found within this file. interrupt void adc_isr(void); // Global var
17、iables used in this example: #define LCDDELAY 1 #define LCDCMDTURNON 0x3f #define LCDCMDTURNOFF 0x3e #define LCDCMDSTARTLINE 0xc0 #define LCDCMDPAGE 0xb8 #define LCDCMDVERADDRESS 0x40 #define ADC_usDELAY 8000L #define ADC_usDELAY2 20L Uint16 ZhengshuT,XiaoshuT,Zhongjian1,Zhongjian2; float
18、temp1=0; unsigned char lcdkey[5][32]; unsigned char ledkey[12][8]; Uint16 LoopCount; Uint16 ConversionCount; float temp; Uint16 i,j; Uint16 Voltage1[1024]; Uint16 Voltage2[1024]; void Delay(int nDelay); void TurnOnLCD(); void LCDCLS(); void LCDWrite(unsigned int x,unsigned int y,unsigned
19、 int LR,unsigned int n); void WriteNb(unsigned int x,unsigned int y,unsigned char *No,unsigned f,unsigned int LR); void Wendu(float c); void delay_loop(); void delay_loop1(); void error(void); //數(shù)字模塊 unsigned char ledkey[12][8]= //半角 { {0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00}, //0 {0x00
20、,0x00,0x00,0x84,0xFE,0x80,0x00,0x00}, //1 {0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00}, //2 {0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00}, //3 {0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00}, //4 {0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00}, //5 {0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00}, //6 {0x00,0
21、x00,0x02,0xC2,0x32,0x0A,0x06,0x00}, //7 {0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00}, //8 {0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}, //9 {0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00}, //: {0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00}, //. }; void main(void) { InitSysCtrl(); EALLO
22、W; GpioMuxRegs.GPFMUX.all=0x0000; //I/O:0 特殊功能:1 GpioMuxRegs.GPFDIR.all=0x000f; // output EDIS; DINT; InitPieCtrl(); IER = 0x0000; //CPU中斷允許寄存器 IFR = 0x0000;//CPU中斷標(biāo)志寄存器 InitPieVectTable(); EALLOW; SysCtrlRegs.HISPCP.all = 0x3; // HSPCLK = SYSCLKOUT
23、/6給AD轉(zhuǎn)換時(shí)鐘提供一個(gè)6分頻 EDIS; EALLOW; // This is needed to write to EALLOW protected register PieVectTable.ADCINT = &adc_isr; EDIS; // This is needed to disable write to EALLOW protected registers InitAdc(); // 初始化AD PieCtrlRegs.PIEIER1.bit.INTx6 = 1; IER |= M_INT1; // Enab
24、le CPU Interrupt 1 EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM LoopCount = 0; ConversionCount = 0; // Configure ADC AdcRegs.ADCMAXCONV.all = 0x0001; // Setup 2 convs on SEQ1 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0
25、x0; // Setup ADCINA3 as 1st SEQ1 conv. AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // Setup ADCINA2 as 2nd SEQ1 conv. AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; // Enable EVASOC to start SEQ1 AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS) // Configure EVA // Assumes
26、 EVA Clock is already enabled in InitSysCtrl(); EvaRegs.T1CMPR = 0x0080; // Setup T1 compare value EvaRegs.T1PR = 0x0fff; // Setup period register EvaRegs.GPTCONA.bit.T1TOADC = 1; // Enable EVASOC in EVA EvaRegs.T1CON.all = 0x1042; // En
27、able timer 1 compare (up TurnOnLCD(); //打開(kāi)顯示 LCDCLS(); //清除顯示內(nèi)存 *(int *)0x108000=0x80; // 初始化ICETEK-CTR Delay(LCDDELAY); *(int *)0x108000=0x0; Delay(LCDDELAY); *(int *)0x108000=0x80; Delay(LCDDELAY); *(int *)0x108001=LCDCMDSTARTLINE; // 設(shè)置顯示起始行 Delay(LCDDELAY);
28、 *(int *)0x108002=0; Delay(LCDDELAY); for(;;) { Wendu(temp); LCDWrite(2,0,0,0); LCDWrite(2,16,0,1); LCDWrite(2,32,1,2); LCDWrite(2,48,1,3); LCDWrite(6,48,1,4);//在液晶屏上顯示相應(yīng)的漢字及符號(hào) WriteNb(6,6,ledkey[ZhengshuT&0x000f],0,0); WriteNb(6,5,ledkey[(
29、ZhengshuT&0x00f0)>>4],0,0); WriteNb(6,2,ledkey[XiaoshuT&0x000f],0,1); WriteNb(6,1,ledkey[(XiaoshuT&0x00f0)>>4],0,1); WriteNb(6,7,ledkey[11],0,0);//在液晶屏上顯示溫度值 } } interrupt void adc_isr(void) { Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4; Voltage2[ConversionC
30、ount] = AdcRegs.ADCRESULT1 >>4; if(ConversionCount == 1023) { ConversionCount = 0; } else ConversionCount++; if(ConversionCount==0) { temp=0; for(i=0;i<200;i++) temp=temp+Voltage1[i]; temp=temp/200.0;//求平均值 temp=temp*3.0/4095.0; } //
31、 Reinitialize for next ADC sequence AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE return; } //延時(shí)子程序 void Delay( int nDelay) { int ii
32、,jj,kk=0;
for ( ii=0;ii 33、
Delay(LCDDELAY);
}
//清屏程序
void LCDCLS()
{
int i,j;
*(int *)0x108001=LCDCMDSTARTLINE;
Delay(LCDDELAY);
*(int *)0x108002=0;
Delay(LCDDELAY);
for ( i=0;i<8;i++ )
{
*(int *)0x108001=LCDCMDPAGE+i;
Delay(LCDDELAY);
*(int *)0x108002=0;
Delay(LCDDELAY);
*(int *)0x108001=LC 34、DCMDVERADDRESS;
Delay(LCDDELAY);
*(int *)0x108002=0;
Delay(LCDDELAY);
for ( j=0;j<64;j++ )
{
*(int *)0x108003=0;
Delay(LCDDELAY);
*(int *)0x108002=0;
Delay(LCDDELAY);
}
*(int *)0x108001=LCDCMDPAGE+i;
Delay(LCDDELAY);
*(int *)0x108002=0;
Delay(LCDDELAY 35、);
*(int *)0x108001=LCDCMDVERADDRESS;
Delay(LCDDELAY);
*(int *)0x108002=0;
Delay(LCDDELAY);
for ( j=0;j<64;j++ )
{
*(int *)0x108004=0;
Delay(LCDDELAY);
*(int *)0x108002=0;
Delay(LCDDELAY);
}
}
}
void LCDWrite(unsigned int x,unsigned int y,unsigned int LR,unsi 36、gned int n)
{
unsigned char lcdkey[5][32]=
{
{0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00},//溫
{0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00, 37、
0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00},//度
{0x00,0x00,0x00,0x3E,0x2A,0xEA,0x2A,0x2A,0x2A,0xEA,0x2A,0x3E,0X00,0X00,0X00,0X00,
0x20,0x21,0x22,0x2C,0x20,0x3F,0x20,0x20,0x20,0x3F,0x28,0x24,0x23,0x20,0x20,0x00},//顯
{0x00,0x20,0x20,0x22,0x22,0x22,0x22,0xE2,0x 38、22,0x22,0x22,0x22,0x22,0x20,0x20,0x00,
0x10,0x08,0x04,0x03,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x02,0x0C,0x18,0x00,0x00},//示
{0x00,0x02,0x05,0xE2,0x18,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,
0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x18,0x00,0x00},//℃
};
39、if(LR==0)
{
int j;
int k=n;
*(int *)0x108001=LCDCMDPAGE+x;
Delay(1);
*(int *)0x108002=0;
Delay(1);
*(int *)0x108001=LCDCMDVERADDRESS+y;
Delay(1);
*(int *)0x108002=0;
Delay(1);
for(j=0;j<16;j++)
{
*(int *)0x108003=lcdkey[k][j];
Delay(10);
*(in 40、t *)0x108002=0;
Delay(10);
}
x++;
*(int *)0x108001=LCDCMDPAGE+x;
Delay(1);
*(int *)0x108002=0;
Delay(1);
*(int *)0x108001=LCDCMDVERADDRESS+y;
Delay(1);
*(int *)0x108002=0;
Delay(1);
for(j=16;j<32;j++)
{
*(int *)0x108003=lcdkey[k][j];
Delay(100);
*(int *) 41、0x108002=0;
Delay(100);
}
}
else
{
int j;
int k=n;
*(int *)0x108001=LCDCMDPAGE+x;
Delay(1);
*(int *)0x108002=0;
Delay(1);
*(int *)0x108001=LCDCMDVERADDRESS+y;
Delay(1);
*(int *)0x108002=0;
Delay(1);
for(j=0;j<16;j++)
{
*(int *)0x108004=lcdkey[k][j] 42、;
Delay(100);
*(int *)0x108002=0;
Delay(100);
}
x++;
*(int *)0x108001=LCDCMDPAGE+x;
Delay(1);
*(int *)0x108002=0;
Delay(1);
*(int *)0x108001=LCDCMDVERADDRESS+y;
Delay(1);
*(int *)0x108002=0;
Delay(1);
for(j=16;j<32;j++)
{
*(int *)0x108004=lcdkey[k][j];
43、 Delay(100);
*(int *)0x108002=0;
Delay(100);
}
}
}
void WriteNb(unsigned int x,unsigned int y,unsigned char *No,unsigned f,unsigned int LR)
{
int i;
y*=8;
*(int *)0x108001=LCDCMDPAGE+x; // 設(shè)置操作頁(yè)=1
Delay(LCDDELAY);
*(int *)0x108002=0;
Delay(LCDDELAY 44、);
*(int *)0x108001=LCDCMDVERADDRESS+y; // 起始列=8
Delay(LCDDELAY);
*(int *)0x108002=0;
Delay(LCDDELAY);
if(LR==1)
for(i=0;i<8;i++)
{
if(f==1)
*(int*)0x108004=~No[i];
else
*(int*)0x108004=No[i];
Delay(LCDDELAY);
*(int*)0x108002=0;
45、 Delay(LCDDELAY);
}
else
for(i=0;i<8;i++)
{
if(f==1)
*(int*)0x108003=~No[i];
else
*(int*)0x108003=No[i];
Delay(LCDDELAY);
*(int*)0x108002=0;
Delay(LCDDELAY);
}
}
//溫度計(jì)算子程序
void Wendu(float c)
{
temp1=52- 46、30*c;
ZhengshuT=(int)temp1;
XiaoshuT=(int)((temp1-ZhengshuT)*100);
Zhongjian1=ZhengshuT/10;
Zhongjian2=ZhengshuT%10;
ZhengshuT=(Zhongjian1<<4)|Zhongjian2;
Zhongjian1=XiaoshuT/10;
Zhongjian2=XiaoshuT%10;
XiaoshuT=(Zhongjian1<<4)|Zhongjian2;
}
課程設(shè)計(jì)
評(píng) 語(yǔ)
課程設(shè)計(jì)
成 績(jī)
指導(dǎo)教師
(簽字)
年 月 日
第 16 頁(yè)
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 地震中的父與子_課件
- 《大自然你好》
- 新人教版四年級(jí)上冊(cè)億以內(nèi)數(shù)的改寫(xiě)課件
- 第7章 礦井地質(zhì)(精品)
- 人教版六年級(jí)英語(yǔ)上冊(cè)第二單元第一課時(shí)
- 等差與等比數(shù)列的性質(zhì)
- B內(nèi)酰胺類抗生素的合理使用
- 英語(yǔ)下冊(cè)《燕子》課件蘇教版
- 同底數(shù)冪的除法課件
- 豐滿二實(shí)驗(yàn)陳麗杰-長(zhǎng)方體和正方體3(教育精
- 《扁鵲見(jiàn)蔡桓公》課件
- (精品)鑒別、鑒定、除雜類題目解決方法
- 第七章-擬膽堿藥和抗膽堿課件
- 膀胱腫瘤的護(hù)理查房
- 健康教研活動(dòng)PPT