⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd1602_temp_v1.1.lst

📁 得用18B20传感器
💻 LST
📖 第 1 页 / 共 4 页
字号:
                     243     ;----------------------------
019A E52B            244     MOV A,2BH
019C 75F00A          245     MOV B,#10
019F 84              246     DIV AB
01A0 85F043          247     MOV 43H,B ;低温限值位个位 
01A3 75F00A          248     MOV B,#10
01A6 84              249     DIV AB
01A7 85F044          250     MOV 44H,B ;十位
01AA F545            251     MOV 45H,A ;百位
                     252     
01AC 01DB            253     AJMP KEY_IN 
                     254     
A51 MACRO ASSEMBLER  LCD1602_TEMP_V1_1                                                    09/17/2007 14:00:32 PAGE     5

                     255     
01AE                 256     KEY_CPL:
01AE B201            257     CPL 01H
01B0 01DB            258     AJMP KEY_IN
                     259     
                     260     
                     261     
                     262     
01B2                 263     EXT_KEY:
01B2 758001          264     MOV P0,#00000001B ;清屏并光标复位
01B5 516B            265     CALL ENABLE;调用写入命令子程序
01B7 71CE            266     CALL DISPLAY_SAVE
                     267     
01B9 31FA            268     CALL RESET
01BB 31E6            269     CALL SKIP_ROM
01BD 744E            270     MOV A,#4EH
01BF 511B            271     CALL WRITE
01C1 E52A            272     MOV A,2AH ;2A数据送高温限值寄存器.
01C3 511B            273     CALL WRITE
01C5 E52B            274     MOV A,2BH ;2B数据送低温限什寄存器.
01C7 511B            275     CALL WRITE
                     276     
01C9 31FA            277     CALL RESET 
01CB 31E6            278     CALL SKIP_ROM
01CD 7448            279     MOV A,#48H ;将高低温限值寄存器数据送18B20-EPROM保存.
01CF 511B            280     CALL WRITE
01D1                 281     A_END:
                     282     
01D1 22              283     RET
                     284     
                     285     
                     286     
                     287     
                     288     
                     289     
                     290     
                     291     ;***************18b20指令子程序**********************
01D2                 292     READ_TEMP:  ;读1820内部温度子程序.
01D2 31FA            293          CALL RESET
01D4 20700E          294          JB 70h,EXT1 
01D7 31E6            295          CALL SKIP_ROM 
01D9 31F0            296          CALL TEMP_CONV ;温度AD变换
01DB 913F            297          CALL DELAY_600MS  ;时........
01DD 31FA            298          CALL RESET
01DF 31E6            299          CALL SKIP_ROM 
01E1 31F5            300          CALL TEMP_GET ;发取温度的命令
01E3 5134            301          CALL READ ;接收...
01E5                 302               EXT1:
01E5 22              303          RET 
                     304     
01E6                 305     SKIP_ROM:;跳过ROM检测
01E6 74CC            306         MOV A,#0CCH ;#0CCH为跳过rom命令
01E8 511B            307         CALL WRITE
01EA 22              308         RET 
                     309     
01EB                 310     RECALL_EPROM:;重调Eprom
01EB 74B8            311         MOV A,#0B8H
01ED 511B            312         CALL WRITE
01EF 22              313         RET 
                     314     
                     315      
01F0                 316     TEMP_CONV:
01F0 7444            317         MOV A,#44H ;AD变换
01F2 511B            318              CALL WRITE
01F4 22              319              RET
                     320     
A51 MACRO ASSEMBLER  LCD1602_TEMP_V1_1                                                    09/17/2007 14:00:32 PAGE     6

01F5                 321     TEMP_GET:
01F5 74BE            322         MOV A ,#0BEH;读18b20命令
01F7 511B            323         CALL WRITE
01F9 22              324         RET 
                     325     
                     326     
                     327     ;****************************18B20基本时序子程序*********************************
01FA                 328     RESET:  ;初始化子程序
01FA D2A7            329        SETB P2.7 
01FC 00              330        NOP 
01FD C2A7            331        CLR P2.7    ;拉低
01FF 7B96            332        MOV R3,#150 ; *4=600US
0201 9128            333        CALL DELAY_BY_R3
0203 D2A7            334        SETB P2.7    ;拉高
0205 7B0F            335        MOV R3,#15  ; 60US
0207 9128            336        CALL DELAY_BY_R3
0209 7B3C            337        MOV R3,#60 ;4个周期*60=240US内检测 
020B 30A706          338     A1: JNB P2.7,A2 ;检测到低平信号
020E DBFB            339         DJNZ R3,A1 ;如果没有应答的低电平信号,返回A1重新检测,超时后下一行,
0210 D270            340         SETB 70h ;DS1820不存在.
0212 8006            341         JMP A3
0214 C270            342     A2: CLR 70h
0216 AB78            343         MOV R3,120;240US;等恢复时间2*120=240us
0218 DBFE            344         DJNZ R3, $
021A                 345     A3: 
021A 22              346        RET
                     347     ;------------------------
                     348     
021B                 349     WRITE:
021B 7A08            350         MOV R2,#8;一个字节为8位
021D C3              351         CLR C ;C位清0 C位用来放A的一位数据,用移位的方法放入C
021E D2A7            352     B1: SETB P2.7
0220 00              353              NOP 
0221 C2A7            354         CLR P2.7
0223 7B04            355              MOV R3,#4 ;16US
0225 9128            356              CALL DELAY_BY_R3
0227 13              357              RRC A        ;把A中的数送入C
0228 92A7            358              MOV P2.7,C   ;把C送入总线
022A 7B0C            359         MOV R3,#12    ;48US(一位数据的发送:60us<tx<120us)
022C 9128            360              CALL DELAY_BY_R3
022E D2A7            361              SETB P2.7  ;拉高1us结束一位
0230 00              362              NOP 
0231 DAEB            363              DJNZ R2,B1
0233 22              364              RET
                     365     
0234                 366     READ:
0234 7904            367     MOV R1,#4 ;接收4个字节数据依次是1.低位 2.高位. 3.高限 4.低限
0236 7828            368     MOV R0,#28H;低位放28H;高位放29h (1. 28H,2. 29H 3. 2AH 4. 2BH )
0238 7A08            369     C0: MOV R2,#8;一字节数据8位
023A C3              370     C1: CLR C ;清除C
023B D2A7            371     SETB P2.7
023D 00              372     NOP 
023E 00              373     NOP 
023F C2A7            374     CLR P2.7 ;拉低.
0241 00              375     NOP ;1us秒后拉高?
0242 D2A7            376     SETB P2.7
0244 7B04            377     MOV R3,#4  ;16us后采数据
0246 9128            378     CALL DELAY_BY_R3
0248 A2A7            379     MOV C,P2.7 ;读出18b20的数据
024A 13              380     RRC  A ;移入A
024B 7B0C            381     MOV R3,#12;48US恢复时间
024D 9128            382     CALL DELAY_BY_R3
024F DAE9            383     DJNZ R2,C1 ;一个字节收完
0251 F6              384     MOV @R0,A  ;移入存储位
0252 08              385     INC  R0     ;下一位;29h
0253 D9E3            386     DJNZ R1,C0 ;全部取完吗?没有重复
A51 MACRO ASSEMBLER  LCD1602_TEMP_V1_1                                                    09/17/2007 14:00:32 PAGE     7

0255 22              387     RET 
                     388     ;*********************************************************************************
                     389     
                     390     
                     391     
                     392     ;*****************LCD_控制命令***************
0256 E9              393     DISPLAY: MOV A,R1
0257 93              394     MOVC A,@A+DPTR
0258 F580            395     MOV P0,A
025A 518E            396     CALL WRITE_DATA_TO_LCD
025C 09              397     INC R1
025D D8F7            398     DJNZ R0,DISPLAY
025F 22              399     RET 
                     400     
                     401     
0260                 402     WRITE_NOT_CHECK_BUSY:
0260 D2B2            403     SETB E 
0262 00              404     NOP
0263 00              405     NOP 
0264 C2B0            406     CLR RS ;写入控制命令的子程序
0266 C2B1            407     CLR RW 
0268 C2B2            408     CLR E 
026A 22              409     RET 
                     410     
                     411     
026B                 412     ENABLE:
026B D2B2            413     SETB E
026D 00              414     NOP
026E 00              415     NOP
026F C2B0            416     CLR RS ;写入控制命令的子程序
0271 C2B1            417     CLR RW 
0273 C2B2            418     CLR E 
0275 517A            419     ACALL TEST_BUSY
0277 D2B2            420     SETB E 
0279 22              421     RET
                     422     
                     423     
027A                 424     TEST_BUSY:
027A D2B2            425     SETB E 
027C 00              426     NOP
027D 00              427     NOP 
027E 7580FF          428     MOV P0,#0FFH ;判断液晶显示器是否忙的子程序
0281 C2B0            429     CLR RS 
0283 D2B1            430     SETB RW
0285 C2B2            431     CLR E 
0287 00              432     NOP 
0288 D2B2            433     SETB E 
028A 2087ED          434     JB P0.7,TEST_BUSY ;如果P1.7为高电平表示忙就循环等待 
028D 22              435     RET
                     436     
                     437     
028E                 438     WRITE_DATA_TO_LCD:
028E D2B2            439     SETB E 
0290 00              440     NOP
0291 00              441     NOP
0292 D2B0            442     SETB RS ;RS=1 
0294 C2B1            443     CLR RW ;RW=0 ;准备写入数据
0296 C2B2            444     CLR E ;E=0 ;执行显示命令
0298 517A            445     ACALL TEST_BUSY ;判断液晶模块是否忙?
029A D2B2            446     SETB E ;E=1 ;显示完成,程序停车
029C 22              447     RET 
                     448     
                     449     
                     450     
                     451     
                     452     ;***************************数据转换***************************
A51 MACRO ASSEMBLER  LCD1602_TEMP_V1_1                                                    09/17/2007 14:00:32 PAGE     8

029D                 453     DATA_CONV:  ;数据转换
029D E528            454     MOV A,28H ;低字节
029F 540F            455     ANL A,#0FH;去除高位
02A1 75F006          456     MOV B,#6;乘6得到实际数值的100倍.
02A4 A4              457     MUL AB
02A5 75F00A          458     MOV B,#10
02A8 84              459     DIV AB
02A9 F533            460     MOV 33H,A;小数位高
02AB 85F032          461     MOV 32H,B; 小数位低
02AE E528            462     MOV A,28H
02B0 A248            463     MOV C,29H.0 ;29h高位的低4字节
02B2 13              464     RRC A 
02B3 A249            465     MOV C,29H.1
02B5 13              466     RRC A 
02B6 A24A            467     MOV C,29H.2
02B8 13              468     RRC A 
02B9 A24B            469     MOV C,29H.3
02BB 13              470     RRC A 
02BC F528            471     MOV 28H,A ;重新合成.结果存在28H.
02BE E528            472     MOV A,28H
02C0 75F00A          473     MOV B,#10
02C3 84              474     DIV AB 
02C4 F526            475     MOV 26H,A ;整数位高
02C6 85F025          476     MOV 25H,B ;整数位低 
                     477     ;-------------------------
02C9 E52A            478     MOV A,2AH
02CB 75F00A          479     MOV B,#10
02CE 84              480     DIV AB
02CF 85F040          481     MOV 40H,B ;高温限值个位 
02D2 75F00A          482     MOV B,#10
02D5 84              483     DIV AB
02D6 85F041          484     MOV 41H,B;十位
02D9 F542            485     MOV 42H,A;百位
                     486     ;----------------------------
02DB E52B            487     MOV A,2BH
02DD 75F00A          488     MOV B,#10
02E0 84              489     DIV AB
02E1 85F043          490     MOV 43H,B ;低温限值位个位 
02E4 75F00A          491     MOV B,#10
02E7 84              492     DIV AB
02E8 85F044          493     MOV 44H,B ;十位

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -