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

📄 pcf8591-da-lcd1602-asm.lst

📁 89S52单片机做的A/D,D/A的实验的源程序PCF8591 D/A CONVERTER */ /* */ /* LCD1602显示 */ /* 参考电压接至5V电源 */ /* 最小输出电
💻 LST
📖 第 1 页 / 共 4 页
字号:
0190 494E4520                
0194 20574156                
0198 45202020                
019C 00                      
                     224     
019D 20205351        225     INFOA:  DB "  SQUARE  WAVE  ",0  ;LCD 第二行显示信息   方波
01A1 55415245                
01A5 20205741                
01A9 56452020                
01AD 00                      
                     226     
01AE 20545249        227     INFOB:  DB " TRIANGLE  WAVE ",0  ;LCD 第二行显示信息
01B2 414E474C                
A51 MACRO ASSEMBLER  PCF8591_DA_LCD1602_ASM                                               12/20/2006 22:57:40 PAGE     5

01B6 45202057                
01BA 41564520                
01BE 00                      
                     228     
01BF 20204543        229     INFOC:  DB "  ECHELON WAVE  ",0  ;LCD 第二行显示信息
01C3 48454C4F                
01C7 4E205741                
01CB 56452020                
01CF 00                      
                     230     
01D0 20534157        231     INFOD:  DB " SAWTOOTH  WAVE ",0  ;LCD 第二行显示信息
01D4 544F4F54                
01D8 48202057                
01DC 41564520                
01E0 00                      
                     232     
                     233     ;==========================================================
                     234     
                     235     ; LCD 接口初始化
                     236     
                     237     ;==========================================================
01E1                 238     INIT_LCD:
01E1 5106            239               CALL  DELAY1    ;延时15ms,等待LCD供电稳定
01E3 5106            240               CALL  DELAY1
01E5 5106            241               CALL  DELAY1
                     242     
01E7 7438            243               MOV  A,#38H     ;双列显示,字形5*7点阵
01E9 513D            244               CALL  WCOM
01EB 5106            245               CALL  DELAY1
01ED 7438            246               MOV  A,#38H     ;双列显示,字形5*7点阵
01EF 513D            247               CALL  WCOM
01F1 5106            248               CALL  DELAY1
01F3 7438            249               MOV  A,#38H     ;双列显示,字形5*7点阵
01F5 513D            250               CALL  WCOM
01F7 5106            251               CALL  DELAY1
01F9 740C            252               MOV  A,#0CH     ;开显示,关光标,
01FB 513D            253               CALL  WCOM
01FD 5106            254               CALL  DELAY1
01FF 7401            255               MOV  A,#01H     ;清除 LCD 显示屏
0201 513D            256               CALL  WCOM
0203 5106            257               CALL  DELAY1
0205 22              258               RET
                     259     ;==========================================================
                     260     ;延时5MS                                                  =
                     261     ;==========================================================
0206                 262     DELAY1:
0206 7E19            263               MOV  R6,#25
0208                 264       DEL:
0208 7F64            265               MOV  R7,#100
020A DFFE            266               DJNZ  R7,$
020C DEFA            267               DJNZ  R6,DEL
020E 22              268               RET
                     269     ;==========================================================
                     270     ;                                                         =
                     271     ;在LCD的第一行或第二行显示信息字符                        =
                     272     ;                                                         =
                     273     ;==========================================================
020F                 274     LCD_SHOW:
                     275     
020F B4010C          276               CJNE  A,#1,LINE2  ;判断是否为第一行
0212                 277       LINE1:
0212 7480            278               MOV  A,#80H       ;设置 LCD 的第一行地址
0214 513D            279               CALL  WCOM        ;写入命令
0216 5134            280               CALL  CLR_LINE    ;清除该行字符数据
0218 7480            281               MOV  A,#80H       ;设置 LCD 的第一行地址
021A 513D            282               CALL  WCOM        ;写入命令
A51 MACRO ASSEMBLER  PCF8591_DA_LCD1602_ASM                                               12/20/2006 22:57:40 PAGE     6

021C 800A            283               JMP  FILL
021E                 284       LINE2:
021E 74C0            285               MOV  A,#0C0H      ;设置 LCD 的第二行地址
0220 513D            286               CALL  WCOM        ;写入命令
0222 5134            287               CALL  CLR_LINE    ;清除该行字符数据
0224 74C0            288               MOV  A,#0C0H      ;设置 LCD 的第二行地址
0226 513D            289               CALL  WCOM
0228                 290       FILL:
0228 E4              291               CLR  A            ;填入字符
0229 93              292               MOVC  A,@A+DPTR   ;由消息区取出字符
022A B40001          293               CJNE  A,#0,LC1    ;判断是否为结束码
022D 22              294               RET
022E                 295       LC1:
022E 514A            296               CALL  WDATA       ;写入数据
0230 A3              297               INC  DPTR         ;指针加1
0231 80F5            298               JMP  FILL         ;继续填入字符
0233 22              299               RET
                     300     ;---------------------------------------------------------
0234                 301     CLR_LINE:                  ;清除该行 LCD 的字符
0234 7818            302               MOV  R0,#24
0236                 303        CL1:
0236 7420            304               MOV  A,#' '
0238 514A            305               CALL  WDATA
023A D8FA            306               DJNZ  R0,CL1
023C 22              307               RET
                     308     ;==========================================================
                     309     
                     310     ;写指令使能子程序
                     311     ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
                     312     
                     313     ;==========================================================
023D                 314     WCOM:
023D F580            315               MOV  P0,A
023F C2A0            316               CLR  LCD_RS
0241 C2A1            317               CLR  LCD_RW
0243 D2A2            318               SETB LCD_EN
0245 5157            319               CALL  DELAY0
0247 C2A2            320               CLR  LCD_EN
0249 22              321               RET
                     322     ;==========================================================
                     323     
                     324     ;写数据使能子程序
                     325     ;RS=H,RW=L,D0-D7=数据,E=高脉冲
                     326     
                     327     ;==========================================================
024A                 328     WDATA:
024A F580            329               MOV  P0,A
024C D2A0            330               SETB  LCD_RS
024E C2A1            331               CLR   LCD_RW
0250 D2A2            332               SETB  LCD_EN
0252 5157            333               CALL  DELAY0
0254 C2A2            334               CLR   LCD_EN
0256 22              335               RET
0257                 336     DELAY0:
0257 7FFA            337               MOV  R7,#250     ;延时500微秒
0259 DFFE            338               DJNZ  R7,$
025B 22              339               RET
                     340     
                     341     ;==========================================================
                     342     
                     343     ;在 LCD 第一行指定位置显示字符
                     344     ;(A)=ASCII 数据, (B)=位置变量
                     345     
                     346     ;==========================================================
025C                 347     LCDP1:
025C C0E0            348               PUSH  ACC        ;入栈保护A
A51 MACRO ASSEMBLER  PCF8591_DA_LCD1602_ASM                                               12/20/2006 22:57:40 PAGE     7

025E E5F0            349               MOV  A,B         ;设置显示地址
0260 2480            350               ADD  A,#80H     ;设置LCD的第一行地址
0262 513D            351               CALL  WCOM       ;写入命令
0264 D0E0            352               POP  ACC         ;由堆栈取出A
0266 514A            353               CALL  WDATA      ;写入数据
0268 22              354               RET
                     355     ;==========================================================
                     356     
                     357     ;在 LCD 第二行指定位置显示字符
                     358     ;(A)=ASCII 数据, (B)=位置变量
                     359     
                     360     ;==========================================================
0269                 361     LCDP2:
0269 C0E0            362               PUSH  ACC        ;入栈保护A
026B E5F0            363               MOV  A,B         ;设置显示地址
026D 24C0            364               ADD  A,#0C0H     ;设置LCD的第二行地址
026F 513D            365               CALL  WCOM       ;写入命令
0271 D0E0            366               POP  ACC         ;由堆栈取出A
0273 514A            367               CALL  WDATA      ;写入数据
0275 22              368               RET
                     369     
                     370     ;====================================================================
                     371     ;蜂鸣器响一声子程序
                     372     ;====================================================================
0276                 373     BEEP_BL:
0276 7E64            374              MOV  R6,#100
0278                 375     DEL1:
0278 120283          376              LCALL  DEL2
027B B2B7            377              CPL  BEEP
027D DEF9            378              DJNZ  R6,DEL1
027F 120289          379              LCALL  DEL4
0282 22              380              RET
0283                 381     DEL2:
0283 7FB4            382              MOV  R7,#180
0285                 383     DEL3:
0285 00              384              NOP
0286 DFFD            385              DJNZ  R7,DEL3
0288 22              386              RET
0289                 387     DEL4:
0289 7EC8            388              MOV  R6,#200
028B                 389     DEL5:
028B 7FFA            390              MOV  R7,#250
028D DFFE            391              DJNZ  R7,$
028F DEFA            392              DJNZ  R6,DEL5
0291 22              393              RET
                     394     ;==========================================================
                     395     ;延时100MS                                                =
                     396     ;==========================================================
0292                 397     DELAY:
0292 7EC8            398               MOV  R6,#200
0294                 399     DEL6:
0294 7FFA            400               MOV  R7,#250
0296 DFFE            401               DJNZ  R7,$
0298 DEFA            402               DJNZ  R6,DEL6
029A 22              403               RET
                     404     
                     405     ;==========================================================
                     406     ;D/A 转换子程序
                     407     
                     408     ;R1 D/A转换数据指针,初值为DA_DATA。
                     409     ;R2 存放D/A转换数据个数。
                     410     ;==========================================================
029B                 411     PCF_DA:
029B 00              412                NOP
029C 120482          413                LCALL  STR        ;启动I2C总线
029F 7490            414                MOV  A,#90H       ;写PCF8591 A/D 寻址字
A51 MACRO ASSEMBLER  PCF8591_DA_LCD1602_ASM                                               12/20/2006 22:57:40 PAGE     8

02A1 120498          415                LCALL  WR0
02A4 120519          416                LCALL  CHEK
02A7 20D5F1          417                JB  F0,PCF_DA
                     418     
02AA 7440            419                MOV  A,#DACOM     ;PCF8591 D/A的控制命令(40H)
02AC 120498          420                LCALL  WR0
02AF 120519          421                LCALL  CHEK
02B2 20D5E6          422                JB  F0,PCF_DA
02B5 22              423                RET
02B6                 424     PCF_DA1:
02B6 E7              425                MOV  A,@R1
02B7 120498          426                LCALL  WR0
02BA 120519          427                LCALL  CHEK
02BD 20D5F6          428                JB  F0,PCF_DA1
                     429                ;LCALL  STOP
02C0 22              430                RET
                     431     
                     432     ;=========================================================
                     433     ;程序功能:正弦信号发生
                     434     
                     435     ;出口:从D/A通道输出正弦电压信号
                     436     ;=========================================================
02C1                 437     SINE:
02C1 75F000          438              MOV  B,#00H
02C4 519B            439              ACALL  PCF_DA
02C6                 440     SIN1:
02C6 30970D          441              JNB  K4,SIN_END       ;退出
02C9 E5F0            442              MOV   A,B
02CB 9002DF          443              MOV   DPTR,#SIN_TAB
02CE 93              444              MOVC  A,@A+DPTR
02CF F7              445              MOV   @R1,A
02D0 51B6            446              ACALL PCF_DA1         ;DA转换
02D2 05F0            447              INC   B
02D4 41C6            448              AJMP  SIN1
02D6                 449     SIN_END:
02D6 12052E          450              LCALL  STOP
02D9 D201            451              SETB  20H.1
02DB 120276          452              LCALL  BEEP_BL
02DE 22              453              RET

⌨️ 快捷键说明

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