标题: [原创]31行代码搞定LCD1602显示Proteus仿真程序(C&汇编)基于编址技术 [打印本页]

作者: psuxaog    时间: 2018-10-10 20:26
标题: [原创]31行代码搞定LCD1602显示Proteus仿真程序(C&汇编)基于编址技术
单片机LCD1602显示仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

  1. typedef unsigned int  uint;
  2. typedef unsigned char uchar;

  3. uchar xdata LCD_CW _at_ 0xfcfc;
  4. uchar xdata LCD_DW _at_ 0xfdfd;
  5. uchar xdata LCD_CR _at_ 0xfefe;

  6. #define WHILE_BUSY while(LCD_CR & 0x80)

  7. void print(uchar *str,uchar addr)
  8. {
  9.   WHILE_BUSY;//不能少!!!
  10.         LCD_CW = 0x80 | addr;
  11.   while(*str!='\0')
  12.         {
  13.      WHILE_BUSY;
  14.            LCD_DW=*str;
  15.                  str++;
  16.         }
  17. }

  18. void main()
  19. {
  20.    LCD_CW=0x0c;
  21.          WHILE_BUSY;
  22.          LCD_CW=0x38;         
  23.          print("LCD Disp Program",0x00);//0x00~0x0f表示第一行0到15字符
  24.    print("Happy New Year! ",0x41);//0x40~0x4f表示第二行0到15字符
  25.          while(1);
  26. }
复制代码
  1.         LCD_CW EQU 0FCFCH
  2.         LCD_DW EQU 0FDFDH
  3.         LCD_CR EQU 0FEFEH
  4.         
  5.         ORG 0000H
  6.         LJMP LCD_INIT
  7.         ORG 0030H
  8. LCD_INIT:               
  9.         MOV  SP,#60H
  10.         MOV R3,#0CH
  11.         CALL LCD_WCMD
  12.         MOV R3,#38H
  13.         CALL LCD_WCMD
  14.         MOV R1,#HELLO
  15.         MOV R3, #80H
  16.         CALL LCD_WCMD
  17.         CALL PRINT
  18.         MOV R3, #0C1H
  19.         MOV R1,#HELLO
  20.         CALL LCD_WCMD
  21.         CALL PRINT
  22.         LJMP $
  23. PRINT:
  24.         
  25. PRINT_LOOP:
  26.         MOV A,R1
  27.         MOVC A,@A+DPTR
  28.         MOV R3, A
  29.         CALL LCD_WDAT
  30.         INC R1
  31.         JNZ PRINT_LOOP
  32.         RET
  33. LCD_WDAT:
  34.         MOV A, 'D'
  35.         MOV DPTR,#LCD_DW
  36.         MOVX @DPTR,A
  37.         CALL WHILE_BUSY
  38.         RET
  39. LCD_WCMD:
  40.         MOV A, R3
  41.         MOV DPTR,#LCD_CW
  42.         MOVX @DPTR, A
  43.         CALL WHILE_BUSY
  44.         RET
  45. WHILE_BUSY:
  46.         MOV DPTR,#LCD_CR
  47.         MOVX A, @DPTR
  48.         MOV 29H,A
  49.         JB 29H.7, WHILE_BUSY
  50.         RET
  51.         
  52. HELLO:
  53.                 DB "HAPPY NEW YEAR! ",0
  54.                         
  55.                 END
复制代码
以上是两种语言编写,可选用一种

基于编址技术的LCD1602显示程序.rar (92.93 KB, 下载次数: 14)








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1