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

📄 jhd12864.s

📁 ds1302事实时钟+12864液晶显示 4094
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -