📄 12864.lis
字号:
00C6 .dbline 66
00C6 ; lcd_out(0xf8);
00C6 08EF ldi R16,248
00C8 D0DF xcall _lcd_out
00CA .dbline 67
00CA ; lcd_out(s);
00CA 042F mov R16,R20
00CC CEDF xcall _lcd_out
00CE .dbline 68
00CE ; s=dat&0x0f;
00CE 462F mov R20,R22
00D0 4F70 andi R20,15
00D2 .dbline 69
00D2 ; s<<=4;
00D2 842F mov R24,R20
00D4 8F70 andi R24,#0x0F
00D6 8295 swap R24
00D8 482F mov R20,R24
00DA .dbline 70
00DA ; lcd_out(s);
00DA 082F mov R16,R24
00DC C6DF xcall _lcd_out
00DE .dbline -2
00DE L30:
00DE 0E940000 xcall pop_gset2
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbsym r s 20 c
00E4 .dbsym r dat 22 c
00E4 .dbend
00E4 .dbfunc e lcd_control _lcd_control fV
.even
00E4 _lcd_control::
00E4 .dbline -1
00E4 .dbline 79
00E4 ; }
00E4 ; /*******************************************************/
00E4 ; /****** 函数名称: lcd_control ******/
00E4 ; /****** 功 能:使用整体显示,基本指令集 ******/
00E4 ; /****** 参 数: 无 ******/
00E4 ; /****** 返回值 : 无 ******/
00E4 ; /*******************************************************/
00E4 ; void lcd_control()
00E4 ; {
00E4 .dbline 80
00E4 ; WR_control(0x30);
00E4 00E3 ldi R16,48
00E6 EADF xcall _WR_control
00E8 .dbline 81
00E8 ; WR_control(0x0C);
00E8 0CE0 ldi R16,12
00EA E8DF xcall _WR_control
00EC .dbline -2
00EC L31:
00EC .dbline 0 ; func end
00EC 0895 ret
00EE .dbend
00EE .dbfunc e lcd_clear _lcd_clear fV
00EE ; i -> R20,R21
.even
00EE _lcd_clear::
00EE 0E940000 xcall push_gset1
00F2 .dbline -1
00F2 .dbline 90
00F2 ; }
00F2 ; /*******************************************************/
00F2 ; /****** 函数名称: lcd_clear() ******/
00F2 ; /****** 功 能: 清屏 ******/
00F2 ; /****** 参 数: 无 ******/
00F2 ; /****** 返回值 : 无 ******/
00F2 ; /*******************************************************/
00F2 ; void lcd_clear()
00F2 ; {
00F2 .dbline 92
00F2 ; int i;
00F2 ; WR_control(0x01);
00F2 01E0 ldi R16,1
00F4 E3DF xcall _WR_control
00F6 .dbline 93
00F6 ; for(i=0;i<5000;i++) // 延时5ms
00F6 4427 clr R20
00F8 5527 clr R21
00FA L33:
00FA .dbline 94
00FA .dbline 95
00FA 0000 nop
00FC .dbline 96
00FC 0000 nop
00FE .dbline 98
00FE L34:
00FE .dbline 93
00FE 4F5F subi R20,255 ; offset = 1
0100 5F4F sbci R21,255
0102 .dbline 93
0102 4838 cpi R20,136
0104 E3E1 ldi R30,19
0106 5E07 cpc R21,R30
0108 C4F3 brlt L33
010A .dbline -2
010A L32:
010A 0E940000 xcall pop_gset1
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbsym r i 20 I
0110 .dbend
0110 .dbfunc e LCD_address _LCD_address fV
0110 ; address -> R20
0110 ; y -> R22
0110 ; x -> R20
.even
0110 _LCD_address::
0110 0E940000 xcall push_gset2
0114 622F mov R22,R18
0116 402F mov R20,R16
0118 .dbline -1
0118 .dbline 107
0118 ; {
0118 ; asm("nop");
0118 ; asm("nop");
0118 ;
0118 ; }
0118 ; }
0118 ; /*******************************************************/
0118 ; /****** 函数名称: LCD_set_xy() ******/
0118 ; /****** 功 能: 设置LCD显示坐标 ******/
0118 ; /****** 参 数: 显示字符串的位置,X:0-15,Y:0-1*****/
0118 ; /****** 返回值 : 无 ******/
0118 ; /*******************************************************/
0118 ; void LCD_address( unsigned char x, unsigned char y )
0118 ; {
0118 .dbline 109
0118 ; unsigned char address;
0118 ; switch(x)
0118 5527 clr R21
011A 4030 cpi R20,0
011C 4507 cpc R20,R21
011E 69F0 breq L41
0120 X0:
0120 4130 cpi R20,1
0122 E0E0 ldi R30,0
0124 5E07 cpc R21,R30
0126 61F0 breq L42
0128 4230 cpi R20,2
012A E0E0 ldi R30,0
012C 5E07 cpc R21,R30
012E 59F0 breq L43
0130 4330 cpi R20,3
0132 E0E0 ldi R30,0
0134 5E07 cpc R21,R30
0136 51F0 breq L44
0138 0CC0 xjmp L38
013A X1:
013A .dbline 110
013A ; {
013A L41:
013A .dbline 112
013A ; case 0:
013A ; address = 0x80 + y; //计算显示地址
013A 462F mov R20,R22
013C 4058 subi R20,128 ; addi 128
013E .dbline 113
013E ; break;
013E 0BC0 xjmp L39
0140 L42:
0140 .dbline 115
0140 ; case 1:
0140 ; address = 0x90 + y; //计算显示地址
0140 462F mov R20,R22
0142 4057 subi R20,112 ; addi 144
0144 .dbline 116
0144 ; break;
0144 08C0 xjmp L39
0146 L43:
0146 .dbline 118
0146 ; case 2:
0146 ; address = 0x88 + y; //计算显示地址
0146 462F mov R20,R22
0148 4857 subi R20,120 ; addi 136
014A .dbline 119
014A ; break;
014A 05C0 xjmp L39
014C L44:
014C .dbline 121
014C ; case 3:
014C ; address = 0x98 + y; //计算显示地址
014C 462F mov R20,R22
014E 4856 subi R20,104 ; addi 152
0150 .dbline 122
0150 ; break;
0150 02C0 xjmp L39
0152 L38:
0152 .dbline 123
0152 ; default:address = 0x80 + y;
0152 462F mov R20,R22
0154 4058 subi R20,128 ; addi 128
0156 .dbline 124
0156 ; }
0156 L39:
0156 .dbline 125
0156 ; WR_control( address); //写地址命令
0156 042F mov R16,R20
0158 B1DF xcall _WR_control
015A .dbline -2
015A L37:
015A 0E940000 xcall pop_gset2
015E .dbline 0 ; func end
015E 0895 ret
0160 .dbsym r address 20 c
0160 .dbsym r y 22 c
0160 .dbsym r x 20 c
0160 .dbend
0160 .dbfunc e LCD_Write_string _LCD_Write_string fV
0160 ; s -> R20,R21
0160 ; Y -> R10
0160 ; X -> R22
.even
0160 _LCD_Write_string::
0160 0E940000 xcall push_gset3
0164 A22E mov R10,R18
0166 602F mov R22,R16
0168 4E81 ldd R20,y+6
016A 5F81 ldd R21,y+7
016C .dbline -1
016C .dbline 136
016C ; }
016C ;
016C ; /*******************************************************/
016C ; /****** 函数名称: LCD_write_string() ******/
016C ; /****** 功 能: 中英文字符串显示函数 ******/
016C ; /****** 参 数: *s--英文字符串指针 ******/
016C ; /****** X、Y--显示字符串的位置 ******/
016C ; /****** 返回值 : 无 ******/
016C ; /*******************************************************/
016C ; void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
016C ; {
016C .dbline 138
016C ;
016C ; LCD_address( X, Y ); //写显示地址
016C 2A2D mov R18,R10
016E 062F mov R16,R22
0170 CFDF xcall _LCD_address
0172 05C0 xjmp L47
0174 L46:
0174 .dbline 140
0174 .dbline 141
0174 FA01 movw R30,R20
0176 0081 ldd R16,z+0
0178 8DDF xcall _WR_dat
017A .dbline 142
017A 4F5F subi R20,255 ; offset = 1
017C 5F4F sbci R21,255
017E .dbline 143
017E L47:
017E .dbline 139
017E ; while (*s) //是否到字符串尾
017E FA01 movw R30,R20
0180 2080 ldd R2,z+0
0182 2220 tst R2
0184 B9F7 brne L46
0186 .dbline -2
0186 L45:
0186 0E940000 xcall pop_gset3
018A .dbline 0 ; func end
018A 0895 ret
018C .dbsym r s 20 pc
018C .dbsym r Y 10 c
018C .dbsym r X 22 c
018C .dbend
018C .dbfunc e BCD_ASCII _BCD_ASCII fc
018C ; bcd -> R16
.even
018C _BCD_ASCII::
018C .dbline -1
018C .dbline 155
018C ; {
018C ; WR_dat (*s ); //写显示数据
018C ; s ++; //字符串地址加1
018C ; }
018C ; }
018C ;
018C ;
018C ; /******************************************************************************/
018C ; //函数功能:将BCD码转换为ASCII码函数
018C ; //输入数据:BCD
018C ; //输出:ASCII
018C ; //详见SCII码表
018C ; /******************************************************************************/
018C ;
018C ; unsigned char BCD_ASCII(unsigned char bcd)
018C ; {
018C .dbline 156
018C ; bcd &= 0x0F;
018C 0F70 andi R16,15
018E .dbline 157
018E ; if(bcd > 9)
018E 89E0 ldi R24,9
0190 8017 cp R24,R16
0192 10F4 brsh L50
0194 .dbline 158
0194 ; bcd +=('7'); // 将A~F转换为ASCII
0194 095C subi R16,201 ; addi 55
0196 01C0 xjmp L51
0198 L50:
0198 .dbline 160
0198 ; else
0198 ; bcd += '0'; // 将0~9转换为ASCII 0~9
0198 005D subi R16,208 ; addi 48
019A L51:
019A .dbline 161
019A ; return(bcd);
019A .dbline -2
019A L49:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -