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

📄 lcd1602.lis

📁 LCD1602液晶屏的四线驱动模块
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module lcd1602.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\MYJOB~1\AVR资料\示例程序\DS1302-LCD1602-4bitBUS\lcd1602.c
 0000                   .dbfunc e delay_us _delay_us fV
 0000           ;              n -> R16,R17
                        .even
 0000           _delay_us::
 0000                   .dbline -1
 0000                   .dbline 24
 0000           ; /*
 0000           ;       LCD1602液晶屏四线驱动模块
 0000           ;       1、可直接嵌入到项目中使用
 0000           ;       2、晶振频率:1M
 0000           ;       3、如晶振提高低层驱动延时要作相应修改
 0000           ;       4、程序在原来基础上只使用了PB口的高四位,即PB4—PB7,PB0—PB3可以做它用
 0000           ; 
 0000           ;       SunnyTrip
 0000           ;       www.iccavr.com
 0000           ; */
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; 
 0000           ; #define RS_CLR        PORTD &= ~(1 << PD3)
 0000           ; #define RS_SET        PORTD |= (1 << PD3)
 0000           ; 
 0000           ; #define RW_CLR        PORTD &= ~(1 << PD4)
 0000           ; #define RW_SET        PORTD |= (1 << PD4)
 0000           ; 
 0000           ; #define EN_CLR        PORTD &= ~(1 << PD6)
 0000           ; #define EN_SET        PORTD |= (1 << PD6)
 0000           ; 
 0000           ; /*延时函数*/
 0000           ; void delay_us(unsigned int n) {
 0000                   .dbline 26
 0000           ; 
 0000           ;       if (n == 0) {
 0000 0030              cpi R16,0
 0002 0107              cpc R16,R17
 0004 09F4              brne L5
 0006           X0:
 0006                   .dbline 26
 0006                   .dbline 27
 0006           ;               return ;
 0006 06C0              xjmp L1
 0008           L4:
 0008                   .dbline 29
 0008           L5:
 0008                   .dbline 29
 0008           ;               }
 0008           ;       while (--n);
 0008 C801              movw R24,R16
 000A 0197              sbiw R24,1
 000C 8C01              movw R16,R24
 000E 0030              cpi R16,0
 0010 0107              cpc R16,R17
 0012 D1F7              brne L4
 0014           X1:
 0014                   .dbline -2
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbsym r n 16 i
 0016                   .dbend
 0016                   .dbfunc e delay_ms _delay_ms fV
 0016           ;              a -> R20
 0016           ;              b -> R22
 0016           ;              i -> R16
                        .even
 0016           _delay_ms::
 0016 0E940000          xcall push_gset2
 001A                   .dbline -1
 001A                   .dbline 33
 001A           ; }
 001A           ; 
 001A           ; /*延时函数*/
 001A           ; void delay_ms(unsigned char i) {
 001A                   .dbline 36
 001A 41E0              ldi R20,1
 001C 06C0              xjmp L11
 001E           L8:
 001E                   .dbline 36
 001E           ; 
 001E           ;       unsigned char a, b;
 001E           ;       for (a = 1; a < i; a++) {
 001E                   .dbline 37
 001E 61E0              ldi R22,1
 0020 01C0              xjmp L15
 0022           L12:
 0022                   .dbline 37
 0022                   .dbline 38
 0022                   .dbline 39
 0022           L13:
 0022                   .dbline 37
 0022 6395              inc R22
 0024           L15:
 0024                   .dbline 37
 0024 6623              tst R22
 0026 E9F7              brne L12
 0028                   .dbline 40
 0028           L9:
 0028                   .dbline 36
 0028 4395              inc R20
 002A           L11:
 002A                   .dbline 36
 002A 4017              cp R20,R16
 002C C0F3              brlo L8
 002E                   .dbline -2
 002E           L7:
 002E 0E940000          xcall pop_gset2
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbsym r a 20 c
 0034                   .dbsym r b 22 c
 0034                   .dbsym r i 16 c
 0034                   .dbend
 0034                   .dbfunc e LCD_write_com _LCD_write_com fV
 0034           ;            com -> R20
                        .even
 0034           _LCD_write_com::
 0034 0E940000          xcall push_gset1
 0038 402F              mov R20,R16
 003A                   .dbline -1
 003A                   .dbline 44
 003A           ;               for (b = 1; b; b++) {
 003A           ;                       ;
 003A           ;                       }
 003A           ;               }
 003A           ; }
 003A           ; 
 003A           ; /*显示屏命令写入函数*/
 003A           ; void LCD_write_com(unsigned char com) {
 003A                   .dbline 46
 003A           ;       
 003A           ;       RS_CLR;
 003A 9398              cbi 0x12,3
 003C                   .dbline 47
 003C           ;       RW_CLR;
 003C 9498              cbi 0x12,4
 003E                   .dbline 48
 003E           ;       EN_SET;
 003E 969A              sbi 0x12,6
 0040                   .dbline 49
 0040           ;       PORTB&=0x0f;
 0040 88B3              in R24,0x18
 0042 8F70              andi R24,15
 0044 88BB              out 0x18,R24
 0046                   .dbline 50
 0046           ;       PORTB|= com&0xf0;
 0046 842F              mov R24,R20
 0048 807F              andi R24,240
 004A 28B2              in R2,0x18
 004C 282A              or R2,R24
 004E 28BA              out 0x18,R2
 0050                   .dbline 51
 0050           ;       com = com<<4;
 0050 842F              mov R24,R20
 0052 8F70              andi R24,#0x0F
 0054 8295              swap R24
 0056 482F              mov R20,R24
 0058                   .dbline 52
 0058           ;       EN_CLR;
 0058 9698              cbi 0x12,6
 005A                   .dbline 53
 005A           ;       delay_us(1);
 005A 01E0              ldi R16,1
 005C 10E0              ldi R17,0
 005E D0DF              xcall _delay_us
 0060                   .dbline 54
 0060           ;       EN_SET;
 0060 969A              sbi 0x12,6
 0062                   .dbline 55
 0062           ;       PORTB&=0x0f;
 0062 88B3              in R24,0x18
 0064 8F70              andi R24,15
 0066 88BB              out 0x18,R24
 0068                   .dbline 56
 0068           ;       PORTB|= com&0xf0;
 0068 842F              mov R24,R20
 006A 807F              andi R24,240
 006C 28B2              in R2,0x18
 006E 282A              or R2,R24
 0070 28BA              out 0x18,R2
 0072                   .dbline 57
 0072           ;       EN_CLR;
 0072 9698              cbi 0x12,6
 0074                   .dbline 58
 0074           ;       delay_us(1);
 0074 01E0              ldi R16,1
 0076 10E0              ldi R17,0
 0078 C3DF              xcall _delay_us
 007A                   .dbline -2
 007A           L16:
 007A 0E940000          xcall pop_gset1
 007E                   .dbline 0 ; func end
 007E 0895              ret
 0080                   .dbsym r com 20 c
 0080                   .dbend
 0080                   .dbfunc e LCD_write_data _LCD_write_data fV
 0080           ;           data -> R20
                        .even
 0080           _LCD_write_data::
 0080 0E940000          xcall push_gset1
 0084 402F              mov R20,R16
 0086                   .dbline -1
 0086                   .dbline 62
 0086           ; }
 0086           ; 
 0086           ; /*显示屏命令写入函数*/
 0086           ; void LCD_write_data(unsigned char data) {
 0086                   .dbline 64
 0086           ; 
 0086           ;       RS_SET;
 0086 939A              sbi 0x12,3
 0088                   .dbline 65
 0088           ;       RW_CLR;
 0088 9498              cbi 0x12,4
 008A                   .dbline 66
 008A           ;       EN_SET;
 008A 969A              sbi 0x12,6
 008C                   .dbline 67
 008C           ;       PORTB&=0x0f;
 008C 88B3              in R24,0x18
 008E 8F70              andi R24,15
 0090 88BB              out 0x18,R24
 0092                   .dbline 68
 0092           ;       PORTB|= data&0xf0;
 0092 842F              mov R24,R20
 0094 807F              andi R24,240
 0096 28B2              in R2,0x18
 0098 282A              or R2,R24
 009A 28BA              out 0x18,R2
 009C                   .dbline 69
 009C           ;       data = data<<4;
 009C 842F              mov R24,R20
 009E 8F70              andi R24,#0x0F
 00A0 8295              swap R24
 00A2 482F              mov R20,R24
 00A4                   .dbline 70
 00A4           ;       EN_CLR;
 00A4 9698              cbi 0x12,6
 00A6                   .dbline 71
 00A6           ;       delay_us(1);
 00A6 01E0              ldi R16,1
 00A8 10E0              ldi R17,0
 00AA AADF              xcall _delay_us
 00AC                   .dbline 72
 00AC           ;       EN_SET;

⌨️ 快捷键说明

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