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

📄 pcf8591-lcd1602-4ch-xianshi.lst

📁 89S52单片机做的A/D,D/A的实验的源程序PCF8591 D/A CONVERTER */ /* */ /* LCD1602显示 */ /* 参考电压接至5V电源 */ /* 最小输出电
💻 LST
📖 第 1 页 / 共 3 页
字号:
0166 22              227               RET
0167                 228     DELAY0:
0167 7FFA            229               MOV  R7,#250     ;延时500微秒
0169 DFFE            230               DJNZ  R7,$
016B 22              231               RET
                     232     
                     233     ;==========================================================
                     234     
                     235     ;ASCII 转换并在第二行显示数字子程序
                     236     
                     237     ;==========================================================
016C                 238     LCD_CONV1:
016C E547            239               MOV  A,DISSTART+2  ;加载数据
A51 MACRO ASSEMBLER  PCF8591_LCD1602_4CH_XIANSHI                                          12/20/2006 22:59:54 PAGE     5

016E 31A8            240               CALL  SHOW_DIG1   ;显示数据
0170 054F            241               INC  LCD_X         ;设置位置
0172 742E            242               MOV  A,#'.'
0174 854FF0          243               MOV  B,LCD_X
0177 31B0            244               CALL  LCDP1        ;显示小数点
0179 E546            245               MOV  A,DISSTART+1  ;加载数据
017B 054F            246               INC  LCD_X         ;设置位置
017D 31A8            247               CALL  SHOW_DIG1   ;显示数据
017F E545            248               MOV  A,DISSTART    ;加载数据
0181 054F            249               INC  LCD_X         ;设置位置
0183 31A8            250               CALL  SHOW_DIG1   ;显示数据
0185 22              251               RET
0186                 252     LCD_CONV2:
0186 E547            253               MOV  A,DISSTART+2  ;加载数据
                     254            ;   MOV  LCD_X,#10     ;设置位置
0188 31A0            255               CALL  SHOW_DIG2   ;显示数据
018A 054F            256               INC  LCD_X         ;设置位置
018C 742E            257               MOV  A,#'.'
018E 854FF0          258               MOV  B,LCD_X
0191 31BD            259               CALL  LCDP2        ;显示小数点
0193 E546            260               MOV  A,DISSTART+1  ;加载数据
0195 054F            261               INC  LCD_X         ;设置位置
0197 31A0            262               CALL  SHOW_DIG2   ;显示数据
0199 E545            263               MOV  A,DISSTART    ;加载数据
019B 054F            264               INC  LCD_X         ;设置位置
019D 31A0            265               CALL  SHOW_DIG2   ;显示数据
019F 22              266               RET
                     267     ;==========================================================
                     268     
                     269     ;数据转换为ASCII码,送显示
                     270     
                     271     ;==========================================================
01A0                 272     SHOW_DIG2:
01A0 2430            273               ADD  A,#30H     ;转换为ASCII码
01A2 854FF0          274               MOV  B,LCD_X    ;地址变量送B
01A5 31BD            275               CALL  LCDP2     ;送显示
01A7 22              276               RET
                     277     
01A8                 278     SHOW_DIG1:
01A8 2430            279               ADD  A,#30H     ;转换为ASCII码
01AA 854FF0          280               MOV  B,LCD_X    ;地址变量送B
01AD 31B0            281               CALL  LCDP1     ;送显示
01AF 22              282               RET
                     283     ;==========================================================
                     284     
                     285     ;在 LCD 第一行指定位置显示字符
                     286     ;(A)=ASCII 数据, (B)=位置变量
                     287     
                     288     ;==========================================================
01B0                 289     LCDP1:
01B0 C0E0            290               PUSH  ACC        ;入栈保护A
01B2 E5F0            291               MOV  A,B         ;设置显示地址
01B4 2480            292               ADD  A,#80H     ;设置LCD的第一行地址
01B6 314D            293               CALL  WCOM       ;写入命令
01B8 D0E0            294               POP  ACC         ;由堆栈取出A
01BA 315A            295               CALL  WDATA      ;写入数据
01BC 22              296               RET
                     297     ;==========================================================
                     298     
                     299     ;在 LCD 第二行指定位置显示字符
                     300     ;(A)=ASCII 数据, (B)=位置变量
                     301     
                     302     ;==========================================================
01BD                 303     LCDP2:
01BD C0E0            304               PUSH  ACC        ;入栈保护A
01BF E5F0            305               MOV  A,B         ;设置显示地址
A51 MACRO ASSEMBLER  PCF8591_LCD1602_4CH_XIANSHI                                          12/20/2006 22:59:54 PAGE     6

01C1 24C0            306               ADD  A,#0C0H     ;设置LCD的第二行地址
01C3 314D            307               CALL  WCOM       ;写入命令
01C5 D0E0            308               POP  ACC         ;由堆栈取出A
01C7 315A            309               CALL  WDATA      ;写入数据
01C9 22              310               RET
                     311     
                     312     ;====================================================================
                     313     ;显示数据转为三位BCD码子程序
                     314     ;显示数据转为三位BCD码存入DISSTART+2、
                     315     ;DISSTART+1、DISSTART(最大值5.00V)
                     316     ;显示数据初址在AD_TEMP中
                     317     ;255/51=5.00V 运算
                     318     ;====================================================================
01CA                 319     TUNBCD:
01CA E549            320                  MOV  A,AD_TEMP
01CC 75F033          321                  MOV  B,#51
01CF 84              322                  DIV  AB
01D0 F547            323                  MOV DISSTART+2,A   ;整数个位数放入DISSTART+2
01D2 E5F0            324                  MOV  A,B           ;余数大于1AH,F0为0,乘法溢出,结果加5
01D4 C2D5            325                  CLR  F0
01D6 941A            326                  SUBB  A,#1AH       ;相减不够,C=1 表示余数小于1AH(26)
01D8 92D5            327                  MOV  F0,C
01DA 740A            328                  MOV  A,#10
01DC A4              329                  MUL  AB            ;余数乘以10,相当于补0,继续除。
01DD 75F033          330                  MOV  B,#51
01E0 84              331                  DIV  AB            ;再除以51
01E1 20D502          332                  JB  F0,T_BCD1
01E4 2405            333                  ADD  A,#5
01E6                 334     T_BCD1:
01E6 F546            335                  MOV  DISSTART+1,A  ;小数后第一位放入DISSTART+1
01E8 E5F0            336                  MOV  A,B
01EA C2D5            337                  CLR  F0
01EC 941A            338                  SUBB  A,#1AH
01EE 92D5            339                  MOV  F0,C
01F0 740A            340                  MOV  A,#10
01F2 A4              341                  MUL  AB
01F3 75F033          342                  MOV  B,#51
01F6 84              343                  DIV  AB
01F7 20D502          344                  JB  F0,T_BCD2
01FA 2405            345                  ADD  A,#5
01FC                 346     T_BCD2:
01FC F545            347                  MOV  DISSTART,A    ;小数后第二位放入DISSTART
01FE 22              348                  RET
                     349     ;====================================================================
                     350     ;蜂鸣器响一声子程序
                     351     ;====================================================================
01FF                 352     BEEP_BL:
01FF 7E64            353              MOV  R6,#100
0201                 354     DEL1:
0201 5108            355              CALL  DEL2
0203 B2B7            356              CPL  BEEP
0205 DEFA            357              DJNZ  R6,DEL1
0207 22              358              RET
0208                 359     DEL2:
0208 7FB4            360              MOV  R7,#180
020A                 361     DEL3:
020A 00              362              NOP
020B DFFD            363              DJNZ  R7,DEL3
020D 22              364              RET
                     365     ;====================================================================
020E                 366     DELAY:                    ;延时100MS
020E 7EC8            367               MOV  R6,#200
0210                 368     DEL4:
0210 7FFA            369               MOV  R7,#250
0212 DFFE            370               DJNZ  R7,$
0214 DEFA            371               DJNZ  R6,DEL4
A51 MACRO ASSEMBLER  PCF8591_LCD1602_4CH_XIANSHI                                          12/20/2006 22:59:54 PAGE     7

0216 22              372               RET
                     373     
                     374     ;=====================================================
                     375     ;PCF8591演示程序
                     376     ;=====================================================
                     377     
                     378     ;=======================================================
                     379     ;D/A 转换子程序
                     380     
                     381     ;R1 D/A转换数据指针,初值为50H。
                     382     ;R2 存放D/A转换数据个数。
                     383     ;========================================================
0217                 384     PCF_DA:
0217 00              385                NOP
0218 120279          386                LCALL  STR
021B 7490            387                MOV  A,#90H      ;写PCF8591 A/D 寻址字
021D 12028F          388                LCALL  WR0
0220 12030F          389                LCALL  CHEK
0223 20D5F1          390                JB  F0,PCF_DA
0226                 391     WRD1:
0226 7440            392                MOV  A,#40H
0228 7950            393                MOV  R1,#50H
022A                 394     WRD2:
022A 12028F          395                LCALL  WR0
022D 12030F          396                LCALL  CHEK
0230 20D5E4          397                JB  F0,PCF_DA
0233 E7              398                MOV  A,@R1
0234 09              399                INC  R1
0235 DAF3            400                DJNZ  R2,WRD2
0237 120325          401                LCALL  STOP
023A 22              402                RET
                     403     ;=======================================================
                     404     ;A/D 转换子程序
                     405     
                     406     ;R1 A/D转换数据指针,初值为60H。
                     407     ;60H-63H 存放4路A/D转换值
                     408     ;R2 存放A/D转换数据个数。
                     409     ;=======================================================
023B                 410     PCF_AD:
023B 00              411                NOP
023C 120279          412                LCALL  STR
023F 7490            413                MOV  A,#90H       ;写PCF8591 A/D 寻址字
0241 12028F          414                LCALL  WR0
0244 12030F          415                LCALL  CHEK
0247 20D5F1          416                JB  F0,PCF_AD     ;错误,重发。
024A 7404            417                MOV  A,#04H       ;A/D控制字
024C 12028F          418                LCALL  WR0
024F 12030F          419                LCALL  CHEK
0252 20D5E6          420                JB  F0,PCF_AD     ;错误,重发。
0255                 421     PCF_AD1:
0255 120279          422                LCALL  STR
0258 7491            423                MOV  A,#91H       ;读PCF8591 A/D 寻址字
025A 12028F          424                LCALL  WR0
025D 12030F          425                LCALL  CHEK
0260 20D5F2          426                JB  F0,PCF_AD1
                     427     
0263 7940            428                MOV  R1,#AD_DATA  ;数据存储区首地址
                     429               ; lcall  rd0        ;空读一次,调整读顺序
                     430                ;lcall  yida
0265                 431     WRD3:
0265 1202E1          432                LCALL  RD0
0268 F7              433                MOV  @R1,A
0269 DA07            434                DJNZ  R2,WRD4
026B 1202CF          435                LCALL  YIDAF
026E 120325          436                LCALL  STOP
0271 22              437                RET
A51 MACRO ASSEMBLER  PCF8591_LCD1602_4CH_XIANSHI                                          12/20/2006 22:59:54 PAGE     8

0272                 438     WRD4:
0272 1202BF          439                LCALL  YIDA
0275 09              440                INC  R1
0276 020265          441                LJMP  WRD3
                     442     
                     443     ;**************************************************
                     444     ;*             IIC 总线驱动程序                   *
                     445     ;**************************************************
                     446     
                     447     ;==================================================
                     448     ;总线启动子程序
                     449     ;==================================================
0279                 450     STR:
0279 00              451                NOP
027A D293            452                SETB  SDA
027C 00              453                NOP
027D D290            454                SETB  SCL    ;起始条件建立时间大于4.7us
027F 00              455                NOP
0280 00              456                NOP
0281 00              457                NOP
0282 00              458                NOP
0283 00              459                NOP
0284 C293            460                CLR  SDA
0286 00              461                NOP          ;起始条件锁定时间大于4.7us
0287 00              462                NOP
0288 00              463                NOP
0289 00              464                NOP
028A 00              465                NOP
028B C290            466                CLR  SCL     ;钳住总线,准备发数据
028D 00              467                NOP
028E 22              468                RET
                     469     ;==================================================
                     470     ;发送一个字节子程序
                     471     ;字节数据放入ACC
                     472     ;==================================================
028F                 473     WR0:
028F 00              474                NOP
0290 7B08            475                MOV  R3,#08H
0292 C290            476                CLR  SCL

⌨️ 快捷键说明

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