




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、武漢理工大學(xué)單片機原理與應(yīng)用課程設(shè)計說明書1 課設(shè)所需軟件簡介1.1 Keil uVision4的簡要介紹 2009年2月發(fā)布Keil Vision4,Keil Vision4引入靈活的窗口管理系統(tǒng),使開發(fā)人員能夠使用多臺監(jiān)視器,并提供了視覺上的表面對窗口位置的完全控制的任何地方。新的用戶界面可以更好地利用屏幕空間和更有效地組織多個窗口,提供一個整潔,高效的環(huán)境來開發(fā)應(yīng)用程序。新版本支持更多最新的ARM芯片,還添加了一些其他新功能。 2011年3月ARM公司發(fā)布最新集成開發(fā)環(huán)境RealView MDK開發(fā)工具中集成了最新版本的Keil uVision4,其編譯器、調(diào)試工具實現(xiàn)與ARM器件的最完
2、美匹配。Keil C51開發(fā)系統(tǒng)基本知識Keil C51開發(fā)系統(tǒng)基本知識 1. 系統(tǒng)概述 Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。下面詳細(xì)介紹Keil C51開發(fā)系統(tǒng)各部分功能和使用。 2. Keil C51單片機軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu) C51工具包的整體結(jié)構(gòu),uVision與Ishell分別是C51 for Windows和for Dos的集成開發(fā)環(huán)境(IDE),可
3、以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進行調(diào)試,也可以直接寫入程序存貯器如EPROM中。 使用獨立的Keil仿真器時,注意事項 :* 仿真器標(biāo)配11.0592MHz的晶振,但用戶可以在仿真器上的晶振插孔中換插其他頻率的晶振。 * 仿真
4、器上的復(fù)位按鈕只復(fù)位仿真芯片,不復(fù)位目標(biāo)系統(tǒng)。 * 仿真芯片的31腳(/EA)已接至高電平,所以仿真時只能使用片內(nèi)ROM,不能使用片外ROM;但仿真器外引插針中的31腳并不與仿真芯片的31腳相連,故該仿真器仍可插入到擴展有外部ROM(其CPU的/EA引腳接至低電平)的目標(biāo)系統(tǒng)中使用。 優(yōu)點:1.Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。 2.與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。 Keil C51軟件提供豐富的庫函數(shù)和功能強大
5、的集成開發(fā)調(diào)試工具,全Windows界面。圖1.1 KEIL操作界面1.2 STC-ISP的簡要介紹STC-ISP 是一款單片機下載編程燒錄軟件,是針對STC系列單片機而設(shè)計的,可下載STC89系列、12C2052 系列和12C5410等系列的STC單片機,使用簡便,現(xiàn)已被廣泛使用。操作說明如下:(1) 打開STC-ISP,如下圖界面,在MCU Type欄目下選中單片機,如STC89C52RC。 圖1.2 ISP操作界面(2) 根據(jù)您的9針數(shù)據(jù)線連接情況選中COM端口,波特率一般保持默認(rèn),如果遇到下載問題,可以適當(dāng)下調(diào)一些。(3) 先確認(rèn)硬件連接正確,點擊“打開文件”并在對話框內(nèi)找到您要下載的
6、HEX文件。圖1.3 選擇HEX文件(4)選擇所要下載的文件,這樣可以使您在每次編譯KEIL時HEX代碼能自動加載到STC-ISP,點擊“Download/下載”。(5) 手動按下電源開關(guān)便即可把可執(zhí)行文件HEX寫入到單片機內(nèi),如圖是正在寫入程序截圖。(6)程序?qū)懭胪戤?,目?biāo)板開始運行程序結(jié)果。2 方案分析與確定2.1 方案思路分析 由題目要求,根據(jù)設(shè)置的年份日的顯示全年的年月公歷、星期等信息。由于需要顯示去年的日期以及星期等信息,普通的LED數(shù)碼管顯然已經(jīng)不能勝任,為此,我們可以選擇LCD1602液晶顯示器完成課設(shè)要求。目前所具備的設(shè)備只有一塊以STC89C52為內(nèi)核的單片機,PC機。 課設(shè)
7、要求顯示日期等信息,我們可以充分利用單片機上面集成的DS1302時鐘芯片。該芯片可以產(chǎn)生年份,月份,日期,星期,時,分,秒的數(shù)據(jù),因此,完全可以完成實驗的各項要求?;谝陨戏治?,我們可以利用DS1302產(chǎn)生的各種時鐘數(shù)據(jù),由CPU完成對數(shù)據(jù)的讀取,然后通過CPU將數(shù)據(jù)寫至LCD1602,以顯示數(shù)據(jù),達到可視化的效果。對于課程設(shè)計的拓展部分,我們可以利用單片機開發(fā)板上面集成的DS18B20溫度傳感器來測試周圍環(huán)境的溫度,同樣通過LCD1602來顯示。此外可以通過測試按鍵是否閉合來改變各種時間數(shù)據(jù),已達到校準(zhǔn)的目的。CPULCD1602DS1302DS18B20圖2.1 整體設(shè)計框架圖2.2 方案
8、流程圖根據(jù)以上分析,以及使用各種芯片的操作流程,我們可以大致確定課程設(shè)計的軟件設(shè)計方案方案,其大致流程如下:重新設(shè)置時間,并寫至進DS1302的寄存器檢測是否有時間校準(zhǔn)按鍵按下CPU將數(shù)據(jù)送至LCD1602顯示CPU讀取DS18B20 ,DS1302的溫度和時間數(shù)據(jù)完成與DS18B20,LCD1602,DS1302相關(guān)的初始化設(shè)置完成與DS18B20,LCD1602,DS1302相關(guān)的子函數(shù)的編程相關(guān)引腳的特殊位定義相關(guān)數(shù)字及字母數(shù)組設(shè)置開始圖2.2 設(shè)計流程圖3 單元芯片電路的設(shè)置及總體設(shè)計3.1 DS1302芯片引腳功能 DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RA
9、M的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進行涓細(xì)電流充電的能力。 DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc
10、1+0.2V時,Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RS
11、T置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。SCLK為時鐘輸入端。 下圖為DS1302的引腳功能圖: 圖3.1 DS1302引腳圖管腳描述:X1 X2 32.768KHz 晶振管腳GND 地RST 復(fù)位腳I/O 數(shù)據(jù)輸入/輸出引腳SCLK 串行時鐘Vcc1,Vcc2 電源供電管腳 此外,拓展中用到了DS18B20溫度傳感器,其使用與DS1302比較類似,因此這里不再贅述。3.2 DS1302的使用方法使用DS1302時,要對其引腳和寄存器進行特殊設(shè)置,以實現(xiàn)所需功能。引腳設(shè)置后面會提及,這里不做說明,主要講一下程序的編寫。DS1302的的工作過程中包過讀寫一個字節(jié)數(shù)據(jù)等過
12、程,下面做相應(yīng)的解釋。/* 功 能:往DS1302寫入數(shù)據(jù)*/void W1302(uchar ucAddr, uchar ucDa) T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(ucAddr); /* 地址,命令 */ RTInputByte(ucDa); /* 寫1Byte數(shù)據(jù)*/ T_CLK = 1; T_RST = 0;/* 功 能:讀取DS1302某地址的數(shù)據(jù)*/uchar R1302(uchar ucAddr) uchar ucData; T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(ucAd
13、dr); /* 地址,命令 */ ucData = RTOutputByte(); /* 讀1Byte數(shù)據(jù) */ T_CLK = 1; T_RST = 0; return(ucData);/* 功 能:設(shè)置初始時間*/void Set1302(uchar *pClock) uchar i; uchar ucAddr = 0x80; EA = 0; W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作?*/ for(i =7; i>0; i-) W1302(ucAddr,*pClock); /* 秒 分 時 日 月 星期 年 */ pClock+; ucAddr +=2;
14、W1302(0x8e,0x80); /* 控制命令,WP=1,寫保護?*/EA = 1;/* 功 能:讀取DS1302當(dāng)前時間*/void Get1302(uchar ucCurtime) uchar i; uchar ucAddr = 0x81;EA = 0; for (i=0; i<7; i+) ucCurtimei = R1302(ucAddr);/*格式為: 秒 分 時 日 月 星期 年 */ ucAddr += 2; EA = 1;3.3 LCD1602引腳功能1602液晶也叫1602字符型液晶它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊它有若干個5X7或者5X11等
15、點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位之間有一個點距的間隔每行之間也有間隔起到了字符間距和行間距的作用,正因為如此所以他不能顯示圖形 n1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數(shù)字)。 圖3.2 LCD1602引腳圖1602采用標(biāo)準(zhǔn)的16腳接口,其中: 第1腳:VSS為電源地 第2腳:VDD接5V電源正極 第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會 產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度)。 第4腳:RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇
16、指令寄存器。 第5腳:RW為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。 第6腳:E(或EN)端為使能(enable)端。 第714腳:D0D7為8位雙向數(shù)據(jù)端。 第1516腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。3.4 LCD1602的使用LCD1602的使用與前面的DS1302的使用有類似的地方,包括引腳的設(shè)置和對應(yīng)的編程,引腳的設(shè)置后面會提及到,這里只涉及對應(yīng)的編程。/*LCD1602 延時*/void Lcd_delay(uchar ms) uchar j; while(ms-) for(j=0;j<250;j+) ; /*LCD1602 忙等待*
17、/void Lcd_busy_wait() Lcd_rs = 0; Lcd_rw = 1; Lcd_en = 1; Lcd_data = 0xff; while (Lcd_data&0x80); Lcd_en = 0; /*LCD1602 命令字寫入*/void Lcd_command_write(uchar command) Lcd_busy_wait(); Lcd_rs = 0; Lcd_rw = 0; Lcd_en = 0; Lcd_data = command; Lcd_en = 1; Lcd_en = 0; /*LCD1602 初始化*/void Init_lcd() Lcd
18、_delay(20); Lcd_command_write(0x38); Lcd_delay(100); Lcd_comman/*LCD1602 延時*/d_write(0x38); Lcd_delay(50); Lcd_command_write(0x38); Lcd_delay(10); Lcd_command_write(0x08); Lcd_command_write(0x01); Lcd_command_write(0x06); Lcd_command_write(0x0c); Lcd_data = 0xff; /*釋放數(shù)據(jù)端口*/void Lcd_char_write(uchar
19、x_pos,y_pos,lcd_dat) /*LCD1602 字符寫入*/ x_pos &= 0x0f; /* X位置范圍 015 */ y_pos &= 0x01; /* Y位置范圍 0 1 */ if(y_pos=1) x_pos += 0x40; x_pos += 0x80; Lcd_command_write(x_pos); Lcd_busy_wait(); Lcd_rs = 1; Lcd_rw = 0; Lcd_en = 0; Lcd_data = lcd_dat; Lcd_en = 1; Lcd_en = 0; Lcd_data = 0xff; /*釋放數(shù)據(jù)端口*/
20、4 整體電路設(shè)計和程序由上面的分析可以得到實驗的電路圖如下:圖4.1 仿真電路圖設(shè)計源代碼如下:/* 程序名稱: LCD1602顯示時間 顯示當(dāng)前溫度 */*頭文件*/#include <reg52.h> #include <intrins.h>#define uint unsigned int#define uchar unsigned char#define nop() _nop_()sbit s1=P10;sbit s2=P11;sbit s3=P12;sbit s4=P13;sbit DQ =P13; /定義DS18B20通信端口sbit lcd_rs_port
21、 = P24; /*定義LCD控制端口*/sbit lcd_rw_port = P25;sbit lcd_en_port = P26;#define lcd_data_port P0sbit led_latch_port = P25; /*發(fā)光二極管寄存器LE引腳*/sbit sled_latch_port = P36; /*數(shù)碼管寄存器LE引腳*/sbit T_CLK = P36; /*實時時鐘時鐘線引腳 */sbit T_IO = P34; /*實時時鐘數(shù)據(jù)線引腳 */sbit T_RST = P35; /*實時時鐘復(fù)位線引腳 */sbit ACC0 = ACC0;sbit ACC7 =
22、ACC7;uchar code mun_to_char = "0123456789ABCDEF" /*定義數(shù)字跟ASCII碼的關(guān)系*/uchar data time_data_buff7=0x50,0x59,0x23,0x31,0x12,0x04,0x12;/*格式為: 秒 分 時 日 月 星期 年 */uchar data lcd1602_line1=" 2000/00/00 000 "uchar data lcd1602_line2=" 00:00:00 00.0"uchar code Weeks3="SUN"
23、,"MON","TUE","WED","THU","FRI","SAT","SUN"/* 函 數(shù) 名:RTInputByte() 功 能:實時時鐘寫入一字節(jié) 說 明:往DS1302寫入1Byte數(shù)據(jù) (內(nèi)部函數(shù)) 入口參數(shù):d 寫入的數(shù)據(jù) 返 回 值:無 */void RTInputByte(uchar d) uchar i; ACC = d; for(i=8; i>0; i-) T_IO = ACC0; /*相當(dāng)于匯編中的 RRC */ T_CLK
24、 = 1; T_CLK = 0; ACC = ACC >> 1; /* 函 數(shù) 名:RTOutputByte() 功 能:實時時鐘讀取一字節(jié) 說 明:從DS1302讀取1Byte數(shù)據(jù) (內(nèi)部函數(shù)) 入口參數(shù):無 返 回 值:ACC*/uchar RTOutputByte(void) uchar i; for(i=8; i>0; i-) ACC = ACC >>1; /*相當(dāng)于匯編中的 RRC */ ACC7 = T_IO; T_CLK = 1; T_CLK = 0; return(ACC); /* 函 數(shù) 名:W1302() 功 能:往DS1302寫入數(shù)據(jù) 說 明
25、:先寫地址,后寫命令/數(shù)據(jù) (內(nèi)部函數(shù)) 調(diào) 用:RTInputByte() , RTOutputByte() 入口參數(shù):ucAddr: DS1302地址, ucData: 要寫的數(shù)據(jù) 返 回 值:無*/void W1302(uchar ucAddr, uchar ucDa) T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(ucAddr); /* 地址,命令 */ RTInputByte(ucDa); /* 寫1Byte數(shù)據(jù)*/ T_CLK = 1; T_RST = 0; /* 函 數(shù) 名:R1302() 功 能:讀取DS1302某地址的數(shù)據(jù) 說 明:
26、先寫地址,后讀命令/數(shù)據(jù) (內(nèi)部函數(shù)) 調(diào) 用:RTInputByte() , RTOutputByte() 入口參數(shù):ucAddr: DS1302地址 返 回 值:ucData :讀取的數(shù)據(jù)*/uchar R1302(uchar ucAddr) uchar ucData; T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(ucAddr); /* 地址,命令 */ ucData = RTOutputByte(); /* 讀1Byte數(shù)據(jù) */ T_CLK = 1; T_RST = 0; return(ucData);/* 函 數(shù) 名:Set1302()
27、功 能:設(shè)置初始時間 說 明:先寫地址,后讀命令/數(shù)據(jù)(寄存器多字節(jié)方式) 調(diào) 用:W1302() 入口參數(shù):pClock: 設(shè)置時鐘數(shù)據(jù)地址 格式為: 秒 分 時 日 月 星期 年 7Byte (BCD碼)1B 1B 1B 1B 1B 1B 1B 返 回 值:無*/void Set1302(uchar *pClock) uchar i; uchar ucAddr = 0x80; EA = 0; W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作?*/ for(i =7; i>0; i-) W1302(ucAddr,*pClock); /* 秒 分 時 日 月 星期 年
28、 */ pClock+; ucAddr +=2; W1302(0x8e,0x80); /* 控制命令,WP=1,寫保護?*/EA = 1;/* 函 數(shù) 名:Get1302() 功 能:讀取DS1302當(dāng)前時間 說 明: 調(diào) 用:R1302() 入口參數(shù):ucCurtime: 保存當(dāng)前時間地址。當(dāng)前時間格式為: 秒 分 時 日 月 星期 年 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B 返 回 值:無*/void Get1302(uchar ucCurtime) uchar i; uchar ucAddr = 0x81;EA = 0; for (i=0; i<7; i
29、+) ucCurtimei = R1302(ucAddr);/*格式為: 秒 分 時 日 月 星期 年 */ ucAddr += 2; EA = 1;/DS18B20延時函數(shù)void delay(unsigned int i)while(i-);/DS18B20初始化函數(shù)void Init_DS18B20(void)unsigned char x=0;DQ = 1; /DQ復(fù)位delay(8); /稍做延時DQ = 0; /單片機將DQ拉低delay(80); /精確延時 大于 480usDQ = 1; /拉高總線delay(14);x=DQ; /稍做延時后 如果x=0則初始化成功 x=1則初
30、始化失敗delay(20);/DS18B20讀一個字節(jié)uchar ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)DQ = 0; / 給脈沖信號dat>>=1;DQ = 1; / 給脈沖信號if(DQ) dat|=0x80;delay(4);return(dat);/DS18B20寫一個字節(jié)void WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i>0; i-)DQ = 0;DQ = dat&0
31、x01;delay(5);DQ = 1;dat>>=1;/DS18B20讀取溫度uint ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOneChar(0x44); / 啟動溫度轉(zhuǎn)換Init_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個
32、就是溫度a=ReadOneChar();b=ReadOneChar();t=b;t<<=8;t=t|a;tt=t*0.0625; /將溫度的高位與低位合并t= tt*10+0.5; /對結(jié)果進行4舍5入return(t);/-void lcd_delay(uchar ms) /*LCD1602 延時*/ uchar j; while(ms-) for(j=0;j<250;j+) ; void lcd_busy_wait() /*LCD1602 忙等待*/ lcd_rs_port = 0; lcd_rw_port = 1; lcd_en_port = 1; lcd_data_p
33、ort = 0xff; while (lcd_data_port&0x80); lcd_en_port = 0; void lcd_command_write(uchar command) /*LCD1602 命令字寫入*/ lcd_busy_wait(); lcd_rs_port = 0; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = command; lcd_en_port = 1; lcd_en_port = 0; void lcd_system_reset() /*LCD1602 初始化*/ lcd_delay(20); l
34、cd_command_write(0x38); lcd_delay(100); lcd_command_write(0x38); lcd_delay(50); lcd_command_write(0x38); lcd_delay(10); lcd_command_write(0x08); lcd_command_write(0x01); lcd_command_write(0x06); lcd_command_write(0x0c); lcd_data_port = 0xff; /*釋放數(shù)據(jù)端口*/void lcd_char_write(uchar x_pos,y_pos,lcd_dat) /
35、*LCD1602 字符寫入*/ x_pos &= 0x0f; /* X位置范圍 015 */ y_pos &= 0x01; /* Y位置范圍 0 1 */ if(y_pos=1) x_pos += 0x40; x_pos += 0x80; lcd_command_write(x_pos); lcd_busy_wait(); lcd_rs_port = 1; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = lcd_dat; lcd_en_port = 1; lcd_en_port = 0; lcd_data_port = 0xf
36、f; /*釋放數(shù)據(jù)端口*/ void keyscan() if(s1=0) lcd_delay(10);if(s1=0)time_data_buff1+;if(time_data_buff 1=0x5a) time_data_buff1=0x00;while(!s1);if(time_data_buff1=0x0a) time_data_buff 1=0x10; if(time_data_buff1=0x1a) time_data_buff1=0x20; if(time_data_buff1=0x2a) time_data_buff1=0x30; if(time_data_buff1=0x3a
37、) time_data_buff1=0x40; if(time_data_buff1=0x4a) time_data_buff1=0x50; Set1302(time_data_buff); if(s2=0) lcd_delay(10);if(s2=0)time_data_buff2+;if(time_data_buff2=0x24) time_data_buff2=0x00;if(time_data_buff2=0x0a) time_data_buff2=0x10; if(time_data_buff2=0x1a) time_data_buff2=0x20; while(!s2); Set1
38、302(time_data_buff); if(s3=0) lcd_delay(10);if(s3=0) time_data_buff5+; if(time_data_buff5=0x07) time_data_buff5=0x00; while(!s3); Set1302(time_data_buff); if(s4=0) lcd_delay(10);if(s4=0)time_data_buff3+;if(time_data_buff3=0x32) time_data_buff3=0x01;if(time_data_buff3=0x0a) time_data_buff3=0x10; if(t
39、ime_data_buff3=0x1a) time_data_buff3=0x20; if(time_data_buff3=0x2a) time_data_buff3=0x30; while(!s4); Set1302(time_data_buff); void main()uchar i;uint temp; /溫度值lcd_system_reset(); /*LCD1602 初始化*/lcd_data_port = 0xff; /*釋放P0端口*/led_latch_port = 0;sled_latch_port = 0;Set1302(time_data_buff); /*設(shè)置時間*/
40、while(1)Get1302(time_data_buff); /*讀取當(dāng)前時間*/temp = ReadTemperature(); /*讀取當(dāng)前溫度值*/*刷新顯示*/lcd1602_line13 = mun_to_chartime_data_buff6/0x10;lcd1602_line14 = mun_to_chartime_data_buff6%0x10; /*年*/lcd1602_line16 = mun_to_chartime_data_buff4/0x10;lcd1602_line17 = mun_to_chartime_data_buff4%0x10; /*月*/lcd16
41、02_line19 = mun_to_chartime_data_buff3/0x10;lcd1602_line110 = mun_to_chartime_data_buff3%0x10; /*日*/for(i=0;i<3;i+) lcd1602_line1i+12=Weekstime_data_buff5&0x07i; /*星期*/lcd1602_line22 = mun_to_chartime_data_buff2/0x10; lcd1602_line23 = mun_to_chartime_data_buff2%0x10; /*時*/lcd1602_line25 = mun
42、_to_chartime_data_buff1/0x10;lcd1602_line26 = mun_to_chartime_data_buff1%0x10; /*分*/lcd1602_line28 = mun_to_chartime_data_buff0/0x10;lcd1602_line29 = mun_to_chartime_data_buff0%0x10; /*秒*/ /-lcd1602_line212 = mun_to_chartemp/100;lcd1602_line213 = mun_to_chartemp%100/10;lcd1602_line215 = mun_to_chartemp%10; /*溫度*/-for(i=0;i<16;i+) lcd_char_write(i,0,lcd1602_line1i); for
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)商業(yè)用途抵押借款合同
- 2025年勞動合同終止賠償策劃范本大全
- 2025年店鋪管理人才聘用合同
- 身體規(guī)訓(xùn)的文化背景-深度研究
- 數(shù)字貨幣與資產(chǎn)定價關(guān)系研究-深度研究
- 藝術(shù)交流中的文化適應(yīng)-深度研究
- 水源保護與水質(zhì)改善-深度研究
- 極端環(huán)境下微生物適應(yīng)機制探索-深度研究
- 股票期權(quán)定價模型研究-深度研究
- 法規(guī)視域下的臨終關(guān)懷-深度研究
- 第15課 人機對話的實現(xiàn) 說課稿 六上信息科技浙教版(2023)001
- 消防維保年度工作計劃
- 統(tǒng)編版(2025新版)七年級下冊語文第一單元綜合測試卷(含答案)
- 棗莊學(xué)院《電力拖動與自動控制系統(tǒng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 醫(yī)師手術(shù)權(quán)限申請流程
- 2025年四川省宜賓敘州區(qū)事業(yè)單位考調(diào)83人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 米非司酮使用培訓(xùn)
- 二氧化碳捕集、運輸和地質(zhì)封存 - 地質(zhì)封存 征求意見稿
- 2024-2030年中國淀粉糖行業(yè)運行態(tài)勢與發(fā)展趨勢分析報告
- 診所信息保密和安全管理制度
- 護士臨床護理組長
評論
0/150
提交評論