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

📄 lcd_init.lis

📁 使用ICCAVR编写的mega128L单片机的12864液晶显示程序
💻 LIS
字号:
                        .module lcd_init.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\icc\lcd\lcd_init.c
 0000                   .dbfunc e delay _delay fV
 0000           ;              n -> R16,R17
                        .even
 0000           _delay::
 0000                   .dbline -1
 0000                   .dbline 40
 0000           ; /*
 0000           ; LCD12864液晶驱动模块
 0000           ; */
 0000           ; /*
 0000           ; PG0---RS---4
 0000           ; PG1---R/W--5
 0000           ; PG2---EN---6    
 0000           ; PA0---DB0---7
 0000           ; PA1---DB1---8
 0000           ; PA2---DB2---9
 0000           ; PA3---DB3---10
 0000           ; PA4---DB4---11
 0000           ; PA5---DB5---12
 0000           ; PA6---DB6---13
 0000           ; PA7---DB7---14
 0000           ; 
 0000           ; */
 0000           ; #include <iom128v.h>
 0000           ; #include <macros.h> 
 0000           ; 
 0000           ; 
 0000           ; /*命令或是数据选择*/
 0000           ; /*RS = 0命令,RS = 1数据*/
 0000           ; #define RS_CLR PORTG&=~(1<<PG0)  
 0000           ; #define RS_SET PORTG|=(1<<PG0)   
 0000           ; /*读取或写入选择*/
 0000           ; /*RW = 1读,RW = 0写*/
 0000           ; #define RW_CLR PORTG&=~(1<<PG1)
 0000           ; #define RW_SET PORTG|=(1<<PG1)
 0000           ; /*读写使能信号*/
 0000           ; /*下降沿有效*/
 0000           ; #define EN_CLR PORTG&=~(1<<PG2)
 0000           ; #define EN_SET PORTG|=(1<<PG2)
 0000           ; /*芯片复位脚*/
 0000           ; /*高电平复位
 0000           ; #define RST_CLR PORTD&=~(1<<PD7)
 0000           ; #define RST_SET PORTD|=(1<<PD7)*/
 0000           ; //延时函数
 0000           ; void delay (unsigned int n)
 0000           ; {
 0000           L2:
 0000                   .dbline 41
 0000           L3:
 0000                   .dbline 41
 0000           ; while(n--);
 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 n 16 i
 0010                   .dbend
 0010                   .dbfunc e chk_busy _chk_busy fV
                        .even
 0010           _chk_busy::
 0010                   .dbline -1
 0010                   .dbline 44
 0010           ; }
 0010           ; void chk_busy(void)
 0010           ; {
 0010                   .dbline 45
 0010           ;  PORTA=0XFF;
 0010 8FEF              ldi R24,255
 0012 8BBB              out 0x1b,R24
 0014                   .dbline 46
 0014           ;  RS_CLR;
 0014 80916500          lds R24,101
 0018 8E7F              andi R24,254
 001A 80936500          sts 101,R24
 001E                   .dbline 47
 001E           ;  RW_SET;
 001E 80916500          lds R24,101
 0022 8260              ori R24,2
 0024 80936500          sts 101,R24
 0028                   .dbline 49
 0028           ;  
 0028           ;  DDRA=0X00;
 0028 2224              clr R2
 002A 2ABA              out 0x1a,R2
 002C                   .dbline 51
 002C           ;  
 002C           ;  EN_SET;
 002C 80916500          lds R24,101
 0030 8460              ori R24,4
 0032 80936500          sts 101,R24
 0036           L6:
 0036                   .dbline 52
 0036           L7:
 0036                   .dbline 52
 0036           ;  while(PINA&0X80);
 0036 CF99              sbic 0x19,7
 0038 FECF              rjmp L6
 003A                   .dbline 53
 003A           ;  EN_CLR;
 003A 80916500          lds R24,101
 003E 8B7F              andi R24,251
 0040 80936500          sts 101,R24
 0044                   .dbline 54
 0044           ;  DDRA=0XFF;
 0044 8FEF              ldi R24,255
 0046 8ABB              out 0x1a,R24
 0048                   .dbline -2
 0048           L5:
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbend
 004A                   .dbfunc e LCD_write_code _LCD_write_code fV
 004A           ;           code -> R20
                        .even
 004A           _LCD_write_code::
 004A 0E940000          xcall push_gset1
 004E 402F              mov R20,R16
 0050                   .dbline -1
 0050                   .dbline 58
 0050           ; }
 0050           ; //显示屏命令写入函数
 0050           ; void LCD_write_code(unsigned char code)
 0050           ; {
 0050                   .dbline 59
 0050           ; chk_busy();
 0050 DFDF              xcall _chk_busy
 0052                   .dbline 60
 0052           ; RS_CLR;
 0052 80916500          lds R24,101
 0056 8E7F              andi R24,254
 0058 80936500          sts 101,R24
 005C                   .dbline 61
 005C           ; RW_CLR;
 005C 80916500          lds R24,101
 0060 8D7F              andi R24,253
 0062 80936500          sts 101,R24
 0066                   .dbline 62
 0066           ; PORTA=code;
 0066 4BBB              out 0x1b,R20
 0068                   .dbline 63
 0068           ; EN_SET;
 0068 80916500          lds R24,101
 006C 8460              ori R24,4
 006E 80936500          sts 101,R24
 0072                   .dbline 64
 0072           ; delay(100);
 0072 04E6              ldi R16,100
 0074 10E0              ldi R17,0
 0076 C4DF              xcall _delay
 0078                   .dbline 65
 0078           ; EN_CLR;
 0078 80916500          lds R24,101
 007C 8B7F              andi R24,251
 007E 80936500          sts 101,R24
 0082                   .dbline -2
 0082           L9:
 0082 0E940000          xcall pop_gset1
 0086                   .dbline 0 ; func end
 0086 0895              ret
 0088                   .dbsym r code 20 c
 0088                   .dbend
 0088                   .dbfunc e LCD_write_data _LCD_write_data fV
 0088           ;           data -> R20
                        .even
 0088           _LCD_write_data::
 0088 0E940000          xcall push_gset1
 008C 402F              mov R20,R16
 008E                   .dbline -1
 008E                   .dbline 69
 008E           ; }
 008E           ; //显示屏数据显写入函数
 008E           ; void LCD_write_data(unsigned char data)
 008E           ; {
 008E                   .dbline 70
 008E           ; chk_busy();
 008E C0DF              xcall _chk_busy
 0090                   .dbline 71
 0090           ; RS_SET;
 0090 80916500          lds R24,101
 0094 8160              ori R24,1
 0096 80936500          sts 101,R24
 009A                   .dbline 72
 009A           ; RW_CLR;
 009A 80916500          lds R24,101
 009E 8D7F              andi R24,253
 00A0 80936500          sts 101,R24
 00A4                   .dbline 73
 00A4           ; PORTA=data;
 00A4 4BBB              out 0x1b,R20
 00A6                   .dbline 74
 00A6           ; EN_SET;
 00A6 80916500          lds R24,101
 00AA 8460              ori R24,4
 00AC 80936500          sts 101,R24
 00B0                   .dbline 75
 00B0           ; delay(100);
 00B0 04E6              ldi R16,100
 00B2 10E0              ldi R17,0
 00B4 A5DF              xcall _delay
 00B6                   .dbline 76
 00B6           ; EN_CLR; 
 00B6 80916500          lds R24,101
 00BA 8B7F              andi R24,251
 00BC 80936500          sts 101,R24
 00C0                   .dbline -2
 00C0           L10:
 00C0 0E940000          xcall pop_gset1
 00C4                   .dbline 0 ; func end
 00C4 0895              ret
 00C6                   .dbsym r data 20 c
 00C6                   .dbend
 00C6                   .dbfunc e disp_char _disp_char fV
 00C6           ;           asii -> R20
 00C6           ;       position -> R22
                        .even
 00C6           _disp_char::
 00C6 0E940000          xcall push_gset2
 00CA 422F              mov R20,R18
 00CC 602F              mov R22,R16
 00CE                   .dbline -1
 00CE                   .dbline 80
 00CE           ; }
 00CE           ; /*单个字符输入函数;position--显示位置,data--显示内容*/
 00CE           ; void disp_char(unsigned char position,unsigned char asii)
 00CE           ; {
 00CE                   .dbline 81
 00CE           ;  LCD_write_code(position);
 00CE 062F              mov R16,R22
 00D0 BCDF              xcall _LCD_write_code
 00D2                   .dbline 82
 00D2           ;  LCD_write_data(asii);
 00D2 042F              mov R16,R20
 00D4 D9DF              xcall _LCD_write_data
 00D6                   .dbline -2
 00D6           L11:
 00D6 0E940000          xcall pop_gset2
 00DA                   .dbline 0 ; func end
 00DA 0895              ret
 00DC                   .dbsym r asii 20 c
 00DC                   .dbsym r position 22 c
 00DC                   .dbend
 00DC                   .dbfunc e disp_word _disp_word fV
 00DC           ;           word -> R20,R21
 00DC           ;       position -> R22
                        .even
 00DC           _disp_word::
 00DC 0E940000          xcall push_gset2
 00E0 A901              movw R20,R18
 00E2 602F              mov R22,R16
 00E4                   .dbline -1
 00E4                   .dbline 97
 00E4           ; }
 00E4           ; /*一串字符输入函数
 00E4           ; void disp_char_str(unsigned char position,unsigned char *str)
 00E4           ; {
 00E4           ;  LCD_write_code(position);
 00E4           ;  while(*str!=0)                    //含义???
 00E4           ;       {
 00E4           ;          
 00E4           ;          LCD_write_data(*str);
 00E4           ;          str++;
 00E4           ;         }
 00E4           ; }*/
 00E4           ; /*汉字输入*/
 00E4           ; void disp_word(unsigned char position,unsigned char *word)
 00E4           ; {
 00E4                   .dbline 98
 00E4           ; LCD_write_code(position);//要显示的位置
 00E4 062F              mov R16,R22
 00E6 B1DF              xcall _LCD_write_code
 00E8 05C0              xjmp L14
 00EA           L13:
 00EA                   .dbline 100
 00EA                   .dbline 101
 00EA FA01              movw R30,R20
 00EC 0081              ldd R16,z+0
 00EE CCDF              xcall _LCD_write_data
 00F0                   .dbline 102
 00F0 4F5F              subi R20,255  ; offset = 1
 00F2 5F4F              sbci R21,255
 00F4                   .dbline 103
 00F4           L14:
 00F4                   .dbline 99
 00F4           ; while(*word!=0)
 00F4 FA01              movw R30,R20
 00F6 2080              ldd R2,z+0
 00F8 2220              tst R2
 00FA B9F7              brne L13
 00FC                   .dbline -2
 00FC           L12:
 00FC 0E940000          xcall pop_gset2
 0100                   .dbline 0 ; func end
 0100 0895              ret
 0102                   .dbsym r word 20 pc
 0102                   .dbsym r position 22 c
 0102                   .dbend
 0102                   .dbfunc e disp_init _disp_init fV
                        .even
 0102           _disp_init::
 0102                   .dbline -1
 0102                   .dbline 109
 0102           ;      {
 0102           ;         LCD_write_data(*word);
 0102           ;         word++;
 0102           ;        } 
 0102           ;  
 0102           ; }
 0102           ; 
 0102           ; //显示屏初始化
 0102           ; void disp_init(void)
 0102           ; {
 0102                   .dbline 110
 0102           ; DDRA=0XFF;
 0102 8FEF              ldi R24,255
 0104 8ABB              out 0x1a,R24
 0106                   .dbline 112
 0106           ; //DDRD=(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
 0106           ; DDRG=0XFF;
 0106 80936400          sts 100,R24
 010A                   .dbline 114
 010A           ; 
 010A           ; LCD_write_code(0x30);//功能设定/*30---基本指令动作
 010A 00E3              ldi R16,48
 010C 9EDF              xcall _LCD_write_code
 010E                   .dbline 115
 010E           ; LCD_write_code(0x01);//清屏,地址指针指向00H
 010E 01E0              ldi R16,1
 0110 9CDF              xcall _LCD_write_code
 0112                   .dbline 116
 0112           ; LCD_write_code(0x06);//光标的移动方向
 0112 06E0              ldi R16,6
 0114 9ADF              xcall _LCD_write_code
 0116                   .dbline 117
 0116           ; LCD_write_code(0x0c);//光标反白显示--0x0f/*开显示,关游标
 0116 0CE0              ldi R16,12
 0118 98DF              xcall _LCD_write_code
 011A                   .dbline -2
 011A           L16:
 011A                   .dbline 0 ; func end
 011A 0895              ret
 011C                   .dbend

⌨️ 快捷键说明

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