📄 jhd12864.s
字号:
.module jhd12864.c
.area text(rom, con, rel)
.dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
.dbfunc e delayms _delayms fI
; i -> R16,R17
.even
_delayms::
.dbline -1
.dbline 5
; #include "jhd12864.h"
;
;
; delayms()
; { unsigned int i=0;
.dbline 5
clr R16
clr R17
rjmp L3
L2:
.dbline 7
; while(i!=1140)
; {
.dbline 8
; i++;
subi R16,255 ; offset = 1
sbci R17,255
.dbline 9
; }
L3:
.dbline 6
cpi R16,116
ldi R30,4
cpc R17,R30
brne L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; j -> R20,R21
; t -> R10,R11
.even
_delay_1ms::
rcall push_xgset300C
movw R10,R16
.dbline -1
.dbline 13
; }
;
; void delay_1ms(unsigned int t)
; {
.dbline 14
; unsigned int j=0;
clr R20
clr R21
rjmp L7
L6:
.dbline 16
; while(j<t)
; {
.dbline 17
; delayms();
rcall _delayms
.dbline 18
; j++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 19
; }
L7:
.dbline 15
cp R20,R10
cpc R21,R11
brlo L6
X1:
.dbline -2
L5:
.dbline 0 ; func end
rjmp pop_xgset300C
.dbsym r j 20 i
.dbsym r t 10 i
.dbend
.dbfunc e W_1byte _W_1byte fV
; H_data -> R22,R23
; S_ID -> R10,R11
; L_data -> R20,R21
; W_data -> R12
; RS -> R14
; RW -> R20
.even
_W_1byte::
rcall push_xgsetF0FC
mov R14,R18
mov R20,R16
ldd R12,y+10
.dbline -1
.dbline 39
; }
;
;
;
;
; /*******************************************************************
; 函 数 名:W_1byte
; 入口参数:RW、RS、W_data
; 出口参数:无
; 建立日期:2007年3月3日
; 修改日期:
; 函数作用:写一个字节的数据到12864液晶,包括指令和数据
; 说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
; (一般RW都设为0,即只向液晶写数据,不读数据)
; RS=1,写入的是数据;RS=0,写入的是指令;
; 一般模式:RW=0,RS=1;写数据
; RW=0,RS=0;写指令
; ********************************************************************/
; void W_1byte(uchar RW, uchar RS, uchar W_data)
; {
.dbline 40
; uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
ldi R24,248
ldi R25,0
movw R10,R24
.dbline 41
; if(RW == 0)
tst R20
brne L10
X2:
.dbline 42
; {
.dbline 43
; S_ID &=~ 0x04;
andi R24,251
movw R10,R24
.dbline 44
; }
rjmp L11
L10:
.dbline 46
; else //if(RW==1) ????
; {
.dbline 47
; S_ID |= 0X04;
movw R24,R10
ori R24,4
movw R10,R24
.dbline 48
; }
L11:
.dbline 49
; if(RS == 0)
tst R14
brne L12
X3:
.dbline 50
; {
.dbline 51
; S_ID &=~ 0x02;
movw R24,R10
andi R24,253
movw R10,R24
.dbline 52
; }
rjmp L13
L12:
.dbline 54
; else //if(RS==1) ?????
; {
.dbline 55
; S_ID |= 0X02;
movw R24,R10
ori R24,2
movw R10,R24
.dbline 56
; }
L13:
.dbline 57
; H_data = W_data;
mov R22,R12
clr R23
.dbline 58
; H_data &= 0xf0; //屏蔽低4位的数据
andi R22,240
andi R23,0
.dbline 59
; L_data = W_data; //xxxx0000格式
mov R20,R12
clr R21
.dbline 60
; L_data &= 0x0f; //屏蔽高4位的数据
andi R20,15
andi R21,0
.dbline 61
; L_data <<= 4; //xxxx0000格式
lsl R20
rol R21
lsl R20
rol R21
lsl R20
rol R21
lsl R20
rol R21
.dbline 62
; Set_CS();
sbi 0x15,5
.dbline 63
; Write_8bits(S_ID); //发送S_ID
movw R16,R10
rcall _Write_8bits
.dbline 64
; Write_8bits(H_data); //发送H_data
movw R16,R22
rcall _Write_8bits
.dbline 65
; Write_8bits(L_data); //发送L_data
movw R16,R20
rcall _Write_8bits
.dbline 68
; //Write_8bits(W_data);
;
; Clr_CS();
cbi 0x15,5
.dbline -2
L9:
.dbline 0 ; func end
rjmp pop_xgsetF0FC
.dbsym r H_data 22 i
.dbsym r S_ID 10 i
.dbsym r L_data 20 i
.dbsym r W_data 12 c
.dbsym r RS 14 c
.dbsym r RW 20 c
.dbend
.dbfunc e Write_8bits _Write_8bits fV
; Temp_data -> R12,R13
; i -> R20,R21
; W_bits -> R10,R11
.even
_Write_8bits::
rcall push_xgset303C
movw R10,R16
.dbline -1
.dbline 82
; }
;
;
; /********************************************************************
; 函 数 名:Write_8bits
; 入口参数:W_bits
; 出口参数:无
; 建立日期:2007年3月3日
; 修改日期:
; 函数作用:负责串行输出8个bit位
; 说 明:
; ********************************************************************/
; void Write_8bits(uint W_bits)
; {
.dbline 85
; uint i,Temp_data;
; // feed_dog;
; for(i=0; i<8; i++)
clr R20
clr R21
rjmp L18
L15:
.dbline 86
; {
.dbline 87
; Temp_data = W_bits;
movw R12,R10
.dbline 88
; Temp_data <<= i;
movw R18,R20
movw R16,R12
rcall lsl16
movw R12,R16
.dbline 89
; if((Temp_data&0x80)==0)
sbrc R16,7
rjmp L19
X4:
.dbline 90
; {
.dbline 91
; Clr_SID();
cbi 0x15,6
.dbline 92
; }
rjmp L20
L19:
.dbline 94
; else
; {
.dbline 95
; Set_SID();
sbi 0x15,6
.dbline 96
; }
L20:
.dbline 97
; asm("nop");
nop
.dbline 98
; Set_SCLK();
sbi 0x15,7
.dbline 99
; asm("nop");
nop
.dbline 100
; asm("nop");
nop
.dbline 101
; Clr_SCLK();
cbi 0x15,7
.dbline 102
; asm("nop");
nop
.dbline 103
; Clr_SID();
cbi 0x15,6
.dbline 104
; }
L16:
.dbline 85
subi R20,255 ; offset = 1
sbci R21,255
L18:
.dbline 85
cpi R20,8
ldi R30,0
cpc R21,R30
brlo L15
X5:
.dbline -2
L14:
.dbline 0 ; func end
rjmp pop_xgset303C
.dbsym r Temp_data 12 i
.dbsym r i 20 i
.dbsym r W_bits 10 i
.dbend
.dbfunc e Char_Set_XY _Char_Set_XY fV
; p -> R10,R11
; y -> R22
; x -> R20
.even
_Char_Set_XY::
rcall push_xgsetF00C
mov R22,R18
mov R20,R16
sbiw R28,1
ldd R10,y+7
ldd R11,y+8
.dbline -1
.dbline 118
; }
;
; //===================================================================*/
; /********************************************************************
; 函 数 名:Char_Set_XY
; 入口参数:x,y,*p
; 出口参数:无
; 建立日期:2007年8月26日
; 修改日期:
; 函数作用:指定位置显示字符串
; 说 明:
; ********************************************************************/
; void Char_Set_XY(uchar x, uchar y, uchar *p)
; {
.dbline 119
; if(y == 0)
tst R22
brne L22
X6:
.dbline 120
; {
.dbline 121
; W_1byte(0,0,(0x80+x));
mov R24,R20
subi R24,128 ; addi 128
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline 122
; }
L22:
.dbline 123
; if(y == 1)
cpi R22,1
brne L24
X7:
.dbline 124
; {
.dbline 125
; W_1byte(0,0,(0x90+x));
mov R24,R20
subi R24,112 ; addi 144
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline 126
; }
L24:
.dbline 127
; if(y == 2)
cpi R22,2
brne L26
X8:
.dbline 128
; {
.dbline 129
; W_1byte(0,0,(0x88+x));
mov R24,R20
subi R24,120 ; addi 136
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline 130
; }
L26:
.dbline 131
; if(y == 3)
cpi R22,3
brne L31
X9:
.dbline 132
; {
.dbline 133
; W_1byte(0,0,(0x98+x));
mov R24,R20
subi R24,104 ; addi 152
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline 134
; }
rjmp L31
L30:
.dbline 136
; while(*p != 0)
; {
.dbline 137
; W_1byte(0,1,*p++);
movw R30,R10
ld R2,Z+
movw R10,R30
std y+0,R2
ldi R18,1
clr R16
rcall _W_1byte
.dbline 138
; }
L31:
.dbline 135
movw R30,R10
ldd R2,z+0
tst R2
brne L30
X10:
.dbline -2
L21:
.dbline 0 ; func end
adiw R28,1
rjmp pop_xgsetF00C
.dbsym r p 10 pc
.dbsym r y 22 c
.dbsym r x 20 c
.dbend
.dbfunc e Char_Set_XY_BYTE _Char_Set_XY_BYTE fV
; k -> R20
; p -> R10
; y -> R12
; x -> R22
.even
_Char_Set_XY_BYTE::
rcall push_xgsetF03C
mov R12,R18
mov R22,R16
sbiw R28,1
ldd R10,y+9
ldd R20,y+11
.dbline -1
.dbline 154
; }
; //===================================================================*/
;
;
; //===================================================================*/
; /********************************************************************
; 函 数 名:Char_Set_XY_BYTE
; 入口参数:x,y,*p
; 出口参数:无
; 建立日期:2007年8月26日
; 修改日期:
; 函数作用:指定位置显示一个字符
; 说 明:
; ********************************************************************/
; void Char_Set_XY_BYTE(uchar x, uchar y, uchar p,uchar k )
; {
.dbline 155
; if(y == 0)//0x80+x
tst R12
brne L34
X11:
.dbline 156
; {
.dbline 157
; W_1byte(0,0,(0x80+x));
mov R24,R22
subi R24,128 ; addi 128
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline 158
; }
L34:
.dbline 159
; if(y == 1)
mov R24,R12
cpi R24,1
brne L36
X12:
.dbline 160
; {
.dbline 161
; W_1byte(0,0,(0x90+x));
mov R24,R22
subi R24,112 ; addi 144
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline 162
; }
L36:
.dbline 163
; if(y == 2)//0x88+x
mov R24,R12
cpi R24,2
brne L38
X13:
.dbline 164
; {
.dbline 165
; W_1byte(0,0,(0x88+x));
mov R24,R22
subi R24,120 ; addi 136
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline 166
; }
L38:
.dbline 167
; if(y == 3)
mov R24,R12
cpi R24,3
brne L40
X14:
.dbline 168
; {
.dbline 169
; W_1byte(0,0,(0x98+x));
mov R24,R22
subi R24,104 ; addi 152
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline 170
; }
L40:
.dbline 172
;
; if(k==1)
cpi R20,1
brne L42
X15:
.dbline 173
; {
.dbline 174
; W_1byte(0,1,p);
std y+0,R10
ldi R18,1
clr R16
rcall _W_1byte
.dbline 176
;
; }//W_1byte(0,1,p);
L42:
.dbline 177
; if(k==2)
cpi R20,2
brne L44
X16:
.dbline 178
; {
.dbline 179
; W_1byte(0,1,0x20);
ldi R24,32
std y+0,R24
ldi R18,1
clr R16
rcall _W_1byte
.dbline 181
;
; W_1byte(0,1,p);
std y+0,R10
ldi R18,1
clr R16
rcall _W_1byte
.dbline 182
; }
L44:
.dbline -2
L33:
.dbline 0 ; func end
adiw R28,1
rjmp pop_xgsetF03C
.dbsym r k 20 c
.dbsym r p 10 c
.dbsym r y 12 c
.dbsym r x 22 c
.dbend
.dbfunc e Set_Draw _Set_Draw fV
.even
_Set_Draw::
sbiw R28,1
.dbline -1
.dbline 200
;
;
; }
; //===================================================================*/
;
;
;
; /********************************************************************
; 函 数 名:Set_Draw(
; 入口参数:无
; 出口参数:无
; 建立日期:2007年8月26日
; 修改日期:
; 函数作用:反白前必须调用此函数
; 说 明:
; ********************************************************************/
; void Set_Draw(void)
; {
.dbline 202
; //W_1byte(0,0,0x01); //清屏
; delay_1ms(20); //延时
ldi R16,20
ldi R17,0
rcall _delay_1ms
.dbline 204
; //W_1byte(0,0,0x34); //8BIT控制界面,扩充指令集,,绘图显示OFF
; W_1byte(0,0,0x36);
ldi R24,54
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline 205
; delay_1ms(20); //延时
ldi R16,20
ldi R17,0
rcall _delay_1ms
.dbline -2
L46:
.dbline 0 ; func end
adiw R28,1
ret
.dbend
.dbfunc e Set_Char _Set_Char fV
.even
_Set_Char::
sbiw R28,1
.dbline -1
.dbline 220
; }
;
;
;
; /********************************************************************
; 函 数 名:Set_Char(
; 入口参数:无
; 出口参数:无
; 建立日期:2007年8月26日
; 修改日期:
; 函数作用:显示字符前必须调用此函数
; 说 明:
; ********************************************************************/
; void Set_Char(void)
; {
.dbline 221
; W_1byte(0,0,0x30); //基本指令集,,绘图显示OFF
ldi R24,48
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline 222
; W_1byte(0,0,0x01); //清除显示
ldi R24,1
std y+0,R24
clr R18
clr R16
rcall _W_1byte
.dbline -2
L47:
.dbline 0 ; func end
adiw R28,1
ret
.dbend
.dbfunc e Draw_Pic _Draw_Pic fV
; temp_y -> R20
; temp_x -> R22
; i -> R10
; j -> R14
; Draw -> R12,R13
; y -> R10
; x -> R14
.even
_Draw_Pic::
rcall push_xgsetF0FC
mov R10,R18
mov R14,R16
sbiw R28,1
ldd R12,y+11
ldd R13,y+12
.dbline -1
.dbline 238
; }
;
; //===================================================================*/
; /********************************************************************
; 函 数 名:Draw_Pic 128*64
; 入口参数:x,y,*Draw
; 出口参数:无
; 建立日期:2007年8月26日
; 修改日期:
; 函数作用:
; 说 明:
; ********************************************************************/
; /*************************************************/
;
; void Draw_Pic(uchar x, uchar y, uchar *Draw)
; {
.dbline 240
; uchar i, j, temp_x, temp_y; //
; temp_x = x; //
mov R22,R14
.dbline 241
; temp_y = y; //
mov R20,R10
.dbline 242
; temp_x |= 0x80; //
ori R22,128
.dbline 243
; temp_y |= 0x80; //
ori R20,128
.dbline 244
; for(i=0;i<32;i++ ) //上半屏32行
clr R10
rjmp L52
L49:
.dbline 245
; {
.dbline 246
; W_1byte(0,0,temp_y++); //设置绘图区的Y地址坐标0
mov R2,R20
subi R20,255 ; addi 1
std y+0,R2
clr R18
clr R16
rcall _W_1byte
.dbline 247
; W_1byte(0,0,temp_x); //设置绘图区的X地址坐标0
std y+0,R22
clr R18
clr R16
rcall _W_1byte
.dbline 248
; for(j=0;j<16;j++) //
clr R14
rjmp L56
L53:
.dbline 249
; {
.dbline 250
; W_1byte(0,1,*Draw++); //
movw R30,R12
ld R2,Z+
movw R12,R30
std y+0,R2
ldi R18,1
clr R16
rcall _W_1byte
.dbline 251
; }
L54:
.dbline 248
inc R14
L56:
.dbline 248
mov R24,R14
cpi R24,16
brlo L53
X17:
.dbline 252
; }
L50:
.dbline 244
inc R10
L52:
.dbline 244
mov R24,R10
cpi R24,32
brlo L49
X18:
.dbline 254
;
; temp_x = 0x88; //
ldi R22,136
.dbline 255
; temp_y = 0x80; //
ldi R20,128
.dbline 256
; j = 0; //
clr R14
.dbline 257
; for(;i<64;i++ )
rjmp L60
L57:
.dbline 258
; {
.dbline 259
; W_1byte(0,0,temp_y++); //设置绘图区的Y地址坐标
mov R2,R20
subi R20,255 ; addi 1
std y+0,R2
clr R18
clr R16
rcall _W_1byte
.dbline 260
; W_1byte(0,0,temp_x); //设置绘图区的X地址坐标
std y+0,R22
clr R18
clr R16
rcall _W_1byte
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -