⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_hg1286.s

📁 基于ATmega8开发的关于医疗康复的机器人
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -