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

📄 ds1302.lst

📁 ds1302事实时钟+12864液晶显示 4094
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0012) void delay_1ms(unsigned int t)
(0013) { 
(0014)   unsigned int j=0;
     41B 2744      CLR	R20
     41C 2755      CLR	R21
     41D C003      RJMP	0x0421
(0015)   while(j<t)
(0016)   {
(0017)     delayms();
     41E DFF0      RCALL	_delayms
(0018) 	j++;
     41F 5F4F      SUBI	R20,0xFF
     420 4F5F      SBCI	R21,0xFF
     421 154A      CP	R20,R10
     422 055B      CPC	R21,R11
     423 F3D0      BCS	0x041E
     424 C292      RJMP	pop_xgset300C
_W_1byte:
  H_data               --> R22
  S_ID                 --> R10
  L_data               --> R20
  W_data               --> R12
  RS                   --> R14
  RW                   --> R20
     425 D281      RCALL	push_xgsetF0FC
     426 2EE2      MOV	R14,R18
     427 2F40      MOV	R20,R16
     428 84CA      LDD	R12,Y+10
(0019) 	}
(0020) }
(0021) 
(0022) 
(0023) 
(0024) 
(0025) /*******************************************************************
(0026) 函 数 名:W_1byte
(0027) 入口参数:RW、RS、W_data
(0028) 出口参数:无
(0029) 建立日期:2007年3月3日
(0030) 修改日期:
(0031) 函数作用:写一个字节的数据到12864液晶,包括指令和数据
(0032) 说    明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
(0033) 		 (一般RW都设为0,即只向液晶写数据,不读数据)
(0034)           RS=1,写入的是数据;RS=0,写入的是指令;
(0035) 		  一般模式:RW=0,RS=1;写数据
(0036) 		  			RW=0,RS=0;写指令
(0037) ********************************************************************/
(0038) void W_1byte(uchar RW, uchar RS, uchar W_data)
(0039) {
(0040) 	uint H_data,L_data,S_ID = 0xf8;	 //11111RWRS0
     429 EF88      LDI	R24,0xF8
     42A E090      LDI	R25,0
     42B 015C      MOVW	R10,R24
(0041) 	if(RW == 0)
     42C 2344      TST	R20
     42D F419      BNE	0x0431
(0042) 	{
(0043) 	 	S_ID &=~ 0x04;
     42E 7F8B      ANDI	R24,0xFB
     42F 015C      MOVW	R10,R24
(0044) 	}
     430 C003      RJMP	0x0434
(0045) 	else					//if(RW==1)    ????
(0046) 	{
(0047) 	 	S_ID |= 0X04;
     431 01C5      MOVW	R24,R10
     432 6084      ORI	R24,4
     433 015C      MOVW	R10,R24
(0048) 	}
(0049) 	if(RS == 0)
     434 20EE      TST	R14
     435 F421      BNE	0x043A
(0050) 	{
(0051) 	 	S_ID &=~ 0x02;
     436 01C5      MOVW	R24,R10
     437 7F8D      ANDI	R24,0xFD
     438 015C      MOVW	R10,R24
(0052) 	}
     439 C003      RJMP	0x043D
(0053) 	else					//if(RS==1)   ?????
(0054) 	{
(0055) 	 	S_ID |= 0X02;
     43A 01C5      MOVW	R24,R10
     43B 6082      ORI	R24,2
     43C 015C      MOVW	R10,R24
(0056) 	}
(0057) 	H_data = W_data;
     43D 2D6C      MOV	R22,R12
     43E 2777      CLR	R23
(0058) 	H_data &= 0xf0;			//屏蔽低4位的数据
     43F 7F60      ANDI	R22,0xF0
     440 7070      ANDI	R23,0
(0059) 	L_data = W_data;	   	//xxxx0000格式
     441 2D4C      MOV	R20,R12
     442 2755      CLR	R21
(0060) 	L_data &= 0x0f;			//屏蔽高4位的数据
     443 704F      ANDI	R20,0xF
     444 7050      ANDI	R21,0
(0061) 	L_data <<= 4;			//xxxx0000格式
     445 0F44      LSL	R20
     446 1F55      ROL	R21
     447 0F44      LSL	R20
     448 1F55      ROL	R21
     449 0F44      LSL	R20
     44A 1F55      ROL	R21
     44B 0F44      LSL	R20
     44C 1F55      ROL	R21
(0062) 	Set_CS();
     44D 9AAD      SBI	0x15,5
(0063) 	Write_8bits(S_ID); 		//发送S_ID
     44E 0185      MOVW	R16,R10
     44F D006      RCALL	_Write_8bits
(0064) 	Write_8bits(H_data);	//发送H_data
     450 018B      MOVW	R16,R22
     451 D004      RCALL	_Write_8bits
(0065) 	Write_8bits(L_data);	//发送L_data
     452 018A      MOVW	R16,R20
     453 D002      RCALL	_Write_8bits
(0066) 	//Write_8bits(W_data);
(0067) 	
(0068) 	Clr_CS();	
     454 98AD      CBI	0x15,5
     455 C246      RJMP	pop_xgsetF0FC
_Write_8bits:
  Temp_data            --> R12
  i                    --> R20
  W_bits               --> R10
     456 D273      RCALL	push_xgset303C
     457 0158      MOVW	R10,R16
(0069) }
(0070) 
(0071) 
(0072) /********************************************************************
(0073) 函 数 名:Write_8bits
(0074) 入口参数:W_bits
(0075) 出口参数:无
(0076) 建立日期:2007年3月3日
(0077) 修改日期:
(0078) 函数作用:负责串行输出8个bit位
(0079) 说    明:
(0080) ********************************************************************/
(0081) void Write_8bits(uint W_bits)
(0082) {
(0083) 	uint i,Temp_data;
(0084) //	feed_dog;
(0085) 	for(i=0; i<8; i++)
     458 2744      CLR	R20
     459 2755      CLR	R21
     45A C013      RJMP	0x046E
(0086) 	{
(0087) 		Temp_data = W_bits;
     45B 0165      MOVW	R12,R10
(0088) 		Temp_data <<= i;
     45C 019A      MOVW	R18,R20
     45D 0186      MOVW	R16,R12
     45E D28B      RCALL	lsl16
     45F 0168      MOVW	R12,R16
(0089) 		if((Temp_data&0x80)==0)
     460 FD07      SBRC	R16,7
     461 C002      RJMP	0x0464
(0090) 		{
(0091) 		 	Clr_SID();
     462 98AE      CBI	0x15,6
(0092) 		}
     463 C001      RJMP	0x0465
(0093) 		else
(0094) 		{
(0095) 		 	Set_SID();
     464 9AAE      SBI	0x15,6
(0096) 		} 
(0097) 		asm("nop");
     465 0000      NOP
(0098) 		Set_SCLK();
     466 9AAF      SBI	0x15,7
(0099) 		asm("nop");
     467 0000      NOP
(0100) 		asm("nop");
     468 0000      NOP
(0101) 		Clr_SCLK();
     469 98AF      CBI	0x15,7
(0102) 		asm("nop");
     46A 0000      NOP
(0103) 		Clr_SID();
     46B 98AE      CBI	0x15,6
     46C 5F4F      SUBI	R20,0xFF
     46D 4F5F      SBCI	R21,0xFF
     46E 3048      CPI	R20,0x8
     46F E0E0      LDI	R30,0
     470 075E      CPC	R21,R30
     471 F348      BCS	0x045B
     472 C25E      RJMP	pop_xgset303C
_Char_Set_XY:
  p                    --> R10
  y                    --> R22
  x                    --> R20
     473 D248      RCALL	push_xgsetF00C
     474 2F62      MOV	R22,R18
     475 2F40      MOV	R20,R16
     476 9721      SBIW	R28,1
     477 80AF      LDD	R10,Y+7
     478 84B8      LDD	R11,Y+8
(0104) 	}
(0105) }
(0106) 
(0107) //===================================================================*/
(0108) /********************************************************************
(0109) 函 数 名:Char_Set_XY
(0110) 入口参数:x,y,*p
(0111) 出口参数:无
(0112) 建立日期:2007年8月26日
(0113) 修改日期:
(0114) 函数作用:指定位置显示字符串
(0115) 说    明:
(0116) ********************************************************************/
(0117) void Char_Set_XY(uchar x, uchar y, uchar *p) 
(0118) { 
(0119)      if(y == 0)
     479 2366      TST	R22
     47A F431      BNE	0x0481
(0120) 	{
(0121) 	 	W_1byte(0,0,(0x80+x));	
     47B 2F84      MOV	R24,R20
     47C 5880      SUBI	R24,0x80
     47D 8388      STD	Y+0,R24
     47E 2722      CLR	R18
     47F 2700      CLR	R16
     480 DFA4      RCALL	_W_1byte
(0122) 	}
(0123) 	if(y == 1)
     481 3061      CPI	R22,1
     482 F431      BNE	0x0489
(0124) 	{
(0125) 		W_1byte(0,0,(0x90+x));
     483 2F84      MOV	R24,R20
     484 5780      SUBI	R24,0x70
     485 8388      STD	Y+0,R24
     486 2722      CLR	R18
     487 2700      CLR	R16
     488 DF9C      RCALL	_W_1byte
(0126) 	}
(0127) 	if(y == 2)
     489 3062      CPI	R22,2
     48A F431      BNE	0x0491
(0128) 	{
(0129) 		W_1byte(0,0,(0x88+x));
     48B 2F84      MOV	R24,R20
     48C 5788      SUBI	R24,0x78
     48D 8388      STD	Y+0,R24
     48E 2722      CLR	R18
     48F 2700      CLR	R16
     490 DF94      RCALL	_W_1byte
(0130) 	}
(0131) 	if(y == 3)
     491 3063      CPI	R22,3
     492 F471      BNE	0x04A1
(0132) 	{
(0133) 		W_1byte(0,0,(0x98+x));
     493 2F84      MOV	R24,R20
     494 5688      SUBI	R24,0x68
     495 8388      STD	Y+0,R24
     496 2722      CLR	R18
     497 2700      CLR	R16
     498 DF8C      RCALL	_W_1byte
(0134) 	}
     499 C007      RJMP	0x04A1
(0135) 	while(*p != 0)
(0136) 	{
(0137) 		W_1byte(0,1,*p++);
     49A 01F5      MOVW	R30,R10
     49B 9021      LD	R2,Z+
     49C 015F      MOVW	R10,R30
     49D 8228      STD	Y+0,R2
     49E E021      LDI	R18,1
     49F 2700      CLR	R16
     4A0 DF84      RCALL	_W_1byte
     4A1 01F5      MOVW	R30,R10
     4A2 8020      LDD	R2,Z+0
     4A3 2022      TST	R2
     4A4 F7A9      BNE	0x049A
     4A5 9621      ADIW	R28,1
     4A6 C21C      RJMP	pop_xgsetF00C
_Char_Set_XY_BYTE:
  k                    --> R20
  p                    --> R10
  y                    --> R12
  x                    --> R22
     4A7 D230      RCALL	push_xgsetF03C
     4A8 2EC2      MOV	R12,R18
     4A9 2F60      MOV	R22,R16
     4AA 9721      SBIW	R28,1
     4AB 84A9      LDD	R10,Y+9
     4AC 854B      LDD	R20,Y+11
(0138) 	}
(0139) }
(0140) //===================================================================*/
(0141) 
(0142) 
(0143) //===================================================================*/
(0144) /********************************************************************
(0145) 函 数 名:Char_Set_XY_BYTE
(0146) 入口参数:x,y,*p
(0147) 出口参数:无
(0148) 建立日期:2007年8月26日
(0149) 修改日期:
(0150) 函数作用:指定位置显示一个字符
(0151) 说    明:
(0152) ********************************************************************/
(0153) void Char_Set_XY_BYTE(uchar x, uchar y, uchar p,uchar k ) 
(0154) { 
(0155)      if(y == 0)//0x80+x
     4AD 20CC      TST	R12
     4AE F431      BNE	0x04B5
(0156) 	{
(0157) 	 	W_1byte(0,0,(0x80+x));	
     4AF 2F86      MOV	R24,R22
     4B0 5880      SUBI	R24,0x80
     4B1 8388      STD	Y+0,R24
     4B2 2722      CLR	R18
     4B3 2700      CLR	R16
     4B4 DF70      RCALL	_W_1byte
(0158) 	}
(0159) 	if(y == 1)
     4B5 2D8C      MOV	R24,R12
     4B6 3081      CPI	R24,1
     4B7 F431      BNE	0x04BE
(0160) 	{
(0161) 		W_1byte(0,0,(0x90+x));
     4B8 2F86      MOV	R24,R22
     4B9 5780      SUBI	R24,0x70
     4BA 8388      STD	Y+0,R24
     4BB 2722      CLR	R18
     4BC 2700      CLR	R16
     4BD DF67      RCALL	_W_1byte
(0162) 	}
(0163) 	if(y == 2)//0x88+x
     4BE 2D8C      MOV	R24,R12
     4BF 3082      CPI	R24,2
     4C0 F431      BNE	0x04C7
(0164) 	{
(0165) 		W_1byte(0,0,(0x88+x));
     4C1 2F86      MOV	R24,R22
     4C2 5788      SUBI	R24,0x78
     4C3 8388      STD	Y+0,R24
     4C4 2722      CLR	R18
     4C5 2700      CLR	R16
     4C6 DF5E      RCALL	_W_1byte
(0166) 	}
(0167) 	if(y == 3)
     4C7 2D8C      MOV	R24,R12
     4C8 3083      CPI	R24,3
     4C9 F431      BNE	0x04D0
(0168) 	{
(0169) 		W_1byte(0,0,(0x98+x));
     4CA 2F86      MOV	R24,R22
     4CB 5688      SUBI	R24,0x68
     4CC 8388      STD	Y+0,R24
     4CD 2722      CLR	R18
     4CE 2700      CLR	R16
     4CF DF55      RCALL	_W_1byte
(0170) 	}
(0171) 	
(0172) 	if(k==1)
     4D0 3041      CPI	R20,1
     4D1 F421      BNE	0x04D6
(0173) 	{
(0174) 	W_1byte(0,1,p);
     4D2 82A8      STD	Y+0,R10
     4D3 E021      LDI	R18,1
     4D4 2700      CLR	R16
     4D5 DF4F      RCALL	_W_1byte
(0175) 	
(0176) 	}//W_1byte(0,1,p);
(0177) 	if(k==2)
     4D6 3042      CPI	R20,2
     4D7 F449      BNE	0x04E1
(0178) 	{
(0179) 	W_1byte(0,1,0x20);
     4D8 E280      LDI	R24,0x20
     4D9 8388      STD	Y+0,R24
     4DA E021      LDI	R18,1
     4DB 2700      CLR	R16
     4DC DF48      RCALL	_W_1byte
(0180) 
(0181) 	W_1byte(0,1,p);
     4DD 82A8      STD	Y+0,R10
     4DE E021      LDI	R18,1
     4DF 2700      CLR	R16
     4E0 DF44      RCALL	_W_1byte
(0182) 	}
     4E1 9621      ADIW	R28,1
     4E2 C1FE      RJMP	pop_xgsetF03C
_Set_Draw:
     4E3 9721      SBIW	R28,1
(0183) 
(0184) 	
(0185) }
(0186) //===================================================================*/
(0187) 
(0188) 
(0189) 
(0190) /********************************************************************
(0191) 函 数 名:Set_Draw(
(0192) 入口参数:无
(0193) 出口参数:无
(0194) 建立日期:2007年8月26日
(0195) 修改日期:
(0196) 函数作用:反白前必须调用此函数
(0197) 说    明:
(0198) ********************************************************************/
(0199) void Set_Draw(void)
(0200) {
(0201) 	//W_1byte(0,0,0x01);			//清屏
(0202) 	delay_1ms(20);					//延时
     4E4 E104      LDI	R16,0x14
     4E5 E010      LDI	R17,0
     4E6 DF32      RCALL	_delay_1ms
(0203) 	//W_1byte(0,0,0x34);			//8BIT控制界面,扩充指令集,,绘图显示OFF
(0204) 	W_1byte(0,0,0x36);
     4E7 E386      LDI	R24,0x36
     4E8 8388      STD	Y+0,R24
     4E9 2722      CLR	R18
     4EA 2700      CLR	R16
     4EB DF39      RCALL	_W_1byte
(0205) 	delay_1ms(20);					//延时
     4EC E104      LDI	R16,0x14
     4ED E010      LDI	R17,0
     4EE DF2A      RCALL	_delay_1ms
     4EF 9621      ADIW	R28,1
     4F0 9508      RET
_Set_Char:
     4F1 9721      SBIW	R28,1
(0206) }
(0207) 
(0208) 
(0209) 
(0210) /********************************************************************
(0211) 函 数 名:Set_Char(
(0212) 入口参数:无
(0213) 出口参数:无

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -