📄 1602lcd.lis
字号:
008A 0000 nop
008C .dbline 61
008C ; lcd_control_port|=lcd_EN;//E=1
008C DA9A sbi 0x1b,2
008E .dbline 63
008E ; //while(lcd_busy_pin&busy);//等待LCD_DB7为0/////////////////////////
008E ; lcd_control_port&=~lcd_EN;//重设E=0
008E DA98 cbi 0x1b,2
0090 .dbline 64
0090 ; lcd_busy_ddr|=busy;//设置busy口为输出
0090 8F9A sbi 0x11,7
0092 .dbline -2
0092 L6:
0092 .dbline 0 ; func end
0092 0895 ret
0094 .dbend
0094 .dbfunc e display_a_char _display_a_char fV
0094 ; position_tem -> R20
0094 ; char_data -> R10
0094 ; position -> R22
.even
0094 _display_a_char::
0094 0E940000 xcall push_xgsetF00C
0098 A22E mov R10,R18
009A 602F mov R22,R16
009C .dbline -1
009C .dbline 70
009C ; }
009C ;
009C ; //指定位置显示一个字符:第一行位置0~15,第二行16~31
009C ; //显示一个字符函数
009C ; void display_a_char(unsigned char position,unsigned char char_data)//参数position指定位置0~31,char_data为要显示的字符
009C ; {
009C .dbline 72
009C ; unsigned char position_tem;
009C ; if(position>=0x10)
009C 6031 cpi R22,16
009E 18F0 brlo L8
00A0 X1:
00A0 .dbline 73
00A0 ; position_tem=position+0xb0;///////////
00A0 462F mov R20,R22
00A2 4055 subi R20,80 ; addi 176
00A4 02C0 xjmp L9
00A6 L8:
00A6 .dbline 75
00A6 ; else
00A6 ; position_tem=position+0x80;
00A6 462F mov R20,R22
00A8 4058 subi R20,128 ; addi 128
00AA L9:
00AA .dbline 76
00AA ; lcd_write_command(position_tem,1);
00AA 21E0 ldi R18,1
00AC 042F mov R16,R20
00AE CDDF xcall _lcd_write_command
00B0 .dbline 77
00B0 ; lcd_write_data(char_data);
00B0 0A2D mov R16,R10
00B2 DCDF xcall _lcd_write_data
00B4 .dbline -2
00B4 L7:
00B4 .dbline 0 ; func end
00B4 0C940000 xjmp pop_xgsetF00C
00B8 .dbsym r position_tem 20 c
00B8 .dbsym r char_data 10 c
00B8 .dbsym r position 22 c
00B8 .dbend
00B8 .dbfunc e display_a_string _display_a_string fV
00B8 ; col_tem -> R22
00B8 ; i -> R20
00B8 ; ptr -> R10,R11
00B8 ; col -> R20
.even
00B8 _display_a_string::
00B8 0E940000 xcall push_xgsetF00C
00BC 5901 movw R10,R18
00BE 402F mov R20,R16
00C0 .dbline -1
00C0 .dbline 83
00C0 ; }
00C0 ;
00C0 ; //指定一行显示连续字符串:0显示在第一行,1显示在第二行,注字符串不能长于16个字符
00C0 ; //显示一行连续字符串函数
00C0 ; void display_a_string(unsigned char col,unsigned char *ptr)//参数col指定行,*ptr指字符串数组的首指针
00C0 ; {
00C0 .dbline 85
00C0 ; unsigned char col_tem,i;
00C0 ; col_tem=col<<4;//若col为1(即在LCD第二行显示字符串),先把col左移4位,使显示字符的首位置改到第二行首位,即位置16
00C0 642F mov R22,R20
00C2 6F70 andi R22,#0x0F
00C4 6295 swap R22
00C6 .dbline 86
00C6 ; for(i=0;i<16;i++)
00C6 4427 clr R20
00C8 0AC0 xjmp L14
00CA L11:
00CA .dbline 87
00CA ; display_a_char(col_tem++,*(ptr+i));
00CA E42F mov R30,R20
00CC FF27 clr R31
00CE EA0D add R30,R10
00D0 FB1D adc R31,R11
00D2 2081 ldd R18,z+0
00D4 262E mov R2,R22
00D6 6F5F subi R22,255 ; addi 1
00D8 022D mov R16,R2
00DA DCDF xcall _display_a_char
00DC L12:
00DC .dbline 86
00DC 4395 inc R20
00DE L14:
00DE .dbline 86
00DE 4031 cpi R20,16
00E0 A0F3 brlo L11
00E2 X2:
00E2 .dbline -2
00E2 L10:
00E2 .dbline 0 ; func end
00E2 0C940000 xjmp pop_xgsetF00C
00E6 .dbsym r col_tem 22 c
00E6 .dbsym r i 20 c
00E6 .dbsym r ptr 10 pc
00E6 .dbsym r col 20 c
00E6 .dbend
00E6 .dbfunc e delay_1ms _delay_1ms fV
00E6 ; i -> R16,R17
.even
00E6 _delay_1ms::
00E6 .dbline -1
00E6 .dbline 93
00E6 ; }
00E6 ;
00E6 ; /*---------------------------------------延时函数-------------------------------------*/
00E6 ; //1ms延时函数
00E6 ; void delay_1ms(void)
00E6 ; {
00E6 .dbline 95
00E6 ; unsigned int i;
00E6 ; for(i=0;i<600;i++);
00E6 0027 clr R16
00E8 1127 clr R17
00EA 02C0 xjmp L19
00EC L16:
00EC .dbline 95
00EC L17:
00EC .dbline 95
00EC 0F5F subi R16,255 ; offset = 1
00EE 1F4F sbci R17,255
00F0 L19:
00F0 .dbline 95
00F0 0835 cpi R16,88
00F2 E2E0 ldi R30,2
00F4 1E07 cpc R17,R30
00F6 D0F3 brlo L16
00F8 X3:
00F8 .dbline -2
00F8 L15:
00F8 .dbline 0 ; func end
00F8 0895 ret
00FA .dbsym r i 16 i
00FA .dbend
00FA .dbfunc e delay_nms _delay_nms fV
00FA ; i -> R20,R21
00FA ; n -> R10,R11
.even
00FA _delay_nms::
00FA 0E940000 xcall push_xgset300C
00FE 5801 movw R10,R16
0100 .dbline -1
0100 .dbline 100
0100 ; }
0100 ;
0100 ; //n ms延时函数
0100 ; void delay_nms(unsigned int n)
0100 ; {
0100 .dbline 102
0100 ; unsigned int i;
0100 ; for(i=0;i<n;i++)delay_1ms();
0100 4427 clr R20
0102 5527 clr R21
0104 03C0 xjmp L24
0106 L21:
0106 .dbline 102
0106 EFDF xcall _delay_1ms
0108 L22:
0108 .dbline 102
0108 4F5F subi R20,255 ; offset = 1
010A 5F4F sbci R21,255
010C L24:
010C .dbline 102
010C 4A15 cp R20,R10
010E 5B05 cpc R21,R11
0110 D0F3 brlo L21
0112 X4:
0112 .dbline -2
0112 L20:
0112 .dbline 0 ; func end
0112 0C940000 xjmp pop_xgset300C
0116 .dbsym r i 20 i
0116 .dbsym r n 10 i
0116 .dbend
0116 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -