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

📄 12864.s

📁 12864.rar
💻 S
📖 第 1 页 / 共 3 页
字号:
	.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 + -