基于ds18b20溫度帶上限程序--LCD1602液晶顯示 作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò ) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢(xún) 收藏 這是用1602來(lái)顯示的,程序是修改前面幾個(gè)實(shí)驗的,當溫度<40度時(shí)電風(fēng)扇不轉,當>=40度時(shí)電風(fēng)扇轉動(dòng),為參加電子比賽做的單片機系統實(shí)驗。程序為匯編語(yǔ)言(ASM),帶詳細注釋?zhuān)档眯率峙笥褏⒖迹?pre>全部程序:ORG 0000H;單片機內存分配申明!TEMPER_L EQU 29H;用于保存讀出溫度的低8位TEMPER_H EQU 28H;用于保存讀出溫度的高8位FLAG1 EQU 38H;是否檢測到DS18B20標志位a_bit equ 20h ;數碼管個(gè)位數存放內存位置b_bit equ 21h ;數碼管十位數存放內存位置RS EQU P3.7;確定具體硬件的連接方式RW EQU P3.6 ;確定具體硬件的連接方式E EQU P3.5 ;確定具體硬件的連接方式;主程序MAIN:LCALL GET_TEMPER;調用讀溫度子程序MOV A,29HMOV C,40H;將28H中的最低位移入CRRC AMOV C,41HRRC AMOV C,42HRRC AMOV C,43HRRC AMOV 29H,Aclr csetb p3.0;zhelikais從這里開(kāi)始是我填加的溫度控制CJNE A,#28H,FITSETB P3.0AJMP DISLEDFIT:CPL CMOV P3.0,C;jiesu到這里結束DISLED:LCALL DISPLAY;調用數碼管顯示子程序AJMP MAIN;DS18B20復位初始化子程序INIT_1820:SETB P2.2NOPCLR P2.2;主機發(fā)出延時(shí)537微秒的復位低脈沖MOV R1,#3TSR1:MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB P2.2;然后拉高數據線(xiàn)NOPNOPNOPMOV R0,#25HTSR2:JNB P2.2,TSR3;等待DS18B20回應DJNZ R0,TSR2LJMP TSR4 ; 延時(shí)TSR3:SETB FLAG1 ; 置標志位,表示DS1820存在CLR P1.7;檢查到DS18B20就點(diǎn)亮P1.7LED,與傳感器通信成功LJMP TSR5TSR4:CLR FLAG1 ; 清標志位,表示DS1820不存在CLR P1.1;未檢查到DS18B20就點(diǎn)亮P1.1LED,與傳感器通信失敗LJMP TSR7TSR5:MOV R0,#117TSR6:DJNZ R0,TSR6 ; 時(shí)序要求延時(shí)一段時(shí)間TSR7:SETB P2.2RET;讀出轉換后的溫度值的子程序GET_TEMPER:SETB P2.2LCALL INIT_1820;先復位DS18B20JB FLAG1,TSS2CLR P1.2RET ; 判斷DS1820是否存在?若DS18B20不存在則返回TSS2:CLR P1.3;DS18B20已經(jīng)被檢測到!MOV A,#0CCH ; 跳過(guò)ROM匹配LCALL WRITE_1820MOV A,#44H ; 發(fā)出溫度轉換命令LCALL WRITE_1820LCALL DISPLAY;這里通過(guò)調用顯示子程序實(shí)現延時(shí)一段時(shí)間,等待AD轉換結束,12位的話(huà)750微秒LCALL INIT_1820;準備讀溫度前先復位MOV A,#0CCH ; 跳過(guò)ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 發(fā)出讀溫度命令LCALL WRITE_1820LCALL READ_18200; 將讀出的溫度數據保存到35H/36HCLR P1.4RET 上一頁(yè) 1 2 下一頁(yè)
評論