📄 12864.s
字号:
.module _12864.C
.area text(rom, con, rel)
.dbfile F:\BBIBBI/delay.h
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nms::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 2
;
; //*****************利用LCD液晶显示图形和文字******************//
.dbline 3
; #include <iom16v.h>
clr R20
clr R21
.dbline 4
; #include <macros.h>
xjmp L5
L2:
.dbline 5
xcall _delay_1ms
L3:
.dbline 4
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 4
cp R20,R22
cpc R21,R23
brlo L2
.dbline -2
L1:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e delay _delay fV
; i -> R20
; n -> R16
.even
_delay::
xcall push_gset1
.dbline -1
.dbline 8
; #include "delay.h"
; #define LCD12864 TRUE
; //************数据端口为PA1,时钟端口为PA3********************//
;
.dbline 10
; #define LCD_DATAL PORTA&=~BIT(1)
; #define LCD_DATAH PORTA|=BIT(1)
clr R20
xjmp L10
L7:
.dbline 11
.dbline 11
nop
.dbline 11
L8:
.dbline 10
inc R20
L10:
.dbline 10
cp R20,R16
brlo L7
.dbline -2
L6:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r n 16 c
.dbend
.dbfunc e delay_1us _delay_1us fV
.even
_delay_1us::
.dbline -1
.dbline 14
; #define LCD_CLKL PORTA&=~BIT(3)
; #define LCD_CLKH PORTA|=BIT(3)
;
; /*******************************************************/
.dbline 15
; /****** 函数名称: lcd_out ******/
nop
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nus _delay_nus fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nus::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 18
; /****** 功 能: 将每一位送入到LCD中 ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
.dbline 19
; /*******************************************************/
clr R20
clr R21
.dbline 20
; void lcd_out(unsigned char send_byte)
xjmp L16
L13:
.dbline 21
xcall _delay_1us
L14:
.dbline 20
subi R20,255 ; offset = 1
sbci R21,255
L16:
.dbline 20
cp R20,R22
cpc R21,R23
brlo L13
.dbline -2
L12:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 24
; {
; unsigned char i,s;
; for (i=0;i<8;i++)
; {
.dbline 26
clr R16
clr R17
xjmp L21
L18:
.dbline 26
L19:
.dbline 26
subi R16,255 ; offset = 1
sbci R17,255
L21:
.dbline 26
; if((send_byte&0x80)==0)
; {
cpi R16,116
ldi R30,4
cpc R17,R30
brlo L18
.dbline -2
L17:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfile F:\BBIBBI\12864.C
.dbfunc e lcd_out _lcd_out fV
; s -> <dead>
; i -> R20
; send_byte -> R22
.even
_lcd_out::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 21
.dbline 23
clr R20
xjmp L26
L23:
.dbline 24
.dbline 25
sbrc R22,7
rjmp L27
.dbline 26
.dbline 27
; LCD_DATAL;
cbi 0x1b,1
.dbline 28
; }
xjmp L28
L27:
.dbline 30
; else
; {
.dbline 31
; LCD_DATAH;
sbi 0x1b,1
.dbline 32
; } //送数据
L28:
.dbline 33
cbi 0x1b,3
.dbline 34
sbi 0x1b,3
.dbline 35
lsl R22
.dbline 36
L24:
.dbline 23
inc R20
L26:
.dbline 23
cpi R20,8
brlo L23
.dbline 37
; LCD_CLKL;
; LCD_CLKH;
; send_byte=send_byte<<1;
; }
; delay(256);
ldi R16,0
xcall _delay
.dbline -2
L22:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l s 1 c
.dbsym r i 20 c
.dbsym r send_byte 22 c
.dbend
.dbfunc e WR_dat _WR_dat fV
; s -> R20
; dat -> R22
.even
_WR_dat::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 47
; }
; /*******************************************************/
; /****** 函数名称: WR_dat ******/
; /****** 功 能: 将数据写入LCD ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
;
; void WR_dat(unsigned char dat)
; {
.dbline 49
; unsigned char s;
; s=dat&0xf0;
mov R20,R22
andi R20,240
.dbline 50
; lcd_out(0xfa);
ldi R16,250
xcall _lcd_out
.dbline 51
; lcd_out(s);
mov R16,R20
xcall _lcd_out
.dbline 52
; s=dat&0x0f;
mov R20,R22
andi R20,15
.dbline 53
; s<<=4;
mov R24,R20
andi R24,#0x0F
swap R24
mov R20,R24
.dbline 54
; lcd_out(s);
mov R16,R24
xcall _lcd_out
.dbline -2
L29:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r s 20 c
.dbsym r dat 22 c
.dbend
.dbfunc e WR_control _WR_control fV
; s -> R20
; dat -> R22
.even
_WR_control::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 63
; }
; /*******************************************************/
; /****** 函数名称: WR_control ******/
; /****** 功 能: 将指令写入LCD ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void WR_control(unsigned char dat)
; {
.dbline 65
; unsigned char s;
; s=dat&0xf0;
mov R20,R22
andi R20,240
.dbline 66
; lcd_out(0xf8);
ldi R16,248
xcall _lcd_out
.dbline 67
; lcd_out(s);
mov R16,R20
xcall _lcd_out
.dbline 68
; s=dat&0x0f;
mov R20,R22
andi R20,15
.dbline 69
; s<<=4;
mov R24,R20
andi R24,#0x0F
swap R24
mov R20,R24
.dbline 70
; lcd_out(s);
mov R16,R24
xcall _lcd_out
.dbline -2
L30:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r s 20 c
.dbsym r dat 22 c
.dbend
.dbfunc e lcd_control _lcd_control fV
.even
_lcd_control::
.dbline -1
.dbline 79
; }
; /*******************************************************/
; /****** 函数名称: lcd_control ******/
; /****** 功 能:使用整体显示,基本指令集 ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void lcd_control()
; {
.dbline 80
; WR_control(0x30);
ldi R16,48
xcall _WR_control
.dbline 81
; WR_control(0x0C);
ldi R16,12
xcall _WR_control
.dbline -2
L31:
.dbline 0 ; func end
ret
.dbend
.dbfunc e lcd_clear _lcd_clear fV
; i -> R20,R21
.even
_lcd_clear::
xcall push_gset1
.dbline -1
.dbline 90
; }
; /*******************************************************/
; /****** 函数名称: lcd_clear() ******/
; /****** 功 能: 清屏 ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void lcd_clear()
; {
.dbline 92
; int i;
; WR_control(0x01);
ldi R16,1
xcall _WR_control
.dbline 93
; for(i=0;i<5000;i++) // 延时5ms
clr R20
clr R21
L33:
.dbline 94
.dbline 95
nop
.dbline 96
nop
.dbline 98
L34:
.dbline 93
subi R20,255 ; offset = 1
sbci R21,255
.dbline 93
cpi R20,136
ldi R30,19
cpc R21,R30
brlt L33
.dbline -2
L32:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbend
.dbfunc e LCD_address _LCD_address fV
; address -> R20
; y -> R22
; x -> R20
.even
_LCD_address::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 107
; {
; asm("nop");
; asm("nop");
;
; }
; }
; /*******************************************************/
; /****** 函数名称: LCD_set_xy() ******/
; /****** 功 能: 设置LCD显示坐标 ******/
; /****** 参 数: 显示字符串的位置,X:0-15,Y:0-1*****/
; /****** 返回值 : 无 ******/
; /*******************************************************/
; void LCD_address( unsigned char x, unsigned char y )
; {
.dbline 109
; unsigned char address;
; switch(x)
clr R21
cpi R20,0
cpc R20,R21
breq L41
X0:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L42
cpi R20,2
ldi R30,0
cpc R21,R30
breq L43
cpi R20,3
ldi R30,0
cpc R21,R30
breq L44
xjmp L38
X1:
.dbline 110
; {
L41:
.dbline 112
; case 0:
; address = 0x80 + y; //计算显示地址
mov R20,R22
subi R20,128 ; addi 128
.dbline 113
; break;
xjmp L39
L42:
.dbline 115
; case 1:
; address = 0x90 + y; //计算显示地址
mov R20,R22
subi R20,112 ; addi 144
.dbline 116
; break;
xjmp L39
L43:
.dbline 118
; case 2:
; address = 0x88 + y; //计算显示地址
mov R20,R22
subi R20,120 ; addi 136
.dbline 119
; break;
xjmp L39
L44:
.dbline 121
; case 3:
; address = 0x98 + y; //计算显示地址
mov R20,R22
subi R20,104 ; addi 152
.dbline 122
; break;
xjmp L39
L38:
.dbline 123
; default:address = 0x80 + y;
mov R20,R22
subi R20,128 ; addi 128
.dbline 124
; }
L39:
.dbline 125
; WR_control( address); //写地址命令
mov R16,R20
xcall _WR_control
.dbline -2
L37:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r address 20 c
.dbsym r y 22 c
.dbsym r x 20 c
.dbend
.dbfunc e LCD_Write_string _LCD_Write_string fV
; s -> R20,R21
; Y -> R10
; X -> R22
.even
_LCD_Write_string::
xcall push_gset3
mov R10,R18
mov R22,R16
ldd R20,y+6
ldd R21,y+7
.dbline -1
.dbline 136
; }
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -