📄 lcdexper.s
字号:
.module lcdexper.c
.area text(rom, con, rel)
.dbfile E:\example\icc\lcd_exper\lcdexper.c
.area lit(rom, con, rel)
_Chanping1::
.byte 188,242,210,215,208,197,186,197,178,201,188,175,207,181,205,179
.byte 0
.dbsym e Chanping1 _Chanping1 A[17:17]kc
_jieguo_1::
.byte 196,207,183,189,210,189,191,198,180,243,209,167,0
.dbsym e jieguo_1 _jieguo_1 A[13:13]kc
_jieguo_2::
.byte 201,250,206,239,210,189,209,167,185,164,179,204,209,167,212,186
.byte 0
.dbsym e jieguo_2 _jieguo_2 A[17:17]kc
_jieguo_3::
.byte 50,48,48,53,188,182,211,176,207,241,185,164,179,204,0
.dbsym e jieguo_3 _jieguo_3 A[15:15]kc
_jieguo_4::
.byte 197,183,209,244,177,243,0
.dbsym e jieguo_4 _jieguo_4 A[7:7]kc
.area text(rom, con, rel)
.dbfile E:\example\icc\lcd_exper\lcdexper.c
.dbfunc e Delay _Delay fV
; i -> R20,R21
; t -> R16,R17
.even
_Delay::
st -y,R20
st -y,R21
.dbline -1
.dbline 27
; #include <iom16v.h>
; #include <macros.h>
;
; #define uchar unsigned char
; #define uint unsigned int
;
; #define DB PORTA
; /******************************************************************** */
; #define SETBIT(x,y) (x|=(1<<y)) //set bit y in byte x
; #define CLRBIT(x,y) (x&=(~(1<<y))) //clear bit y in byte x
; #define CHKBIT(x,y) (x&(1<<y)) //check bit y in byte x
; /******************************************************************** */
; #define RS 0
; #define RW 1
; #define E 2
; #define PSB 3
; #define RST 4
;
; unsigned flash char Chanping1[]={"简易信号采集系统"};
; unsigned flash char jieguo_1[]={"南方医科大学"};
; unsigned flash char jieguo_2[]={"生物医学工程学院"};
; unsigned flash char jieguo_3[]={"2005级影像工程"};
; unsigned flash char jieguo_4[]={"欧阳斌"};
;
; //***************延时*********************************/
; void Delay(uint t)
; {
.dbline 28
; uint i=0;
clr R20
clr R21
.dbline 29
; for(i=0;i<=t;i++);
xjmp L5
L2:
.dbline 29
L3:
.dbline 29
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 29
cp R16,R20
cpc R17,R21
brsh L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 i
.dbsym r t 16 i
.dbend
.dbfunc e delay_ms _delay_ms fV
; t2 -> R20
; t -> R16,R17
.even
_delay_ms::
st -y,R20
.dbline -1
.dbline 33
; }
;
; void delay_ms(unsigned int t)
; {
.dbline 34
; unsigned char t2=200;
ldi R20,200
xjmp L8
L10:
.dbline 35
; while(t--)while(t2--);
L11:
.dbline 35
mov R2,R20
clr R3
subi R20,1
tst R2
brne L10
X1:
L8:
.dbline 35
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L11
tst R3
brne L11
X2:
.dbline -2
L6:
.dbline 0 ; func end
ld R20,y+
ret
.dbsym r t2 20 c
.dbsym r t 16 i
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 39
; }
;
; void port_init(void)
; {
.dbline 40
; PORTA = 0xFF;
ldi R24,255
out 0x1b,R24
.dbline 41
; DDRA = 0xFF;
out 0x1a,R24
.dbline 42
; PORTB = 0xFF;
out 0x18,R24
.dbline 43
; DDRB = 0xFF;
out 0x17,R24
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Check_Busy _Check_Busy fV
; dat -> <dead>
.even
_Check_Busy::
.dbline -1
.dbline 50
; }
;
; /*-----------------------------------------------------
; 状态检查函数,判断是否处于忙状态
; -------------------------------------------------------*/
; void Check_Busy(void)
; {
.dbline 52
; unsigned char dat;
; CLRBIT(PORTB,RS); //RS=0
cbi 0x18,0
.dbline 53
; SETBIT(PORTB,RW); //RW=1
sbi 0x18,1
.dbline 54
; DDRA=0x00; // portA as input
clr R2
out 0x1a,R2
L15:
.dbline 56
; do
; {
.dbline 57
; SETBIT(PORTB,E);
sbi 0x18,2
.dbline 58
; CLRBIT(PORTB,E);
cbi 0x18,2
.dbline 59
; }
L16:
.dbline 60
; while (PINA&0x80);
sbic 0x19,7
rjmp L15
X3:
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbsym l dat 1 c
.dbend
.dbfunc e Write_Command _Write_Command fV
; cmdcode -> R10
.even
_Write_Command::
st -y,R10
mov R10,R16
.dbline -1
.dbline 65
; }
; //**********************写命令到LCD***************************/
;
; void Write_Command(uchar cmdcode)
; {
.dbline 66
; Check_Busy();
xcall _Check_Busy
.dbline 67
; DDRB=0xff;
ldi R24,255
out 0x17,R24
.dbline 68
; CLRBIT(PORTB,RS);//RS=0;
cbi 0x18,0
.dbline 69
; CLRBIT(PORTB,RW);//RW=0;
cbi 0x18,1
.dbline 70
; DDRA=0xff;
out 0x1a,R24
.dbline 71
; DB=cmdcode;
out 0x1b,R10
.dbline 72
; Delay(1);//Delay(1);
ldi R16,1
ldi R17,0
xcall _Delay
.dbline 73
; SETBIT(PORTB,E);//E=1;
sbi 0x18,2
.dbline 74
; Delay(1);//Delay(1);Delay(1);
ldi R16,1
ldi R17,0
xcall _Delay
.dbline 75
; CLRBIT(PORTB,E);//E=0;
cbi 0x18,2
.dbline -2
L18:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r cmdcode 10 c
.dbend
.dbfunc e Write_Data _Write_Data fV
; datacode -> R10
.even
_Write_Data::
st -y,R10
mov R10,R16
.dbline -1
.dbline 79
; }
; //**************************写数据到LCD*************************/
; void Write_Data(uchar datacode)
; {
.dbline 80
; Check_Busy();
xcall _Check_Busy
.dbline 81
; DDRB=0xff;
ldi R24,255
out 0x17,R24
.dbline 82
; SETBIT(PORTB,RS);//RS=1;
sbi 0x18,0
.dbline 83
; CLRBIT(PORTB,RW);//RW=0;
cbi 0x18,1
.dbline 84
; DDRA=0xff;
out 0x1a,R24
.dbline 85
; DB=datacode;
out 0x1b,R10
.dbline 86
; Delay(1);//Delay(1);
ldi R16,1
ldi R17,0
xcall _Delay
.dbline 87
; SETBIT(PORTB,E);//E=1;
sbi 0x18,2
.dbline 88
; Delay(1);//Delay(1);Delay(1);
ldi R16,1
ldi R17,0
xcall _Delay
.dbline 89
; CLRBIT(PORTB,E);//E=0;
cbi 0x18,2
.dbline -2
L19:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r datacode 10 c
.dbend
.dbfunc e Initial_LCD _Initial_LCD fV
.even
_Initial_LCD::
.dbline -1
.dbline 93
; }
; //**************************初始化LCD***********************/
; void Initial_LCD(void)
; {
.dbline 94
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 95
; Write_Command(0x30);//30H--基本指令操作
ldi R16,48
xcall _Write_Command
.dbline 96
; Delay(5);
ldi R16,5
ldi R17,0
xcall _Delay
.dbline 97
; Write_Command(0x0c);//开显示,关光标,不闪烁.
ldi R16,12
xcall _Write_Command
.dbline 98
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 99
; Write_Command(0x02);
ldi R16,2
xcall _Write_Command
.dbline 100
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 101
; Write_Command(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。
ldi R16,6
xcall _Write_Command
.dbline 102
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 103
; Write_Command(0x01);//清除显示
ldi R16,1
xcall _Write_Command
.dbline 104
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 105
; Write_Command(0x80);//光标复位
ldi R16,128
xcall _Write_Command
.dbline -2
L20:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Write_String _Write_String fV
; i -> R20
; datacode -> R10,R11
.even
_Write_String::
xcall push_xgset300C
movw R10,R16
.dbline -1
.dbline 110
; }
;
; //*************************写一串字符到LCM**************************/
; void Write_String(unsigned flash char datacode[])
; {
.dbline 111
; uchar i=0;
clr R20
xjmp L23
L22:
.dbline 113
; while(datacode[i])
; {
.dbline 114
; Write_Data(datacode[i]);
mov R30,R20
clr R31
add R30,R10
adc R31,R11
elpm R16,Z
xcall _Write_Data
.dbline 115
; i++;
inc R20
.dbline 116
; if(i==0xff)break;
cpi R20,255
brne L25
X4:
.dbline 116
xjmp L24
L25:
.dbline 117
; }
L23:
.dbline 112
mov R30,R20
clr R31
add R30,R10
adc R31,R11
elpm R2,Z
tst R2
brne L22
X5:
L24:
.dbline -2
L21:
.dbline 0 ; func end
xjmp pop_xgset300C
.dbsym r i 20 c
.dbsym r datacode 10 pkc
.dbend
.dbfunc e Location_XY _Location_XY fV
; y -> R20
; x -> R22
.even
_Location_XY::
xcall push_xgsetF00C
mov R20,R18
mov R22,R16
.dbline -1
.dbline 121
; }
; /**********************设置坐标*****************/
; void Location_XY(uchar x,uchar y)
; {
.dbline 122
; switch(y)
mov R10,R20
clr R11
tst R10
brne X6
tst R11
breq L31
X6:
movw R24,R10
cpi R24,1
ldi R30,0
cpc R25,R30
breq L32
X7:
cpi R24,2
ldi R30,0
cpc R25,R30
breq L33
X8:
cpi R24,3
ldi R30,0
cpc R25,R30
breq L34
X9:
xjmp L28
L31:
.dbline 125
; {
; case 0:
; y=0x80;break;
ldi R20,128
.dbline 125
xjmp L29
L32:
.dbline 127
; case 1:
; y=0x90;break;
ldi R20,144
.dbline 127
xjmp L29
L33:
.dbline 129
; case 2:
; y=0x88;break;
ldi R20,136
.dbline 129
xjmp L29
L34:
.dbline 131
; case 3:
; y=0x98;break;
ldi R20,152
.dbline 131
xjmp L29
L28:
.dbline 133
; default:
; y=0x80;
ldi R20,128
.dbline 134
; }
L29:
.dbline 135
; x=x&0x07;
andi R22,7
.dbline 136
; Write_Command(x+y);
mov R16,R22
add R16,R20
xcall _Write_Command
.dbline -2
L27:
.dbline 0 ; func end
xjmp pop_xgsetF00C
.dbsym r y 20 c
.dbsym r x 22 c
.dbend
.dbfunc e Write_String_atXY _Write_String_atXY fV
; string -> y+2
; y -> R12
; x -> R10
.even
_Write_String_atXY::
st -y,R10
st -y,R12
mov R12,R18
mov R10,R16
.dbline -1
.dbline 140
; }
; //************************在(x,y)处显示字符串string*************/
; void Write_String_atXY(uchar x,uchar y,unsigned flash char string[])
; {
.dbline 141
; Location_XY(x,y);
mov R18,R12
mov R16,R10
xcall _Location_XY
.dbline 142
; Write_String(string);
ldd R16,y+2
ldd R17,y+3
xcall _Write_String
.dbline -2
L35:
.dbline 0 ; func end
ld R12,y+
ld R10,y+
ret
.dbsym l string 2 pkc
.dbsym r y 12 c
.dbsym r x 10 c
.dbend
.dbfunc e Clear_Lcd _Clear_Lcd fV
; i -> R20
; j -> R22
.even
_Clear_Lcd::
st -y,R20
st -y,R22
.dbline -1
.dbline 147
; }
;
; //***********清屏******************************/
; void Clear_Lcd( void )
; {
.dbline 149
; uchar i,j;
; Write_Command(0x34);
ldi R16,52
xcall _Write_Command
.dbline 150
; Write_Command(0x36);
ldi R16,54
xcall _Write_Command
.dbline 151
; for(i=0;i<32;i++)
clr R20
xjmp L40
L37:
.dbline 152
; {
.dbline 153
; Write_Command(0x80|i);
mov R16,R20
ori R16,128
xcall _Write_Command
.dbline 154
; Write_Command(0x80);
ldi R16,128
xcall _Write_Command
.dbline 155
; for(j=0;j<32;j++)
clr R22
xjmp L44
L41:
.dbline 156
; Write_Data(0);
clr R16
xcall _Write_Data
L42:
.dbline 155
inc R22
L44:
.dbline 155
cpi R22,32
brlo L41
X10:
.dbline 157
; }
L38:
.dbline 151
inc R20
L40:
.dbline 151
cpi R20,32
brlo L37
X11:
.dbline -2
L36:
.dbline 0 ; func end
ld R22,y+
ld R20,y+
ret
.dbsym r i 20 c
.dbsym r j 22 c
.dbend
.dbfunc e LcmClearTXT _LcmClearTXT fV
; i -> R20
.even
_LcmClearTXT::
st -y,R20
.dbline -1
.dbline 162
; }
;
; //***************清除“文字”函数**********************/
; void LcmClearTXT( void )
; {
.dbline 164
; unsigned char i;
; Write_Command(0x30);
ldi R16,48
xcall _Write_Command
.dbline 165
; Write_Command(0x80);
ldi R16,128
xcall _Write_Command
.dbline 166
; for(i=0;i<64;i++)
clr R20
xjmp L49
L46:
.dbline 167
; Write_Data(0x20);
ldi R16,32
xcall _Write_Data
L47:
.dbline 166
inc R20
L49:
.dbline 166
cpi R20,64
brlo L46
X12:
.dbline -2
L45:
.dbline 0 ; func end
ld R20,y+
ret
.dbsym r i 20 c
.dbend
.dbfunc e LcmClearBMP _LcmClearBMP fV
; i -> R20
; j -> R22
.even
_LcmClearBMP::
st -y,R20
st -y,R22
.dbline -1
.dbline 171
; }
;
; void LcmClearBMP( void )
; {
.dbline 173
; unsigned char i,j;
; Write_Command(0x34);
ldi R16,52
xcall _Write_Command
.dbline 174
; Write_Command(0x36);
ldi R16,54
xcall _Write_Command
.dbline 175
; for(i=0;i<32;i++)
clr R20
xjmp L54
L51:
.dbline 176
; {
.dbline 177
; Write_Command(0x80|i);
mov R16,R20
ori R16,128
xcall _Write_Command
.dbline 178
; Write_Command(0x80);
ldi R16,128
xcall _Write_Command
.dbline 179
; for(j=0;j<32;j++)
clr R22
xjmp L58
L55:
.dbline 180
; Write_Data(0);
clr R16
xcall _Write_Data
L56:
.dbline 179
inc R22
L58:
.dbline 179
cpi R22,32
brlo L55
X13:
.dbline 181
; }
L52:
.dbline 175
inc R20
L54:
.dbline 175
cpi R20,32
brlo L51
X14:
.dbline -2
L50:
.dbline 0 ; func end
ld R22,y+
ld R20,y+
ret
.dbsym r i 20 c
.dbsym r j 22 c
.dbend
.dbfunc e PutBMP _PutBMP fV
; i -> R22
; y -> R14,R15
; x -> R20,R21
; j -> R12
; puts -> R10,R11
.even
_PutBMP::
xcall push_xgsetF0FC
movw R10,R16
.dbline -1
.dbline 184
; }
; void PutBMP(unsigned flash char *puts)
; {
.dbline 185
; unsigned int x=0,y=0;
clr R20
clr R21
.dbline 185
clr R14
clr R15
.dbline 187
; unsigned char i,j;
; Write_Command(0x34);
ldi R16,52
xcall _Write_Command
.dbline 188
; Write_Command(0x36);
ldi R16,54
xcall _Write_Command
.dbline 189
; for(i=0;i<32;i++)
clr R22
xjmp L63
L60:
.dbline 190
; {
.dbline 191
; Write_Command(0x80|i);
mov R16,R22
ori R16,128
xcall _Write_Command
.dbline 192
; Write_Command(0x80);
ldi R16,128
xcall _Write_Command
.dbline 193
; for(j=0;j<16;j++)
clr R12
xjmp L67
L64:
.dbline 194
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -