📄 12864.s
字号:
.module _12864.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\16实验\串口显示0\12864.c
.dbfile C:\DOCUME~1\Administrator\桌面\16实验\串口显示0\12864_chuankou_drive.h
.dbfunc e delay_us _delay_us fV
; t -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 21
; #include<iom8v.h>
; #include<macros.h>
; #define uchar unsigned char
; #define uint unsigned int
; #define CS_0 PORTD&=~(1<<PDD4) //片选RS
; #define CS_1 PORTD|=(1<<PD4)
; #define SID_0 PORTD&=~(1<<PD5) //数据 RW
; #define SID_1 PORTD|=(1<<PD5)
; #define SCLK_0 PORTD&=~(1<<PD6) //时钟 E
; #define SCLK_1 PORTD|=(1<<PD6)
; #define RST_0 PORTD&=~(1<<PD7) //复位 RST
; #define RST_1 PORTD|=(1<<PD7)
; /**********************函数声明***************************************/
; void delay_us(int t);
; void delay_ms(unsigned int t);
; void send_byte(uchar bbyte);
; void lcd_wcmd(uchar cmd);
; void lcd_wdat(uchar dat);
; //*******************延时 us 8****************************************
; void delay_us(int t)
; {
L2:
.dbline 23
; do
; t--;
subi R16,1
sbci R17,0
L3:
.dbline 24
; while(t>1);
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r t 16 I
.dbend
.dbfunc e delay_ms _delay_ms fV
; t -> R20,R21
.even
_delay_ms::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 28
; }
; //*******************延时 ms *****************************************
; void delay_ms(unsigned int t)
; {
rjmp L7
L6:
.dbline 30
; while(t!=0)
; {
.dbline 31
; delay_us(1142);
ldi R16,1142
ldi R17,4
rcall _delay_us
.dbline 32
; t--;}
subi R20,1
sbci R21,0
.dbline 32
L7:
.dbline 29
cpi R20,0
cpc R20,R21
brne L6
X1:
.dbline -2
L5:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r t 20 i
.dbend
.dbfunc e send_byte _send_byte fV
; i -> R20
; bbyte -> R16
.even
_send_byte::
st -y,R20
.dbline -1
.dbline 36
; }
; /*********************发送1字节函数****************************/
; void send_byte(uchar bbyte)
; {
.dbline 38
; uchar i;
; for(i=0;i<8;i++)
clr R20
rjmp L13
L10:
.dbline 39
; {
.dbline 40
; if(bbyte&0X80)
sbrs R16,7
rjmp L14
X2:
.dbline 41
; {SID_1;}
.dbline 41
sbi 0x12,5
.dbline 41
rjmp L15
L14:
.dbline 43
; else
; {SID_0;}
.dbline 43
cbi 0x12,5
.dbline 43
L15:
.dbline 44
; SCLK_1;
sbi 0x12,6
.dbline 45
; SCLK_0;
cbi 0x12,6
.dbline 46
; bbyte<<=1;
lsl R16
.dbline 47
; }
L11:
.dbline 38
inc R20
L13:
.dbline 38
cpi R20,8
brlo L10
X3:
.dbline -2
L9:
.dbline 0 ; func end
ld R20,y+
ret
.dbsym r i 20 c
.dbsym r bbyte 16 c
.dbend
.dbfunc e lcd_wcmd _lcd_wcmd fV
; Ldata -> R20
; Hdata -> R22
; star_data -> R10
; cmd -> R20
.even
_lcd_wcmd::
rcall push_xgsetF00C
mov R20,R16
.dbline -1
.dbline 51
; }
; /************************写命令函数**********************************/
; void lcd_wcmd(uchar cmd)
; {
.dbline 53
; uchar star_data,Hdata,Ldata;
; star_data=0XF8;
ldi R24,248
mov R10,R24
.dbline 54
; Hdata=cmd&0XF0;
mov R22,R20
andi R22,240
.dbline 55
; Ldata=(cmd<<4)&0XF0;
mov R24,R20
andi R24,#0x0F
swap R24
andi R24,240
mov R20,R24
.dbline 56
; send_byte(star_data);
mov R16,R10
rcall _send_byte
.dbline 57
; delay_us(1);
ldi R16,1
ldi R17,0
rcall _delay_us
.dbline 58
; send_byte(Hdata);
mov R16,R22
rcall _send_byte
.dbline 59
; delay_us(1);
ldi R16,1
ldi R17,0
rcall _delay_us
.dbline 60
; send_byte(Ldata);
mov R16,R20
rcall _send_byte
.dbline 61
; delay_us(1);
ldi R16,1
ldi R17,0
rcall _delay_us
.dbline -2
L16:
.dbline 0 ; func end
rjmp pop_xgsetF00C
.dbsym r Ldata 20 c
.dbsym r Hdata 22 c
.dbsym r star_data 10 c
.dbsym r cmd 20 c
.dbend
.dbfunc e lcd_wdat _lcd_wdat fV
; Ldata -> R20
; Hdata -> R22
; star_data -> R10
; dat -> R20
.even
_lcd_wdat::
rcall push_xgsetF00C
mov R20,R16
.dbline -1
.dbline 65
; }
; /**************************写数据函数***************************************/
; void lcd_wdat(uchar dat)
; {
.dbline 67
; uchar star_data,Hdata,Ldata;
; star_data=0XFA;
ldi R24,250
mov R10,R24
.dbline 68
; Hdata=dat&0XF0;
mov R22,R20
andi R22,240
.dbline 69
; Ldata=(dat<<4)&0XF0;
mov R24,R20
andi R24,#0x0F
swap R24
andi R24,240
mov R20,R24
.dbline 70
; send_byte(star_data);
mov R16,R10
rcall _send_byte
.dbline 71
; delay_us(1);
ldi R16,1
ldi R17,0
rcall _delay_us
.dbline 72
; send_byte(Hdata);
mov R16,R22
rcall _send_byte
.dbline 73
; delay_us(1);
ldi R16,1
ldi R17,0
rcall _delay_us
.dbline 74
; send_byte(Ldata);
mov R16,R20
rcall _send_byte
.dbline 75
; delay_us(1);
ldi R16,1
ldi R17,0
rcall _delay_us
.dbline -2
L17:
.dbline 0 ; func end
rjmp pop_xgsetF00C
.dbsym r Ldata 20 c
.dbsym r Hdata 22 c
.dbsym r star_data 10 c
.dbsym r dat 20 c
.dbend
.dbfunc e lcd_init _lcd_init fV
.even
_lcd_init::
.dbline -1
.dbline 80
;
; }
; /**************************初始化函数*************************************/
; void lcd_init(void)
; {
.dbline 82
; //PSB_0;
; RST_0;
cbi 0x12,7
.dbline 83
; delay_ms(3);
ldi R16,3
ldi R17,0
rcall _delay_ms
.dbline 84
; RST_1;
sbi 0x12,7
.dbline 85
; delay_ms(3);
ldi R16,3
ldi R17,0
rcall _delay_ms
.dbline 86
; CS_1;
sbi 0x12,4
.dbline 87
; lcd_wcmd(0X34);
ldi R16,52
rcall _lcd_wcmd
.dbline 88
; delay_ms(5);
ldi R16,5
ldi R17,0
rcall _delay_ms
.dbline 89
; lcd_wcmd(0X30);
ldi R16,48
rcall _lcd_wcmd
.dbline 90
; delay_ms(5);
ldi R16,5
ldi R17,0
rcall _delay_ms
.dbline 91
; lcd_wcmd(0X0C);
ldi R16,12
rcall _lcd_wcmd
.dbline 92
; delay_ms(5);
ldi R16,5
ldi R17,0
rcall _delay_ms
.dbline 93
; lcd_wcmd(0X01);
ldi R16,1
rcall _lcd_wcmd
.dbline 94
; delay_ms(5);
ldi R16,5
ldi R17,0
rcall _delay_ms
.dbline -2
L18:
.dbline 0 ; func end
ret
.dbend
.dbfunc e lcd_clr _lcd_clr fV
.even
_lcd_clr::
.dbline -1
.dbline 99
;
; }
; /********************清屏*********************/
; void lcd_clr(void)
; {
.dbline 100
; lcd_wcmd(0X01);
ldi R16,1
rcall _lcd_wcmd
.dbline 101
; delay_ms(5);
ldi R16,5
ldi R17,0
rcall _delay_ms
.dbline -2
L19:
.dbline 0 ; func end
ret
.dbend
.dbfunc e locatexy _locatexy fV
; y -> R22
; x -> R20
.even
_locatexy::
st -y,R20
st -y,R22
mov R22,R18
mov R20,R16
.dbline -1
.dbline 105
; }
; /********************位置定义***********************/
; void locatexy(uchar x,uchar y)
; {
.dbline 106
; if(y==0){lcd_wcmd(0X80+x);}
tst R22
brne L21
X4:
.dbline 106
.dbline 106
mov R16,R20
subi R16,128 ; addi 128
rcall _lcd_wcmd
.dbline 106
rjmp L22
L21:
.dbline 107
; else if(y==1){lcd_wcmd(0X90+x);}
cpi R22,1
brne L23
X5:
.dbline 107
.dbline 107
mov R16,R20
subi R16,112 ; addi 144
rcall _lcd_wcmd
.dbline 107
rjmp L24
L23:
.dbline 108
; else if(y==2){lcd_wcmd(0X88+x);}
cpi R22,2
brne L25
X6:
.dbline 108
.dbline 108
mov R16,R20
subi R16,120 ; addi 136
rcall _lcd_wcmd
.dbline 108
rjmp L26
L25:
.dbline 109
; else if(y==3){lcd_wcmd(0X98+x);}
cpi R22,3
brne L27
X7:
.dbline 109
.dbline 109
mov R16,R20
subi R16,104 ; addi 152
rcall _lcd_wcmd
.dbline 109
L27:
L26:
L24:
L22:
.dbline -2
L20:
.dbline 0 ; func end
ld R22,y+
ld R20,y+
ret
.dbsym r y 22 c
.dbsym r x 20 c
.dbend
.dbfunc e lcd_write_str _lcd_write_str fV
; s -> R20,R21
; y -> R12
; x -> R10
.even
_lcd_write_str::
rcall push_xgset303C
mov R12,R18
mov R10,R16
ldd R20,y+6
ldd R21,y+7
.dbline -1
.dbline 113
; }
; /********************显示内容***********************/
; void lcd_write_str(uchar x,uchar y,uchar *s)
; {
.dbline 114
; locatexy(x,y);
mov R18,R12
mov R16,R10
rcall _locatexy
rjmp L31
L30:
.dbline 116
; while(*s)
; {
.dbline 117
; lcd_wdat(*s);
movw R30,R20
ldd R16,z+0
rcall _lcd_wdat
.dbline 118
; s++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 119
; }
L31:
.dbline 115
movw R30,R20
ldd R2,z+0
tst R2
brne L30
X8:
.dbline -2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -