📄 lcd_hg1286.s
字号:
.module LCD_HG1286.c
.area text(rom, con, rel)
.dbfile F:\Work\Data\程序\修订版~1.1\LCD_HG1286.c
.dbfunc e wr_com _wr_com fV
; cmd -> R10
.even
_wr_com::
st -y,R10
mov R10,R16
.dbline -1
.dbline 19
; /*****************************************************
; * File name : LCD_HG1286.C
; * Description : Header file of main_H.H
; * Platform : ICCAVR
; * Author : xiao xue
; * Email : ay1509@yahoo.com
; * Date : 2008-03-13
; * Description : LCD Show
; /********************头文件*************************/
; #include"main_H.h"
; /***************写命令***************
; *函 数:wr_com
; *函数功能:写命令字
; *入口参数:cmd
; *返 回 值:无
; *备 注:
; ************************************/
; void wr_com(uchar cmd)
; {
.dbline 20
; PORTB=cmd; //命令送至B端口
out 0x18,R10
.dbline 21
; RS_clear; //写命令
cbi 0x15,2
.dbline 22
; RW_clear; //写使能
cbi 0x15,4
.dbline 23
; E_clear; //模块使能
cbi 0x15,5
.dbline 24
; delay_nus(300);
ldi R16,300
ldi R17,1
rcall _delay_nus
.dbline 25
; E_set; //关闭使能
sbi 0x15,5
.dbline -2
L1:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r cmd 10 c
.dbend
.dbfunc e wr_date _wr_date fV
; data -> R10,R11
.even
_wr_date::
st -y,R10
st -y,R11
movw R10,R16
.dbline -1
.dbline 36
; }
;
; /*****************写数据**************
; *函 数:wr_date
; *函数功能:写数据
; *入口参数:*data
; *返 回 值:无
; *备 注:
; ************************************/
; void wr_date(uchar *data)
; {
.dbline 37
; PORTB=*data; //数据传至B端口
movw R30,R10
ldd R2,z+0
out 0x18,R2
.dbline 38
; RS_set; //写数据
sbi 0x15,2
.dbline 39
; RW_clear; //写使能
cbi 0x15,4
.dbline 40
; E_clear; //模块使能
cbi 0x15,5
.dbline 41
; delay_nus(300);
ldi R16,300
ldi R17,1
rcall _delay_nus
.dbline 42
; E_set; //关闭使能
sbi 0x15,5
.dbline -2
L2:
.dbline 0 ; func end
ld R11,y+
ld R10,y+
ret
.dbsym r data 10 pc
.dbend
.dbfunc e lcd_init _lcd_init fV
.even
_lcd_init::
.dbline -1
.dbline 52
; }
; /******************初始化**********
; *函 数:lcd_init
; *函数功能:液晶始化
; *入口参数:无
; *返 回 值:无
; *备 注:
; **********************************/
; void lcd_init(void)
; {
.dbline 53
; DDRB=0xff;
ldi R24,255
out 0x17,R24
.dbline 54
; DDRC=0xff;
out 0x14,R24
.dbline 55
; PORTB=0XFF;
out 0x18,R24
.dbline 56
; PORTC=0XFF;
out 0x15,R24
.dbline 57
; wr_com(0x01); //清DDRAM
ldi R16,1
rcall _wr_com
.dbline 58
; wr_com(0x30); //功能设置,一次送8位数据(基本指令集)
ldi R16,48
rcall _wr_com
.dbline 59
; wr_com(0x02); //DDRAM地址归位
ldi R16,2
rcall _wr_com
.dbline 60
; wr_com(0x04);
ldi R16,4
rcall _wr_com
.dbline 61
; wr_com(0x0C); //整体显示,游标off,游标位置off
ldi R16,12
rcall _wr_com
.dbline 62
; wr_com(0x80); //设定DDRAM7位地址到地址计数器AC
ldi R16,128
rcall _wr_com
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.dbfunc e dis _dis fV
; k -> R10
; datas -> y+8
; sum -> R12
; h -> R14
.even
_dis::
rcall push_xgset30FC
mov R12,R18
mov R14,R16
.dbline -1
.dbline 69
; }
; /******************显示数据******************
; *h代表行数可取(1,2,3,4)
; * SUM表示一次要显示汉字的总个数。(1--32)
; ********************************************/
; void dis(uchar h , uchar sum , uchar *datas )
; {
.dbline 70
; unsigned char k=0;
clr R10
.dbline 71
; switch (h){ //判断所要显示行
mov R20,R14
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L8
X0:
cpi R20,2
ldi R30,0
cpc R21,R30
breq L9
X1:
cpi R20,3
ldi R30,0
cpc R21,R30
breq L10
X2:
cpi R20,4
ldi R30,0
cpc R21,R30
breq L11
X3:
rjmp L13
L8:
.dbline 72
; case 1: wr_com(0x80);break;
ldi R16,128
rcall _wr_com
.dbline 72
rjmp L13
L9:
.dbline 73
; case 2: wr_com(0x90);break;
ldi R16,144
rcall _wr_com
.dbline 73
rjmp L13
L10:
.dbline 74
; case 3: wr_com(0x88);break;
ldi R16,136
rcall _wr_com
.dbline 74
rjmp L13
L11:
.dbline 75
; case 4: wr_com(0x98);break;
ldi R16,152
rcall _wr_com
.dbline 75
rjmp L13
L12:
.dbline 77
; }//end switch
; while(k<=sum){ //显示数据个数
.dbline 78
; wr_date(&(*(datas+k))); //写入数据
mov R16,R10
clr R17
ldd R0,y+8
ldd R1,y+9
add R16,R0
adc R17,R1
rcall _wr_date
.dbline 79
; k++;
inc R10
.dbline 80
; }//end while
L13:
.dbline 77
mov R2,R12
clr R3
mov R4,R10
clr R5
cp R2,R4
cpc R3,R5
brge L12
X4:
.dbline -2
L4:
.dbline 0 ; func end
rjmp pop_xgset30FC
.dbsym r k 10 c
.dbsym l datas 8 pc
.dbsym r sum 12 c
.dbsym r h 14 c
.dbend
.dbfunc e lcd_dis _lcd_dis fV
; datac -> R20,R21
; y -> R22
; x -> R10
.even
_lcd_dis::
rcall push_xgsetF00C
mov R22,R18
mov R10,R16
ldd R20,y+6
ldd R21,y+7
.dbline -1
.dbline 89
; }
; /***********************定点显示数据*********************
; *LCD显示子程序(一次写入两个字节)
; * x代表行数可取:1,2,3,4(十进制)
; * y代表列数可取:0X0,0X1————0X7(十六进制)
; * *data代表显示数据
; ********************************************************/
; void lcd_dis(uchar x,uchar y,uchar *datac)
; {
.dbline 90
; switch (x){ //判断所要显示行
clr R11
movw R24,R10
cpi R24,1
ldi R30,0
cpc R25,R30
breq L19
X5:
cpi R24,2
ldi R30,0
cpc R25,R30
breq L20
X6:
cpi R24,3
ldi R30,0
cpc R25,R30
breq L21
X7:
cpi R24,4
ldi R30,0
cpc R25,R30
breq L22
X8:
rjmp L16
L19:
.dbline 91
; case 1: wr_com(0x80+y);break; //所要显示行和列
mov R16,R22
subi R16,128 ; addi 128
rcall _wr_com
.dbline 91
rjmp L17
L20:
.dbline 92
; case 2: wr_com(0x90+y);break;
mov R16,R22
subi R16,112 ; addi 144
rcall _wr_com
.dbline 92
rjmp L17
L21:
.dbline 93
; case 3: wr_com(0x88+y);break;
mov R16,R22
subi R16,120 ; addi 136
rcall _wr_com
.dbline 93
rjmp L17
L22:
.dbline 94
; case 4: wr_com(0x98+y);break;
mov R16,R22
subi R16,104 ; addi 152
rcall _wr_com
.dbline 94
L16:
L17:
.dbline 96
; }//end switch
; wr_date(datac); //定点显示数据第一个字节
movw R16,R20
rcall _wr_date
.dbline 97
; wr_date(&(*(datac+1))); //定点显示数据第二个字节
movw R16,R20
subi R16,255 ; offset = 1
sbci R17,255
rcall _wr_date
.dbline -2
L15:
.dbline 0 ; func end
rjmp pop_xgsetF00C
.dbsym r datac 20 pc
.dbsym r y 22 c
.dbsym r x 10 c
.dbend
.dbfunc e clr _clr fV
; a -> y+0
; i -> R20
.even
_clr::
st -y,R20
sbiw R28,1
.dbline -1
.dbline 107
; }
; /**********************清屏函数***********************
; *函 数:clr
; *函数功能:清屏
; *入口参数:无
; *返 回 值:无
; *备 注:
; ****************************************************/
; void clr(void)
; {
.dbline 108
; uchar i,a=0x20;
ldi R24,32
std y+0,R24
.dbline 109
; wr_com(0x80); //显示命令
ldi R16,128
rcall _wr_com
.dbline 110
; for(i=1;i<=64;i++)
ldi R20,1
rjmp L27
L24:
.dbline 111
; wr_date(&a); //全部显示空格
movw R16,R28
rcall _wr_date
L25:
.dbline 110
inc R20
L27:
.dbline 110
ldi R24,64
cp R24,R20
brsh L24
X9:
.dbline -2
L23:
.dbline 0 ; func end
adiw R28,1
ld R20,y+
ret
.dbsym l a 0 c
.dbsym r i 20 c
.dbend
.dbfunc e page0 _page0 fV
.even
_page0::
sbiw R28,2
.dbline -1
.dbline 121
; }
; /**********************欢迎界面*********************
; *函 数:page0
; *函数功能:显示欢迎界面
; *入口参数:无
; *返 回 值:无
; *备 注:
; ****************************************************/
; void page0(void)
; {
.dbline 122
; dis(2,15,Welcome); //显示欢迎数组
ldi R24,<_Welcome
ldi R25,>_Welcome
std y+1,R25
std y+0,R24
ldi R18,15
ldi R16,2
rcall _dis
.dbline 123
; delay_nms(100); //延时
ldi R16,100
ldi R17,0
rcall _delay_nms
.dbline -2
L28:
.dbline 0 ; func end
adiw R28,2
ret
.dbend
.dbfunc e K_Symbol _K_Symbol fV
.even
_K_Symbol::
sbiw R28,2
.dbline -1
.dbline 133
; }
; /*************************动作界面******************
; *函 数:K_Symbol
; *函数功能:显示键符名称
; *入口参数:无
; *返 回 值:无
; *备 注:
; ****************************************************/
; void K_Symbol(void)
; {
.dbline 134
; lcd_dis(1,0x7,Symbol); //第一行显示键值符号K1
ldi R24,<_Symbol
ldi R25,>_Symbol
std y+1,R25
std y+0,R24
ldi R18,7
ldi R16,1
rcall _lcd_dis
.dbline 135
; lcd_dis(2,0x7,Symbol+2); //第二行显示键值符号K2
ldi R24,<_Symbol+2
ldi R25,>_Symbol+2
std y+1,R25
std y+0,R24
ldi R18,7
ldi R16,2
rcall _lcd_dis
.dbline 136
; lcd_dis(3,0x7,Symbol+4);
ldi R24,<_Symbol+4
ldi R25,>_Symbol+4
std y+1,R25
std y+0,R24
ldi R18,7
ldi R16,3
rcall _lcd_dis
.dbline 137
; lcd_dis(4,0x7,Symbol+6);
ldi R24,<_Symbol+6
ldi R25,>_Symbol+6
std y+1,R25
std y+0,R24
ldi R18,7
ldi R16,4
rcall _lcd_dis
.dbline -2
L29:
.dbline 0 ; func end
adiw R28,2
ret
.dbend
.dbfunc e page1 _page1 fV
.even
_page1::
sbiw R28,2
.dbline -1
.dbline 147
; }
; /********************四种模式界面********************
; *函 数:page1
; *函数功能:显示模式名称
; *入口参数:无
; *返 回 值:无
; *备 注:
; ****************************************************/
; void page1(void)
; {
.dbline 148
; clr(); //清屏
rcall _clr
.dbline 149
; dis(1,8,mode1); //第一行显示模式1
ldi R24,<_mode1
ldi R25,>_mode1
std y+1,R25
std y+0,R24
ldi R18,8
ldi R16,1
rcall _dis
.dbline 150
; dis(2,8,mode2); //第二行显示模式2
ldi R24,<_mode2
ldi R25,>_mode2
std y+1,R25
std y+0,R24
ldi R18,8
ldi R16,2
rcall _dis
.dbline 151
; dis(3,8,mode3);
ldi R24,<_mode3
ldi R25,>_mode3
std y+1,R25
std y+0,R24
ldi R18,8
ldi R16,3
rcall _dis
.dbline 152
; dis(4,8,mode4);
ldi R24,<_mode4
ldi R25,>_mode4
std y+1,R25
std y+0,R24
ldi R18,8
ldi R16,4
rcall _dis
.dbline 153
; K_Symbol(); //显示键盘符号
rcall _K_Symbol
.dbline -2
L33:
.dbline 0 ; func end
adiw R28,2
ret
.dbend
.dbfunc e page2 _page2 fV
.even
_page2::
sbiw R28,2
.dbline -1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -