![遠程溫度測量_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/98963b53-1418-41d0-9a1f-951afd62f0e2/98963b53-1418-41d0-9a1f-951afd62f0e21.gif)
![遠程溫度測量_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/98963b53-1418-41d0-9a1f-951afd62f0e2/98963b53-1418-41d0-9a1f-951afd62f0e22.gif)
![遠程溫度測量_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/98963b53-1418-41d0-9a1f-951afd62f0e2/98963b53-1418-41d0-9a1f-951afd62f0e23.gif)
![遠程溫度測量_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/98963b53-1418-41d0-9a1f-951afd62f0e2/98963b53-1418-41d0-9a1f-951afd62f0e24.gif)
![遠程溫度測量_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/98963b53-1418-41d0-9a1f-951afd62f0e2/98963b53-1418-41d0-9a1f-951afd62f0e25.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、項目編號:2015-2016學(xué)年第一學(xué)期微機原理(單片機)課程設(shè)計總結(jié)報告項目名稱: 遠程溫度測量 班級: 姓名: 學(xué)號:微機原理(單片機)課程設(shè)計任務(wù)書項目名稱:遠程溫度測量內(nèi)容與要求: 上位機:完成界面設(shè)計與通訊程序(1)能夠顯示溫度值,能夠設(shè)定報警溫度閾值上限、下限,當超出報警溫度閾值上限、下限時,溫度值后又HIGH或LOW提示字母。(2)能夠發(fā)送短信,顯示出收信人姓名,收信人電話,當前測得溫度值;能夠定時發(fā)送溫度測量情況短信。(3)每隔1秒將測得的溫度值保存至文檔中,如超過閾值,溫度值后又HIGH或LOW提示字母(4)可以對串口進行設(shè)置下位機:完成電路設(shè)計與控制程序(1)采用DS18B
2、20采集溫度,采用GSM模塊發(fā)送短信。(2)通過串口與上位機通訊,并傳輸溫度值,接受閾值設(shè)置。(3)發(fā)送短信成功時,蜂鳴器鳴叫提示。并將短信內(nèi)容顯示在LCD屏第2行(4)將當前溫度顯示在LCD液晶屏上,當超出報警溫度閾值上限、下限時,溫度值后又HIGH或LOW提示字母。項目組任務(wù)分擔評價表姓名分擔任務(wù)組內(nèi)評價陳墨LCD顯示模塊設(shè)計與編程,下位機串口通訊程序,DS18B20模塊及單片機下位機編程5張新宇上位機溫度顯示與設(shè)置,上位機串口路通訊程序,上位機文件保存及溫度判斷程序5課程設(shè)計報告評分表內(nèi)容總體方案硬件設(shè)計軟件設(shè)計結(jié)果分析明細清單問題分析心得體會參考文獻程序代碼格式規(guī)范總分陳墨得分張新宇得
3、分 微機原理(單片機)課程設(shè)計報告目錄一、總體方案1二、硬件設(shè)計1三、軟件設(shè)計3四、結(jié)果分析或項目所實現(xiàn)的功能、指標5五、明細清單7六、設(shè)計調(diào)試中遇到的疑難問題及解決方法8七、心得體會與建議8參考文獻9附錄A.下位機程序9附錄B.上位機程序圖2629一、總體方案遠程溫度測量總體框圖如圖1-1所示。文件打印溫度測量模塊LCD顯示模塊控 制 器上位機GSM模塊圖1-1 遠程溫度測量總體功能模塊示意圖 圖中, 溫度測量模塊是利用DS18B20進行溫度的測量和采集,并直接傳遞給控制器51單片機。同時控制器也可以控制溫度測量模塊的狀態(tài)。LCD模塊可以顯示由控制器得到的溫度值,并根據(jù)上位機給出的閾值上下限
4、顯示出HIGH或者LOW。上位機不但可以通過串口改變控制器參數(shù),而且可以利用GSM模塊直接發(fā)送短信。同時下位機控制器也可以命令GSM模塊發(fā)送短信。上位機還可以將溫度值和是否超過閾值情況打印在txt文檔中。二、硬件設(shè)計本項目下位機控制器采用的是51系列單片機STC80C52RC型號。其內(nèi)置8位中央處理單元、256字節(jié)內(nèi)部數(shù)據(jù)存儲器RAM、8k片內(nèi)程序存儲器(ROM)32個雙向輸入/輸出(I/O)口、3個16位定時/計數(shù)器和5個兩級中斷結(jié)構(gòu),一個全雙工串行通信口,片內(nèi)時鐘振蕩電路,屬于80C51增強型單片機版本。其價格低廉,低功耗,基本符合經(jīng)濟、環(huán)保需求。本項目溫度測量傳感器采用的DS18B20。
5、DS18B20是常用的溫度傳感器,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。三個引腳中間為溫度傳輸接口,其余兩個分別為VCC和地。本項目LCD顯示模塊采用LCD1602液晶屏,它由若干個5X7點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用。其成本低廉,字符顯示效果好,經(jīng)濟效果好。本項目硬件電路連接圖如圖2-1所示。 圖2-1 硬件電路連接圖溫度模塊的DS18B20中間的2號引腳接單片機P32,1接地3接VCC。LCD1602直接插在擴展插針接口即可,即1接地,2接VCC,3接地(帶保護電阻),7-14依次接P
6、0-P7,15接VCC,16接地,其余懸空。具體接線如圖2-1所示。三、軟件設(shè)計本項目下位機采用51單片機做控制器。由DS18B20得到溫度數(shù)據(jù)后,傳遞給51單片機,然后單片機根據(jù)得到的數(shù)據(jù),在LCD液晶屏上顯示出相應(yīng)的數(shù)值和符號。同時,上位機和下位機進行串口通信,上位機改變下位機參數(shù)設(shè)定,下位機的溫度數(shù)據(jù)也傳遞到上位機。(1)主程序流程圖如3-1所示。圖3-1 主程序流程圖(2)讀取溫度值模塊流程圖如圖3-2所示。開始傳感器初始化發(fā)跳過讀序列號指令發(fā)溫度轉(zhuǎn)換指令讀溫度值低字節(jié)讀溫度值高字節(jié)高低字節(jié)合并返回溫度值開始圖3-2 讀取溫度值模塊流程圖本項目串行通信采用的波特率為19200,串口采用
7、方式2的工作方式,其計算公式如下:波特率=(2SMOD/32)*(T1溢出率)考慮電源管理寄存器PCON,取PCON為0x80,所以波特率加倍,令TH1=0xFD,最終得到波特率為19200.四、結(jié)果分析或項目所實現(xiàn)的功能、指標本項目可實現(xiàn)溫度測量功能,可以在LCD液晶屏和上位機上同時顯示溫度值。同時還具有遠程閾值上下限設(shè)置功能,可以在上位機設(shè)置溫度閾值上下限,超過上限上下位機同時會有HIGH的顯示,低于下限上下位機也同時又LOW的顯示。如圖4-1和圖4-2所示,測量溫度值為25.7度,高于溫度上限0度,則上位機和下位機都會顯示HIGH字樣。(由于拍照時間差會導(dǎo)致溫度有微小變化) 圖4-1 上
8、位機顯示結(jié)果(1) 圖4-2 下位機顯示結(jié)果(1) 當溫度低于溫度下限時,如圖4-3和4-4所示,上位機和下位機都會顯示LOW字樣。 圖4-3 上位機顯示結(jié)果(2) 圖4-4 下位機顯示結(jié)果(2)當溫度在設(shè)置的溫度閾值上下限之間時,下位機只顯示溫度,上位機會顯示NORMAL,證明溫度正常。五、明細清單明細及價格清單如表5-1所示序號名稱型號/規(guī)格數(shù)量價格(元)1單片機最小系統(tǒng)板STC89C52RC1702溫度傳感器DS18B20113液晶顯示屏LCD160213 4GSM模塊GTM900 1110表5-1 明細及價格清單價格總計70+1+3+110=184(元)。六、設(shè)計調(diào)試中遇到的疑難問題及
9、解決方法張新宇:1、Labview將溫度保存在txt文件中,文件名義一定要和Labview程序里面的txt文件命名一致,否則不但不能實現(xiàn)存儲其他功能也會出現(xiàn)錯誤。2、Labview即使內(nèi)有Visa模板,但是也必須安裝Visa驅(qū)動才能正常使用,不安裝該驅(qū)動串口永遠無法讀取。3、Labview不能將主體時序調(diào)的太慢,由于是串口通信,太慢會出現(xiàn)錯誤,“等待下一個整數(shù)倍毫秒”函數(shù)毫秒倍數(shù)設(shè)置為10100為宜。 陳墨:1、電源管理寄存器PCON最高位為1時波特率要乘2,所以設(shè)置TH1為0xFD波特率才為19200。2、DS18B20要考慮好延時,以保證溫度讀取完成,避免溫度讀取失敗。3、溫度低于0度時是
10、要將數(shù)值取反加1,轉(zhuǎn)換成補碼。七、心得體會與建議備注:正式成稿時,刪除此備注。每位小組成員需分別說明對知識的深度認識,和學(xué)習(xí)方法的總結(jié);對項目的進一步展望,可作哪些方面的改進;對老師教學(xué)有哪些建議。如:張新宇:本次課設(shè)我學(xué)習(xí)了之前從未用過的Labview軟件,了解了該如何用Labview進行串口通訊,以及制作一個上位機程序。它獨特的圖形編程方法讓我受益頗多。軟件中的幫助功能也非常強大,往往根本不需要上網(wǎng)搜索打開幫助查閱即可知道問題出在哪里。對于本課題希望老師能夠?qū)SM收發(fā)短信和溫度測量分開,6天時間要完成這兩個任務(wù)真的壓力很大,也希望能夠更換GSM模塊,華為公司的GTM900B不但已經(jīng)停產(chǎn),
11、而且網(wǎng)上資料少,大部分人都采用西門子公司的產(chǎn)品,我想換用西門子公司的產(chǎn)品有助于同學(xué)們的學(xué)習(xí)。 陳墨:本次課設(shè)我結(jié)合了上學(xué)期所學(xué)的51單片機理論知識,第一次完成了一個完整的項目。我學(xué)會了該如何寫一個完整的代碼,該如何將程序燒進單片機,該如何進行單片機程序的調(diào)試。在課設(shè)中我發(fā)現(xiàn)了查閱資料的重要性,初始化程序,中斷,以及LCD輸出程序都可以通過參考資料來完善。課程建議希望以后能夠在理論學(xué)習(xí)時增加單片機的學(xué)習(xí)課時,讓我們對于單片機有更多的了解和認識,這樣才能更科學(xué),更容易地完成本次課設(shè)。參考文獻1 周月霞,孫傳友.DS18B20硬件連接及軟件編程J.傳感器世界.2001(12)2 農(nóng)靜,鄭宗亞,劉志杰
12、.單總線數(shù)字溫度傳感DS18B20原理及應(yīng)用J. 貴州師范大學(xué)學(xué)報(自然科學(xué)版). 2007(03)3 易麗華,黃俊. 基于AT89C51單片機與DS18B20的溫度測量系統(tǒng)J.電子與封裝.2009(05)4 周青云,王建勛. 基于USB接口與LabVIEW的數(shù)據(jù)采集系統(tǒng)設(shè)計J. 實驗室研究與探索. 2011(08)5 王建勛,周青云. 基于DS18B20和LabVIEW的溫度監(jiān)測系統(tǒng)J. 實驗室研究與探索.2012(03)6 呂向鋒,高洪林, 馬亮,王新華. 基于LabVIEW串口通信的研究J. 國外電子測量技術(shù).2009(12)附錄A.下位機程序#include"Reg52.H&
13、quot; / 調(diào)用MCS51寄存器頭文件#include"intrins.H"#include "LCD1602.H"#include "DS18B20B.H"#include"stdio.h"#include<math.h>#define uchar unsigned char#define uint unsigned int#define SKIP_ROM_COMMAND 0xCC /跳過ROM匹配操作 #defineCONVERT_TEMPERATURE0x44/啟動溫度轉(zhuǎn)換#defineREA
14、D_SCRATCHPAD0xBE/ 讀溫度中間暫存寄存器#define N 45872/N=50ms/1.09usUINT8 PresencePlusA; /DS18B20A應(yīng)答脈沖/*定義引腳單片機 DS18B20P16 DQA */ sbit DQA = P32; /定義DS18B20A數(shù)據(jù)線long Voltage_value;int y=0,z=0;uchar flag,b,t_cnt;float a4;int t,z;unionint t;uchar c2; temp2;float Temp1,aa=30,bb=26;uchar tt2;uchar rxbuf5;uchar rbi=
15、0;uint TTT;/*初始化DS18B20A.*/void DS18B20A_Init( void ) DQA = 0; /MCU產(chǎn)生復(fù)位信號 DelayUs(130); /低電平至少保持480Us DelayUs(130); DQA = 1; / MCU釋放信號線 DelayUs(40); /延時15-60us,等待DS18B20A應(yīng)答,為了保證準確,最好在60US以后再采集數(shù)據(jù)PresencePlusA = DQA; /接收應(yīng)答,返回0為成功,1為失敗 DelayUs(30); /延時/*向DS18B20A發(fā)送一個字節(jié)數(shù)據(jù).*/void DS18B20A_WiteData( UINT8
16、 mByte ) UINT8 i; for( i = 0; i < 8 ; i+ ) DQA = 0; / MCU拉低信號線,啟動傳輸 DQA = mByte & 0x01; /發(fā)送數(shù)據(jù)到信號線上 DelayUs(50); /延時至少大于60us,小于120usDQA = 1; /MCU釋放信號線 mByte >>= 1; /數(shù)據(jù)右移一位 DelayUs(10); / 連續(xù)寫的話,稍微延時/*從DS18B20讀取數(shù)據(jù),返回讀取到的數(shù)據(jù)*/UINT8 DS18B20A_ReadData( void ) UINT8 i; UINT8 Data = 0; for( i =
17、0; i < 8 ; i+ ) DQA = 0; / MCU拉低信號線,啟動傳輸,低電平需大于1us Data >>= 1; /數(shù)據(jù)右移一位 DQA = 1; /MCU釋放信號線 if( DQA = 1 ) /單片機讀取信號線上數(shù)據(jù),需要在15US以內(nèi)采集完 Data |= 0x80; DelayUs(40); / 延時45us return ( Data ); /返回讀取到的數(shù)據(jù)/*DS18B20A溫度轉(zhuǎn)換. 返回UINT16 Temp:返回讀出的溫度.*/UINT16 TemperatureA_Conversion( ) UINT8 HighByte; UINT8 Low
18、Byte;UINT16 Temp; / 溫度 DS18B20A_Init(); /初始化DS18B20Aif( PresencePlusA = 0 ) DS18B20A_WiteData( SKIP_ROM_COMMAND ); / 跳過ROM匹配操作 DS18B20A_WiteData( CONVERT_TEMPERATURE ); / 啟動溫度轉(zhuǎn)換 while( !DS18B20A_ReadData() ); / 等待轉(zhuǎn)換完成 DS18B20A_Init(); / 再次初始化DS18B20Aif( PresencePlusA = 0 ) DS18B20A_WiteData( SKIP_RO
19、M_COMMAND ); / 跳過ROM匹配操作DS18B20A_WiteData( READ_SCRATCHPAD ); / 讀取溫度 LowByte = DS18B20A_ReadData(); HighByte = DS18B20A_ReadData(); Temp = ( (UINT16)HighByte << 8 ) | LowByte; / 計算溫度 return Temp; /返回讀出的溫度 /*串口部分聲明*/void Uart_init(void);void Send_data( void );unsigned int SenData; /用來存接收與發(fā)送的值vo
20、id change(float x);/*串口程序發(fā)送*/void Send_data (void) SBUF=SenData; /SUBF接受/發(fā)送緩沖器 while(TI=0); TI=0;/*串口初始化*/void Uart_init(void) /串口初始化 SCON = 0x50; /REN=1允許串行接受狀態(tài),串口工作模式1 TMOD|= 0x20; /定時器工作方式2 PCON|= 0x80; TH1 = 0xFD; /baud*2 reload value 19200、數(shù)據(jù)位8、停止位1。效驗位無 (11.0592) TL1 = 0xF3; TR1 = 1; ES = 1; /
21、開串口中斷 EA = 1; / 開總中斷 / IE = 0x0;void uartSend(uchar s)uchar i;for(i=0;i<2;i+)SBUF=si;while(!TI);TI=0;/*主函數(shù)*/void main( void ) UINT8 DisplayBuf16; / 存儲轉(zhuǎn)換后的溫度數(shù)據(jù) int Temp0; UINT8 MinusTempFlag = 0; / 負數(shù)溫度標志/*timer0*/TMOD=0x21;TH0=(65536-N)/256;TL0=(65536-N)%256;ET0=1;TR0=1;t_cnt=0;/*uart*/TMOD=0x20;
22、TH1=0xFD; /波特率19200TL1=0xFD;TR1=1;SM0=0;SM1=1;REN=1;ES=1;/*/ DelayMs( 200 );/ 上電延時 LCD1602_Init(); DelayMs( 200 ); LCD1602_WriteUSerCode(); / 寫入用戶自定義字符 DQA = 1; LCD1602_SetDisplayPosition(0,1); /顯示顯示位置 LCD1602_WriteString("YQ516 Board V2.2"); / 顯示字符 DelayMs( 2000 );Uart_init(); while(1) Te
23、mp0 = TemperatureA_Conversion( ); / DB18B20A溫度轉(zhuǎn)換并顯示 temp2.t=Temp0; if( Temp0 & 0x8000 ) /如果溫度為負數(shù) MinusTempFlag = 1; Temp0 = Temp0; / 取反 Temp0 += 1; / 取反后加1 else MinusTempFlag = 0; Temp1 = (float)Temp0 * 0.0625; / 計算溫度 if( MinusTempFlag ) / 如果是負溫度 sprintf(DisplayBuf," -%7.3f",Temp1); /將
24、Temp1的數(shù)據(jù)打印到DisplayBuf中,浮點數(shù),7位,3位小數(shù)點 else sprintf(DisplayBuf," %7.3f ",Temp1); / 將Temp1的數(shù)據(jù)打印到DisplayBuf中,浮點數(shù),7位,3位小數(shù)點 LCD1602_SetDisplayPosition(0,1); / 顯示顯示位置 LCD1602_WriteString(DisplayBuf); / 顯示溫度 LCD1602_SetDisplayPosition(9,1); / 設(shè)置自定義字符位置 LCD1602_WriteData(0x00); / 寫入溫度左上角點LCD1602_Set
25、DisplayPosition(10,1); LCD1602_WriteData('C'); / 寫入溫度C if(Temp1>aa) LCD1602_SetDisplayPosition(12,1); LCD1602_WriteData('H'); LCD1602_SetDisplayPosition(13,1); LCD1602_WriteData('I'); LCD1602_SetDisplayPosition(14,1); LCD1602_WriteData('G'); LCD1602_SetDisplayPosit
26、ion(15,1); LCD1602_WriteData('H'); if(Temp1<bb) LCD1602_SetDisplayPosition(12,1); LCD1602_WriteData('L'); LCD1602_SetDisplayPosition(13,1); LCD1602_WriteData('O'); LCD1602_SetDisplayPosition(14,1); LCD1602_WriteData('W'); LCD1602_SetDisplayPosition(15,1); LCD1602_W
27、riteData(' '); if(Temp1>bb)&&(Temp1<aa)LCD1602_SetDisplayPosition(12,1); LCD1602_WriteData(' '); LCD1602_SetDisplayPosition(13,1); LCD1602_WriteData(' '); LCD1602_SetDisplayPosition(14,1); LCD1602_WriteData(' '); LCD1602_SetDisplayPosition(15,1); LCD1602
28、_WriteData(' '); t=(int)Temp1; void T0_time() interrupt 1TH0=(65536-45872)/256;TL0=(65536-45872)%256;t_cnt+;if(t_cnt=20)/TTT=(uint)Temp1;/tt0=(uchar)temp2;/tt1=(uchar)(TTT&0x0F);uartSend(temp2.c);t_cnt=0; /*主函數(shù)結(jié)束*/*中斷4*/void serial() interrupt 4if(RI)rxbufrbi=SBUF;RI=0;rbi+;if(rxbuf0!=0x
29、ff) rbi=0;else if(rbi=5)bb=(rxbuf1*255+rxbuf2)/100;aa=(rxbuf3*255+rxbuf4)/100;rbi=0;else TI=0;/* LCD1602接口子程序.*/#include"reg52.h" /調(diào)用頭文件,單片機內(nèi)部寄存器都定義在此,用的時候需要先調(diào)用typedef unsigned char UINT8; /給unsigned char重新定義一個別名UINT8,用的時候直接寫UINT8就可以 typedef unsigned int UINT16; /給unsigned int重新定義一個別名UINT1
30、6,用的時候直接寫UINT16就可以/* 引腳定義 單片機 LCD1602P24 RSP25 RWP26 ENP0 D0 - D7*/sbit LCD_RS = P10; / 數(shù)據(jù)、指令選擇信號sbit LCD_RW = P11; / 讀寫選擇信號sbit LCD_EN = P12; / 讀寫使能信號#define DATA_PORT P0 / 數(shù)據(jù)端口/*1.RS = 1為數(shù)據(jù)操作;RS = 0為寫指令或讀狀態(tài).2.RW = 1為讀選通;RW = 0為寫選通.3. 在EN下降沿,數(shù)據(jù)被鎖存到LCD1602,在EN高電平期間,數(shù)據(jù)被讀出.4. D0 - D7,數(shù)據(jù)總線.*/*命令碼*/#def
31、ine CLEAR_DISPLAY 0x01 / 清屏/* 功能設(shè)置 */#define SET_OPERATING_MODE 0x38 / 工作方式設(shè)置/* 0X38: 8位數(shù)據(jù)接口;兩行顯示;5 * 8 點陣字符 */* 顯示開關(guān)控制 */#define SET_DISPLAY 0x08 / 顯示命令#define SET_DISPLAY_D 0x04 / 開顯示#define SET_DISPLAY_C 0x02 / 開光標#define SET_DISPLAY_B 0x01 / 開閃爍/* 輸入方式設(shè)置 */#define SET_INPUT_MODE 0x06 /讀寫數(shù)據(jù)后,AC自動
32、加一,畫面不動/* DDRAM地址設(shè)置 */#define SET_DDRAM_ADDRESS1 0x80 / 第一行顯示地址0x00-0x2F #define SET_DDRAM_ADDRESS2 0xC0 / 第一行顯示地址0x40-0x67/*延時微秒.輸入: UINT8 Us:要延時的時間 3+ US*2.*/void DelayUs( UINT8 Us )while(-Us);/*延時毫秒.輸入: UINT8 Ms:要延時的Ms時間.*/void DelayMs( UINT16 Ms )UINT8 i;while (Ms-) for ( i = 0; i < 114; i+ )
33、; / 大概1MS,不是很精確 /*檢查LCD1602是否忙.BusyFlag = 1,LCD1602正忙,需等待;BusyFlag = 0,LCD1602空閑,可以寫;*/void LCD1602_CheckBusy( void ) UINT8 BusyFlag; / 忙標志 BusyFlag = 1; / 先置位忙標志 while ( BusyFlag ) / 如果忙,一直等待 LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;BusyFlag = DATA_PORT & 0x80;DelayUs(1); / 稍微延時后繼續(xù)查詢 LCD_EN = 0; / 拉低EN
34、 /*向LCD1602寫入命令.RS = 0, RW = 0,EN下降沿將P0端口命令寫入LCD1602。輸入: UINT8 Cmd:要寫入的命令碼.*/void LCD1602_WriteCommand( UINT8 Cmd ) LCD1602_CheckBusy( ); /檢查LCD1602是否忙 LCD_RS = 0; LCD_RW = 0; LCD_EN = 1; DATA_PORT = Cmd; DelayUs(1); / 等待命令寫完 LCD_EN = 0;/* 向LCD1602寫入數(shù)據(jù).RS = 1, RW = 0,EN下降沿將P0端口命令寫入LCD1602。輸入: UINT8
35、WrData:要寫入的數(shù)據(jù).*/void LCD1602_WriteData( UINT8 WrData ) LCD1602_CheckBusy( ); / 檢查LCD1602是否忙 LCD_RS = 1; LCD_RW = 0; LCD_EN = 1; DATA_PORT = WrData; DelayUs(1); / 等待數(shù)據(jù)寫完 LCD_EN = 0;/* 初始化LCD1602.*/void LCD1602_Init() LCD1602_WriteCommand( SET_OPERATING_MODE ); / 8位數(shù)據(jù)端口,16*2行顯示,5*8字符 LCD1602_WriteComm
36、and( SET_DISPLAY | SET_DISPLAY_D ); / 開顯示 LCD1602_WriteCommand( SET_INPUT_MODE ); /讀寫數(shù)據(jù)后,移動光標,畫面不動 LCD1602_WriteCommand( CLEAR_DISPLAY ); / 清屏 /*設(shè)定數(shù)據(jù)顯示位置.輸入: UINT8 Xpos:橫向位置;UINT8 Ypos:縱向位置.*/void LCD1602_SetDisplayPosition( UINT8 Xpos, UINT8 Ypos ) if( Ypos = 0x01 ) / 第一行顯示 LCD1602_WriteCommand( Xp
37、os | SET_DDRAM_ADDRESS1 ); / 設(shè)置顯示地址 if ( Ypos = 0x02 ) /第二行顯示 LCD1602_WriteCommand( Xpos | SET_DDRAM_ADDRESS2 ); / 設(shè)置顯示地址 /*向LCD1602寫入字符串.輸入: UINT8 *Str:指向字符串緩沖區(qū)地址.*/void LCD1602_WriteString( UINT8 *Str ) UINT8 ByteCnt = 0; while ( *Str != 0x00 ) LCD1602_WriteData( *Str ); / 寫入數(shù)據(jù) Str+; / 指向下一個要寫的數(shù)據(jù) /*寫入用戶自定義字符,CGRAM地址是0-0x3F.*/void LCD1602_WriteUSerCode( ) LCD1602_WriteCommand( 0x40 ); / 自定義字符CGRAM地址 LCD1602_WriteData(0x03); / 第一行數(shù)據(jù) LCD1602_WriteCommand( 0x41 ); LCD1602_WriteData(0x03); / 第二行數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人企業(yè)用人合同范本
- 產(chǎn)權(quán)商用租房合同范本
- 養(yǎng)殖出售合同范例
- 勞動合同兼職合同范例
- 幼兒園師幼互動中存在的問題及解決策略或建議
- 2025年度建筑工程施工合同履約驗收標準范本
- 專利交易中介服務(wù)合同范本
- 公眾號收購合同范例
- 足浴店勞動合同范本
- 豆制品供貨合同范本
- GB/T 8014.1-2005鋁及鋁合金陽極氧化氧化膜厚度的測量方法第1部分:測量原則
- GB/T 3860-2009文獻主題標引規(guī)則
- 股票基礎(chǔ)知識(入市必讀)-PPT
- 雅思閱讀題型與技巧課件
- 招商銀行房地產(chǎn)貸款壓力測試
- 公文與公文寫作課件
- 車削成形面和表面修飾加工課件
- 基于振動信號的齒輪故障診斷方法研究
- 義務(wù)教育物理課程標準(2022年版word版)
- 醫(yī)療器械分類目錄2002版
- DB11_T1713-2020 城市綜合管廊工程資料管理規(guī)程
評論
0/150
提交評論