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

📄 lcd.lis

📁 avr mega16 驱动lcd1602显示屏
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module lcd.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\bak\YM200\lcd1602\lcd.c
 0000                   .dbfunc e delay _delay fV
 0000           ;             dk -> R16,R17
                        .even
 0000           _delay::
 0000                   .dbline -1
 0000                   .dbline 19
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h> 
 0000           ; #define LCD_RS   (1 << 4)
 0000           ; #define LCD_RW   (1 << 5)
 0000           ; #define LCD_E    (1 << 7)
 0000           ; #define set_e()  (PORTD |= LCD_E)
 0000           ; #define set_rs() (PORTD |= LCD_RS)
 0000           ; #define set_rw() (PORTD |= LCD_RW)
 0000           ; #define clr_e()  (PORTD &= ~LCD_E)
 0000           ; #define clr_rs() (PORTD &= ~LCD_RS)
 0000           ; #define clr_rw() (PORTD &= ~LCD_RW)
 0000           ;   
 0000           ; /*-----------------------------------------------------------
 0000           ; delay       :短延时函数
 0000           ; 输入参数 x  :粗略延时,x越大,延时越长
 0000           ; 输出参数    :无
 0000           ; ------------------------------------------------------------*/
 0000           ; void delay(unsigned int dk)
 0000           ; {
 0000           L2:
 0000                   .dbline 20
 0000           L3:
 0000                   .dbline 20
 0000           ;   while(dk--);
 0000 1801              movw R2,R16
 0002 0150              subi R16,1
 0004 1040              sbci R17,0
 0006 2220              tst R2
 0008 D9F7              brne L2
 000A 3320              tst R3
 000C C9F7              brne L2
 000E           X0:
 000E                   .dbline -2
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbsym r dk 16 i
 0010                   .dbend
 0010                   .dbfunc e lcdwait _lcdwait fV
                        .even
 0010           _lcdwait::
 0010                   .dbline -1
 0010                   .dbline 29
 0010           ;  }
 0010           ; 
 0010           ; /*------------------------------------------------------------
 0010           ; lcdwait   :液晶延时函数
 0010           ; 输入参数  :无
 0010           ; 输出参数  :无
 0010           ; --------------------------------------------------------------*/
 0010           ; void lcdwait(void)
 0010           ; {
 0010                   .dbline 30
 0010           ;   delay(600);
 0010 08E5              ldi R16,600
 0012 12E0              ldi R17,2
 0014 F5DF              xcall _delay
 0016                   .dbline -2
 0016           L5:
 0016                   .dbline 0 ; func end
 0016 0895              ret
 0018                   .dbend
 0018                   .dbfunc e lcdpulse _lcdpulse fV
                        .even
 0018           _lcdpulse::
 0018                   .dbline -1
 0018                   .dbline 38
 0018           ;  }
 0018           ; /*-----------------------------------------------------------
 0018           ; lcdpulse   :脉冲函数,把数据写入1602液晶
 0018           ; 输入参数   :无
 0018           ; 输出参数   :无
 0018           ; ---------------------------------------------------------------*/
 0018           ; void lcdpulse(void)
 0018           ; {
 0018                   .dbline 39
 0018           ;   set_e();
 0018 979A              sbi 0x12,7
 001A                   .dbline 40
 001A           ;   clr_e();
 001A 9798              cbi 0x12,7
 001C                   .dbline -2
 001C           L6:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbend
 001E                   .dbfunc e lcdsend _lcdsend fV
 001E           ;           data -> R20
                        .even
 001E           _lcdsend::
 001E 0E940000          xcall push_gset1
 0022 402F              mov R20,R16
 0024                   .dbline -1
 0024                   .dbline 49
 0024           ;  }
 0024           ; 
 0024           ; /*----------------------------------------------------------------
 0024           ; lcdsend       :发送一字节数据函数
 0024           ; 输入参数 data :要发送字节数据
 0024           ; 输出参数      :无
 0024           ; ------------------------------------------------------------------*/
 0024           ; void lcdsend(unsigned char data)
 0024           ; {
 0024                   .dbline 50
 0024           ;   lcdwait();
 0024 F5DF              xcall _lcdwait
 0026                   .dbline 51
 0026           ;   PORTB=data;
 0026 48BB              out 0x18,R20
 0028                   .dbline 52
 0028           ;   lcdpulse();
 0028 F7DF              xcall _lcdpulse
 002A                   .dbline -2
 002A           L7:
 002A 0E940000          xcall pop_gset1
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r data 20 c
 0030                   .dbend
 0030                   .dbfunc e wcom _wcom fV
 0030           ;            com -> R20
                        .even
 0030           _wcom::
 0030 0E940000          xcall push_gset1
 0034 402F              mov R20,R16
 0036                   .dbline -1
 0036                   .dbline 60
 0036           ;  }
 0036           ; /*------------------------------------------------------------------
 0036           ; wcom          :写一字节控制字函数
 0036           ; 输入参数 com  :要写入控制字
 0036           ; 输出参数      :无
 0036           ; -----------------------------------------------------------------*/
 0036           ; void wcom(unsigned char com)
 0036           ; {
 0036                   .dbline 61
 0036           ;   clr_rs();
 0036 9498              cbi 0x12,4
 0038                   .dbline 62
 0038           ;   clr_rw();
 0038 9598              cbi 0x12,5
 003A                   .dbline 63
 003A           ;   lcdsend(com);
 003A 042F              mov R16,R20
 003C F0DF              xcall _lcdsend
 003E                   .dbline 64
 003E           ;   lcdwait();
 003E E8DF              xcall _lcdwait
 0040                   .dbline -2
 0040           L8:
 0040 0E940000          xcall pop_gset1
 0044                   .dbline 0 ; func end
 0044 0895              ret
 0046                   .dbsym r com 20 c
 0046                   .dbend
 0046                   .dbfunc e wdat _wdat fV
 0046           ;            dat -> R20
                        .even
 0046           _wdat::
 0046 0E940000          xcall push_gset1
 004A 402F              mov R20,R16
 004C                   .dbline -1
 004C                   .dbline 73
 004C           ;  }
 004C           ; 
 004C           ; /*--------------------------------------------------------------
 004C           ; wdat          :显示一字节函数
 004C           ; 输入参数 com  :要显示字符ASCⅡ码
 004C           ; 输出参数      :无
 004C           ; ----------------------------------------------------------------*/
 004C           ; void wdat(unsigned char dat)
 004C           ; {
 004C                   .dbline 74
 004C           ;   set_rs();
 004C 949A              sbi 0x12,4
 004E                   .dbline 75
 004E           ;   clr_rw();
 004E 9598              cbi 0x12,5
 0050                   .dbline 76
 0050           ;   lcdsend(dat);
 0050 042F              mov R16,R20
 0052 E5DF              xcall _lcdsend
 0054                   .dbline 77
 0054           ;   lcdwait();
 0054 DDDF              xcall _lcdwait
 0056                   .dbline -2
 0056           L9:
 0056 0E940000          xcall pop_gset1
 005A                   .dbline 0 ; func end
 005A 0895              ret
 005C                   .dbsym r dat 20 c
 005C                   .dbend
 005C                   .dbfunc e LCM1602Reset _LCM1602Reset fV
                        .even
 005C           _LCM1602Reset::
 005C                   .dbline -1
 005C                   .dbline 85
 005C           ;  }
 005C           ; /*------------------------------------------------------------------
 005C           ; LCM1602Reset  :LCM1602复位
 005C           ; 输入参数      :无
 005C           ; 输出参数      :无
 005C           ; ------------------------------------------------------------------*/
 005C           ; void LCM1602Reset(void)
 005C           ; {
 005C                   .dbline 86
 005C           ;   delay(65000);
 005C 08EE              ldi R16,65000
 005E 1DEF              ldi R17,253
 0060 CFDF              xcall _delay
 0062                   .dbline 87
 0062           ;   wcom(0x38);
 0062 08E3              ldi R16,56
 0064 E5DF              xcall _wcom
 0066                   .dbline 88
 0066           ;   delay(5000);
 0066 08E8              ldi R16,5000
 0068 13E1              ldi R17,19
 006A CADF              xcall _delay
 006C                   .dbline 89
 006C           ;   wcom(0x38);
 006C 08E3              ldi R16,56
 006E E0DF              xcall _wcom
 0070                   .dbline 90
 0070           ;   delay(5000);
 0070 08E8              ldi R16,5000
 0072 13E1              ldi R17,19
 0074 C5DF              xcall _delay

⌨️ 快捷键说明

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