📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile D:\SOURCE~1\avr\avr48\smg12232zk/initrialm48.h
.dbfunc e Port_Init _Port_Init fV
.even
_Port_Init::
.dbline -1
.dbline 10
;
; /****************** SMG12232ZK串行接口程序******************
; *ICC-AVR application builder : 2007-10-18
; * Target : M8
; * Crystal: 8.0000Mhz
;
; * Title : Accessing to LCD-CONTROLLER
; * Date : 2007-10-18
; * Support QQ: 16693799
; * Create by : Joe Yuan
.dbline 11
; * DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER */
ldi R24,255
out 0x5,R24
.dbline 12
;
out 0x4,R24
.dbline 13
;
ldi R24,111
out 0x8,R24
.dbline 14
;
out 0x7,R24
.dbline 15
; #include <iom48v.h> //ATMEGA48头文件
ldi R24,255
out 0xb,R24
.dbline 16
; #include <macros.h> //宏定义
out 0xa,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Init_Devices _Init_Devices fV
.even
_Init_Devices::
.dbline -1
.dbline 21
; #include "initrialm48.h"//初始化mcu
; #include "define.h" //端口定义
; #include "delay.h" //延时程序
;
;
.dbline 23
; #define LCD_PORT PORTD
; #define LCD_DDR DDRD
cli
.dbline 24
; #define LCD_SCLK PD0
rcall _Port_Init
.dbline 27
; #define LCD_CS PD2
; #define LCD_STD PD1
;
sei
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfile D:\SOURCE~1\avr\avr48\smg12232zk/delay.h
.dbfunc e Delay_1us _Delay_1us fV
.even
_Delay_1us::
.dbline -1
.dbline 53
;
; #define LCD_CS_H LCD_PORT |= BIT(LCD_CS)
; #define LCD_CS_L LCD_PORT &=~ BIT(LCD_CS)
; #define LCD_STD_H LCD_PORT |= BIT(LCD_STD)
; #define LCD_STD_L LCD_PORT &=~ BIT(LCD_STD)
; #define LCD_SCLK_H LCD_PORT |= BIT(LCD_SCLK)
; #define LCD_SCLK_L LCD_PORT &=~ BIT(LCD_SCLK)
;
;
;
; void Send_8bit(Word x);//串行发送8位数据
; void Lcd_Write(Byte start,Byte data);//模块写入子程序
; void Lcd_Reset(void);//模块复位子程序
; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
; void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num);//xpos为列数,ypos为行数,num字符串长度
;
; Byte lcd_buf[10];//数据显示数组
; Byte *pointer;
; Long lcd_data1;
; Long lcd_data2;
;
;
; void main(void)
; {
; Word i;
; Init_Devices();
.dbline 54
; Lcd_Reset();
nop
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Delay_Us _Delay_Us fV
; i -> R20
; xus -> R22
.even
_Delay_Us::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 58
; Hzk_Dis_Words(1,1,"袁自刚:16693799");
; while(1)
; {
; Hzk_Dis_Data(2,1,lcd_data1,7);
.dbline 60
; lcd_data1 ++;
;
clr R20
rjmp L8
L5:
.dbline 61
rcall _Delay_1us
L6:
.dbline 60
inc R20
L8:
.dbline 60
cp R20,R22
brlo L5
.dbline -2
L4:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r xus 22 c
.dbend
.dbfunc e Delay_1ms _Delay_1ms fV
; i -> R16,R17
.even
_Delay_1ms::
.dbline -1
.dbline 65
; Hzk_Dis_Data(2,5,lcd_data2,7);
; lcd_data2 ++;
; Delay_Ms(300);
; }
;
.dbline 67
; }
; /****************发送汉字子程序******************
clr R16
clr R17
rjmp L13
L10:
.dbline 68
L11:
.dbline 67
subi R16,255 ; offset = 1
sbci R17,255
L13:
.dbline 67
cpi R16,118
ldi R30,4
cpc R17,R30
brlo L10
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e Delay_Ms _Delay_Ms fV
; i -> R20,R21
; j -> R22,R23
; xms -> R16,R17
.even
_Delay_Ms::
rcall push_gset2
.dbline -1
.dbline 72
; ** xpos为列数,ypos为行数
; **lcd_pointer为字符串首地址
; *********************************************************/
; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度
; {
.dbline 74
; Byte i=0,ram_address;//ram_address:首地址
; //首先判断字符串得长度
clr R20
clr R21
rjmp L18
L15:
.dbline 75
; while(*(lcd_pointer+i) != '\0')//字符串长度
clr R22
clr R23
rjmp L22
L19:
.dbline 76
.dbline 77
nop
.dbline 78
nop
.dbline 79
nop
.dbline 80
nop
.dbline 81
nop
.dbline 82
nop
.dbline 83
nop
.dbline 84
nop
.dbline 85
nop
.dbline 86
L20:
.dbline 75
subi R22,255 ; offset = 1
sbci R23,255
L22:
.dbline 75
cpi R22,242
ldi R30,1
cpc R23,R30
brlo L19
L16:
.dbline 74
subi R20,255 ; offset = 1
sbci R21,255
L18:
.dbline 74
cp R20,R16
cpc R21,R17
brlo L15
.dbline -2
L14:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r j 22 i
.dbsym r xms 16 i
.dbend
.dbfunc e Delay_X10us _Delay_X10us fV
; i -> R20,R21
; j -> R22
; x10us -> R16,R17
.even
_Delay_X10us::
rcall push_gset2
.dbline -1
.dbline 90
; {
; i++;
; }//i=字符串长度
; if(i>15)
; {
; i=15;
; }
; if(ypos==1)
; {
; ram_address = 0x80+xpos-1;
; }
; else if(ypos==2)
; {
; ram_address = 0x90+xpos-1;
; }
.dbline 92
; Lcd_Write(0xf8,ram_address);
; for(;i>0;i--)
clr R20
clr R21
rjmp L27
L24:
.dbline 93
; {
.dbline 94
; Lcd_Write(0xfa,*lcd_pointer);
clr R22
rjmp L31
L28:
.dbline 95
.dbline 96
nop
.dbline 97
nop
.dbline 98
nop
.dbline 99
L29:
.dbline 94
inc R22
L31:
.dbline 94
cpi R22,2
brlo L28
.dbline 100
L25:
.dbline 92
subi R20,255 ; offset = 1
sbci R21,255
L27:
.dbline 92
cp R20,R16
cpc R21,R17
brlo L24
.dbline -2
L23:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r j 22 c
.dbsym r x10us 16 i
.dbend
.dbfile D:\SOURCE~1\avr\avr48\smg12232zk\main.c
.dbfunc e main _main fV
; i -> <dead>
.even
_main::
sbiw R28,5
.dbline -1
.dbline 51
.dbline 53
rcall _Init_Devices
.dbline 54
rcall _Lcd_Reset
.dbline 55
ldi R24,<L33
ldi R25,>L33
std y+1,R25
std y+0,R24
ldi R18,1
ldi R16,1
rcall _Hzk_Dis_Words
rjmp L35
L34:
.dbline 57
.dbline 58
ldi R24,7
std y+4,R24
lds R4,_lcd_data1+2
lds R5,_lcd_data1+2+1
lds R2,_lcd_data1
lds R3,_lcd_data1+1
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
ldi R18,1
ldi R16,2
rcall _Hzk_Dis_Data
.dbline 59
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_lcd_data1+2
lds R5,_lcd_data1+2+1
lds R2,_lcd_data1
lds R3,_lcd_data1+1
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _lcd_data1+1,R3
sts _lcd_data1,R2
sts _lcd_data1+2+1,R5
sts _lcd_data1+2,R4
.dbline 61
ldi R24,7
std y+4,R24
lds R4,_lcd_data2+2
lds R5,_lcd_data2+2+1
lds R2,_lcd_data2
lds R3,_lcd_data2+1
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
ldi R18,5
ldi R16,2
rcall _Hzk_Dis_Data
.dbline 62
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_lcd_data2+2
lds R5,_lcd_data2+2+1
lds R2,_lcd_data2
lds R3,_lcd_data2+1
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _lcd_data2+1,R3
sts _lcd_data2,R2
sts _lcd_data2+2+1,R5
sts _lcd_data2+2,R4
.dbline 63
ldi R16,300
ldi R17,1
rcall _Delay_Ms
.dbline 64
L35:
.dbline 56
rjmp L34
X0:
.dbline -2
L32:
adiw R28,5
.dbline 0 ; func end
ret
.dbsym l i 6 i
.dbend
.dbfunc e Hzk_Dis_Words _Hzk_Dis_Words fV
; ram_address -> R10
; i -> R20
; lcd_pointer -> R22,R23
; xpos -> R12
; ypos -> R14
.even
_Hzk_Dis_Words::
rcall push_gset5
mov R12,R18
mov R14,R16
ldd R22,y+10
ldd R23,y+11
.dbline -1
.dbline 72
.dbline 73
clr R20
rjmp L39
L38:
.dbline 76
.dbline 77
inc R20
.dbline 78
L39:
.dbline 75
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R2,z+0
tst R2
brne L38
.dbline 79
ldi R24,15
cp R24,R20
brsh L41
.dbline 80
.dbline 81
ldi R20,15
.dbline 82
L41:
.dbline 83
mov R24,R14
cpi R24,1
brne L43
.dbline 84
.dbline 85
mov R24,R12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -