📄 1602.lis
字号:
0096 D998 cbi 0x1b,1
0098 .dbline 127
0098 ; lcd_control_port&=~lcd_EN;//E=0,下面给LCD一个高脉冲
0098 DA98 cbi 0x1b,2
009A .dbline 128
009A ; NOP();
009A 0000 nop
009C .dbline 129
009C ; lcd_control_port|=lcd_EN;//E=1
009C DA9A sbi 0x1b,2
009E .dbline 130
009E ; lcd_data_port=char_data;
009E 42BB out 0x12,R20
00A0 .dbline 131
00A0 ; lcd_control_port&=~lcd_EN;//重设E=0
00A0 DA98 cbi 0x1b,2
00A2 .dbline -2
00A2 .dbline 132
00A2 ; }
00A2 L9:
00A2 0E940000 xcall pop_gset1
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 .dbsym r char_data 20 c
00A8 .dbend
00A8 .dbfunc e wait_enable _wait_enable fV
.even
00A8 _wait_enable::
00A8 .dbline -1
00A8 .dbline 146
00A8 ;
00A8 ;
00A8 ;
00A8 ;
00A8 ;
00A8 ;
00A8 ;
00A8 ;
00A8 ;
00A8 ;
00A8 ; //正常读写操作之前必须检测LCD控制器状态:E=1 RS=0 RW=1;DB7: 0 LCD控制器空闲,1 LCD控制器忙。
00A8 ; //检测忙信号,等待LCD空闲函数
00A8 ; void wait_enable(void)
00A8 ; {
00A8 .dbline 147
00A8 ; lcd_busy_ddr&=~busy;//设置busy口为输入
00A8 8F98 cbi 0x11,7
00AA .dbline 148
00AA ; lcd_control_port&=~lcd_RS;//RS=0
00AA D898 cbi 0x1b,0
00AC .dbline 149
00AC ; lcd_control_port|=lcd_RW;//RW=1
00AC D99A sbi 0x1b,1
00AE .dbline 150
00AE ; NOP();
00AE 0000 nop
00B0 .dbline 151
00B0 ; lcd_control_port|=lcd_EN;//E=1
00B0 DA9A sbi 0x1b,2
00B2 L11:
00B2 .dbline 152
00B2 L12:
00B2 .dbline 152
00B2 ; while(lcd_busy_pin&busy);//等待LCD_DB7为0
00B2 8799 sbic 0x10,7
00B4 FECF rjmp L11
00B6 .dbline 153
00B6 ; lcd_control_port&=~lcd_EN;//重设E=0
00B6 DA98 cbi 0x1b,2
00B8 .dbline 154
00B8 ; lcd_busy_ddr|=busy;//设置busy口为输出
00B8 8F9A sbi 0x11,7
00BA .dbline -2
00BA .dbline 155
00BA ; }
00BA L10:
00BA .dbline 0 ; func end
00BA 0895 ret
00BC .dbend
00BC .dbfunc e display_a_char _display_a_char fV
00BC ; position_tem -> R22
00BC ; char_data -> R20
00BC ; position -> R10
.even
00BC _display_a_char::
00BC 0E940000 xcall push_gset3
00C0 422F mov R20,R18
00C2 A02E mov R10,R16
00C4 .dbline -1
00C4 .dbline 169
00C4 ;
00C4 ;
00C4 ;
00C4 ;
00C4 ;
00C4 ;
00C4 ;
00C4 ; //指定位置显示一个字符:第一行位置0~15,第二行16~31
00C4 ; //显示一个字符函数
00C4 ; //LCD显示字符的位置,我是按附图的坐标安排的,参数position就是指图中的0~31,比如你要在第二行第三个位置显示“s”,你只要display_a_char(18,s)就可以了。
00C4 ;
00C4 ; // lcd_writecommand是用来指定显示寄存器地址亦即显示的地址的
00C4 ; void display_a_char(unsigned char position,unsigned char char_data)//参数position指定位置0~31,char_data为要显示的字符
00C4 ; {
00C4 .dbline 171
00C4 ; unsigned char position_tem;
00C4 ; if(position>=0x10)
00C4 8A2D mov R24,R10
00C6 8031 cpi R24,16
00C8 18F0 brlo L15
00CA .dbline 172
00CA ; position_tem=position+0xb0;//因为LCD第一行显示寄存器地址0X80-0X8F,第二行显示寄存器地址:0XC0-0XCF,所以你的position〉=16位置时,即要写显示寄存器地址position+0xC0-16即是position+0xB0。
00CA 6A2D mov R22,R10
00CC 6055 subi R22,80 ; addi 176
00CE 02C0 xjmp L16
00D0 L15:
00D0 .dbline 174
00D0 ; else
00D0 ; position_tem=position+0x80;//第一行显示
00D0 6A2D mov R22,R10
00D2 6058 subi R22,128 ; addi 128
00D4 L16:
00D4 .dbline 175
00D4 ; lcd_write_command(position_tem,1);
00D4 21E0 ldi R18,1
00D6 062F mov R16,R22
00D8 C8DF xcall _lcd_write_command
00DA .dbline 176
00DA ; lcd_write_data(char_data);
00DA 042F mov R16,R20
00DC D7DF xcall _lcd_write_data
00DE .dbline -2
00DE .dbline 177
00DE ; }
00DE L14:
00DE 0E940000 xcall pop_gset3
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbsym r position_tem 22 c
00E4 .dbsym r char_data 20 c
00E4 .dbsym r position 10 c
00E4 .dbend
00E4 .dbfunc e display_a_string _display_a_string fV
00E4 ; col_tem -> R20
00E4 ; i -> R22
00E4 ; ptr -> R10,R11
00E4 ; col -> R20
.even
00E4 _display_a_string::
00E4 0E940000 xcall push_gset3
00E8 5901 movw R10,R18
00EA 402F mov R20,R16
00EC .dbline -1
00EC .dbline 188
00EC ;
00EC ;
00EC ;
00EC ;
00EC ;
00EC ;
00EC ;
00EC ; //指定一行显示连续字符串:0显示在第一行,1显示在第二行,注字符串不能长于16个字符
00EC ; //显示一行连续字符串函数
00EC ; void display_a_string(unsigned char col,unsigned char *ptr)//参数col指定行,*ptr指字符串数组的首指针
00EC ; {
00EC .dbline 190
00EC ; unsigned char col_tem,i;
00EC ; col_tem=col<<4;//若col为1(即在LCD第二行显示字符串),先把col左移4位,使显示字符的首位置改到第二行首位,即位置16
00EC 842F mov R24,R20
00EE 8F70 andi R24,#0x0F
00F0 8295 swap R24
00F2 482F mov R20,R24
00F4 .dbline 191
00F4 ; for(i=0;i<16;i++)
00F4 6627 clr R22
00F6 0AC0 xjmp L21
00F8 L18:
00F8 .dbline 192
00F8 E62F mov R30,R22
00FA FF27 clr R31
00FC EA0D add R30,R10
00FE FB1D adc R31,R11
0100 2081 ldd R18,z+0
0102 242E mov R2,R20
0104 4F5F subi R20,255 ; addi 1
0106 022D mov R16,R2
0108 D9DF xcall _display_a_char
010A L19:
010A .dbline 191
010A 6395 inc R22
010C L21:
010C .dbline 191
010C 6031 cpi R22,16
010E A0F3 brlo L18
0110 .dbline -2
0110 .dbline 193
0110 ; display_a_char(col_tem++,*(ptr+i));
0110 ; }
0110 L17:
0110 0E940000 xcall pop_gset3
0114 .dbline 0 ; func end
0114 0895 ret
0116 .dbsym r col_tem 20 c
0116 .dbsym r i 22 c
0116 .dbsym r ptr 10 pc
0116 .dbsym r col 20 c
0116 .dbend
0116 .dbfunc e delay_1ms _delay_1ms fV
0116 ; i -> R16,R17
.even
0116 _delay_1ms::
0116 .dbline -1
0116 .dbline 205
0116 ;
0116 ;
0116 ;
0116 ;
0116 ;
0116 ;
0116 ;
0116 ;
0116 ; /*---------------------------------------延时函数-------------------------------------*/
0116 ; //1ms延时函数
0116 ; void delay_1ms(void)
0116 ; {
0116 .dbline 207
0116 0027 clr R16
0118 1127 clr R17
011A 02C0 xjmp L26
011C L23:
011C .dbline 207
011C L24:
011C .dbline 207
011C 0F5F subi R16,255 ; offset = 1
011E 1F4F sbci R17,255
0120 L26:
0120 .dbline 207
0120 ; unsigned int i;
0120 ; for(i=0;i<600;i++);
0120 0835 cpi R16,88
0122 E2E0 ldi R30,2
0124 1E07 cpc R17,R30
0126 D0F3 brlo L23
0128 .dbline -2
0128 .dbline 208
0128 ; }
0128 L22:
0128 .dbline 0 ; func end
0128 0895 ret
012A .dbsym r i 16 i
012A .dbend
012A .dbfunc e delay_nms _delay_nms fV
012A ; i -> R20,R21
012A ; n -> R22,R23
.even
012A _delay_nms::
012A 0E940000 xcall push_gset2
012E B801 movw R22,R16
0130 .dbline -1
0130 .dbline 212
0130 ;
0130 ; //n ms延时函数
0130 ; void delay_nms(unsigned int n)
0130 ; {
0130 .dbline 214
0130 4427 clr R20
0132 5527 clr R21
0134 03C0 xjmp L31
0136 L28:
0136 .dbline 214
0136 EFDF xcall _delay_1ms
0138 L29:
0138 .dbline 214
0138 4F5F subi R20,255 ; offset = 1
013A 5F4F sbci R21,255
013C L31:
013C .dbline 214
013C ; unsigned int i;
013C ; for(i=0;i<n;i++)delay_1ms();
013C 4617 cp R20,R22
013E 5707 cpc R21,R23
0140 D0F3 brlo L28
0142 .dbline -2
0142 .dbline 215
0142 ; }
0142 L27:
0142 0E940000 xcall pop_gset2
0146 .dbline 0 ; func end
0146 0895 ret
0148 .dbsym r i 20 i
0148 .dbsym r n 22 i
0148 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -