📄 main.lis
字号:
01A2 ; #define LCD_CS PC3
01A2 ;
01A2 ; #define LCD_CS_H LCD_PORT2 |= BIT(LCD_CS)
01A2 ; #define LCD_CS_L LCD_PORT2 &=~ BIT(LCD_CS)
01A2 ; #define LCD_STD_H LCD_PORT1 |= BIT(LCD_STD)
01A2 ; #define LCD_STD_L LCD_PORT1 &=~ BIT(LCD_STD)
01A2 ; #define LCD_SCLK_H LCD_PORT1 |= BIT(LCD_SCLK)
01A2 ; #define LCD_SCLK_L LCD_PORT1 &=~ BIT(LCD_SCLK)
01A2 ;
01A2 ;
01A2 ;
01A2 ; void Send_8bit(Word x);//串行发送8位数据
01A2 ; void Lcd_Write(Byte start,Byte data);//模块写入子程序
01A2 ; void Lcd_Reset(void);//模块复位子程序
01A2 ; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
01A2 ; void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num);//xpos为列数,ypos为行数,num字符串长度
01A2 ; void Hzk_Dis_Char(Byte ypos,Byte xpos,char *lcd_pointer,Byte num);//xpos为列数,ypos为行数,num字符串长度
01A2 ; void Hzk_Dis_Clr(void);//汉字显示清屏
01A2 ;
01A2 ; Long lcd_data1;
01A2 ; Long lcd_data2;
01A2 ;
01A2 ; /****************发送汉字子程序******************
01A2 ; ** xpos为列数,ypos为行数
01A2 ; **lcd_pointer为字符串首地址
01A2 ; *********************************************************/
01A2 ; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度
01A2 ; {
01A2 .dbline 46
01A2 ; Byte i=0,ram_address;//ram_address:首地址
01A2 4427 clr R20
01A4 01C0 xjmp L44
01A6 L43:
01A6 .dbline 49
01A6 ; //首先判断字符串得长度
01A6 ; while(*(lcd_pointer+i) != '\0')//字符串长度
01A6 ; {
01A6 .dbline 50
01A6 ; i++;
01A6 4395 inc R20
01A8 .dbline 51
01A8 ; }//i=字符串长度
01A8 L44:
01A8 .dbline 48
01A8 E42F mov R30,R20
01AA FF27 clr R31
01AC E60F add R30,R22
01AE F71F adc R31,R23
01B0 2080 ldd R2,z+0
01B2 2220 tst R2
01B4 C1F7 brne L43
01B6 X10:
01B6 .dbline 52
01B6 ; if(i>15)
01B6 8FE0 ldi R24,15
01B8 8417 cp R24,R20
01BA 08F4 brsh L46
01BC X11:
01BC .dbline 53
01BC ; {
01BC .dbline 54
01BC ; i=15;
01BC 4FE0 ldi R20,15
01BE .dbline 55
01BE ; }
01BE L46:
01BE .dbline 56
01BE ; if(ypos==1)
01BE 8E2D mov R24,R14
01C0 8130 cpi R24,1
01C2 29F4 brne L48
01C4 X12:
01C4 .dbline 57
01C4 ; {
01C4 .dbline 58
01C4 ; ram_address = 0x80+xpos-1;
01C4 8C2D mov R24,R12
01C6 8058 subi R24,128 ; addi 128
01C8 8150 subi R24,1
01CA A82E mov R10,R24
01CC .dbline 59
01CC ; }
01CC 07C0 xjmp L49
01CE L48:
01CE .dbline 60
01CE ; else if(ypos==2)
01CE 8E2D mov R24,R14
01D0 8230 cpi R24,2
01D2 21F4 brne L50
01D4 X13:
01D4 .dbline 61
01D4 ; {
01D4 .dbline 62
01D4 ; ram_address = 0x90+xpos-1;
01D4 8C2D mov R24,R12
01D6 8057 subi R24,112 ; addi 144
01D8 8150 subi R24,1
01DA A82E mov R10,R24
01DC .dbline 63
01DC ; }
01DC L50:
01DC L49:
01DC .dbline 64
01DC ; Lcd_Write(0xf8,ram_address);
01DC 2A2D mov R18,R10
01DE 08EF ldi R16,248
01E0 A9D0 xcall _Lcd_Write
01E2 .dbline 65
01E2 ; for(;i>0;i--)
01E2 07C0 xjmp L55
01E4 L52:
01E4 .dbline 66
01E4 ; {
01E4 .dbline 67
01E4 ; Lcd_Write(0xfa,*lcd_pointer);
01E4 FB01 movw R30,R22
01E6 2081 ldd R18,z+0
01E8 0AEF ldi R16,250
01EA A4D0 xcall _Lcd_Write
01EC .dbline 68
01EC ; lcd_pointer++;
01EC 6F5F subi R22,255 ; offset = 1
01EE 7F4F sbci R23,255
01F0 .dbline 69
01F0 ; }
01F0 L53:
01F0 .dbline 65
01F0 4A95 dec R20
01F2 L55:
01F2 .dbline 65
01F2 80E0 ldi R24,0
01F4 8417 cp R24,R20
01F6 B0F3 brlo L52
01F8 X14:
01F8 .dbline -2
01F8 L42:
01F8 .dbline 0 ; func end
01F8 0C940000 xjmp pop_xgsetF0FC
01FC .dbsym r ram_address 10 c
01FC .dbsym r i 20 c
01FC .dbsym r lcd_pointer 22 pc
01FC .dbsym r xpos 12 c
01FC .dbsym r ypos 14 c
01FC .dbend
01FC .dbfunc e Hzk_Dis_Char _Hzk_Dis_Char fV
01FC ; ram_address -> R22
01FC ; i -> R10
01FC ; num -> y+12
01FC ; lcd_pointer -> R20,R21
01FC ; xpos -> R12
01FC ; ypos -> R14
.even
01FC _Hzk_Dis_Char::
01FC 0E940000 xcall push_xgsetF0FC
0200 C22E mov R12,R18
0202 E02E mov R14,R16
0204 4A85 ldd R20,y+10
0206 5B85 ldd R21,y+11
0208 .dbline -1
0208 .dbline 74
0208 ;
0208 ; }
0208 ;
0208 ; void Hzk_Dis_Char(Byte ypos,Byte xpos,char *lcd_pointer,Byte num)//xpos为列数,ypos为行数,num字符串长度
0208 ; {
0208 .dbline 75
0208 ; Byte i=0,ram_address;//ram_address:首地址
0208 AA24 clr R10
020A .dbline 76
020A ; if(ypos==1)
020A 8E2D mov R24,R14
020C 8130 cpi R24,1
020E 21F4 brne L57
0210 X15:
0210 .dbline 77
0210 ; {
0210 .dbline 78
0210 ; ram_address = 0x80+xpos-1;
0210 6C2D mov R22,R12
0212 6058 subi R22,128 ; addi 128
0214 6150 subi R22,1
0216 .dbline 79
0216 ; }
0216 06C0 xjmp L58
0218 L57:
0218 .dbline 80
0218 ; else if(ypos==2)
0218 8E2D mov R24,R14
021A 8230 cpi R24,2
021C 19F4 brne L59
021E X16:
021E .dbline 81
021E ; {
021E .dbline 82
021E ; ram_address = 0x90+xpos-1;
021E 6C2D mov R22,R12
0220 6057 subi R22,112 ; addi 144
0222 6150 subi R22,1
0224 .dbline 83
0224 ; }
0224 L59:
0224 L58:
0224 .dbline 84
0224 ; Lcd_Write(0xf8,ram_address);
0224 262F mov R18,R22
0226 08EF ldi R16,248
0228 85D0 xcall _Lcd_Write
022A .dbline 85
022A ; for(i=0;i<num;i++)
022A AA24 clr R10
022C 07C0 xjmp L64
022E L61:
022E .dbline 86
022E ; {
022E .dbline 87
022E ; Lcd_Write(0xfa,*lcd_pointer);
022E FA01 movw R30,R20
0230 2081 ldd R18,z+0
0232 0AEF ldi R16,250
0234 7FD0 xcall _Lcd_Write
0236 .dbline 88
0236 ; lcd_pointer++;
0236 4F5F subi R20,255 ; offset = 1
0238 5F4F sbci R21,255
023A .dbline 89
023A ; }
023A L62:
023A .dbline 85
023A A394 inc R10
023C L64:
023C .dbline 85
023C 0C84 ldd R0,y+12
023E A014 cp R10,R0
0240 B0F3 brlo L61
0242 X17:
0242 .dbline -2
0242 L56:
0242 .dbline 0 ; func end
0242 0C940000 xjmp pop_xgsetF0FC
0246 .dbsym r ram_address 22 c
0246 .dbsym r i 10 c
0246 .dbsym l num 12 c
0246 .dbsym r lcd_pointer 20 pc
0246 .dbsym r xpos 12 c
0246 .dbsym r ypos 14 c
0246 .dbend
0246 .dbfunc e Hzk_Dis_Data _Hzk_Dis_Data fV
0246 ; ram_address -> R22
0246 ; lcd_buf -> y+0
0246 ; lcd_pointer -> R22,R23
0246 ; i -> R10
0246 ; num -> R20
0246 ; data -> y+25
0246 ; xpos -> R12
0246 ; ypos -> R14
.even
0246 _Hzk_Dis_Data::
0246 0E940000 xcall push_xgsetF0FC
024A C22E mov R12,R18
024C E02E mov R14,R16
024E 2F97 sbiw R28,15
0250 4D8D ldd R20,y+29
0252 .dbline -1
0252 .dbline 99
0252 ;
0252 ; }
0252 ;
0252 ; /****************发送数据子程序******************
0252 ; ** xpos为列数,ypos为行数
0252 ; **data为数据
0252 ; **num数据占用得位数
0252 ; *********************************************************/
0252 ; void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num)
0252 ; {
0252 .dbline 100
0252 ; Byte i=0,ram_address;//ram_address:首地址
0252 AA24 clr R10
0254 .dbline 103
0254 ; Byte lcd_buf[15];
0254 ; Byte *lcd_pointer;
0254 ; if(num<16)
0254 4031 cpi R20,16
0256 08F0 brlo X23
0258 55C0 xjmp L66
025A X23:
025A X18:
025A .dbline 104
025A ; {
025A .dbline 105
025A ; for(i=0;i<num;i++)
025A 36C0 xjmp L71
025C L68:
025C .dbline 106
025C ; {
025C .dbline 107
025C ; lcd_buf[num-i-1]= data%10+0x30;
025C 8AE0 ldi R24,10
025E 90E0 ldi R25,0
0260 A0E0 ldi R26,0
0262 B0E0 ldi R27,0
0264 098D ldd R16,y+25
0266 1A8D ldd R17,y+26
0268 2B8D ldd R18,y+27
026A 3C8D ldd R19,y+28
026C BA93 st -y,R27
026E AA93 st -y,R26
0270 9A93 st -y,R25
0272 8A93 st -y,R24
0274 0E940000 xcall mod32u
0278 1801 movw R2,R16
027A 2901 movw R4,R18
027C 80E3 ldi R24,48
027E 90E0 ldi R25,0
0280 A0E0 ldi R26,0
0282 B0E0 ldi R27,0
0284 280E add R2,R24
0286 391E adc R3,R25
0288 4A1E adc R4,R26
028A 5B1E adc R5,R27
028C 3A2C mov R3,R10
028E 4424 clr R4
0290 E42F mov R30,R20
0292 FF27 clr R31
0294 E319 sub R30,R3
0296 F409 sbc R31,R4
0298 CE01 movw R24,R28
029A 0197 sbiw R24,1
029C E80F add R30,R24
029E F91F adc R31,R25
02A0 2082 std z+0,R2
02A2 .dbline 108
02A2 ; data /= 10;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -