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

📄 nrf2401.lst

📁 著名的RF射频芯片nRF2401应用程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0085) 	for(i=0;i<len;i++)
    0167 2744      CLR	R20
    0168 C00D      RJMP	0x0176
(0086) 	{
(0087) 	//if(*Ptr!='/0')
(0088) 	//if(*Ptr!=0)
(0089) 	{
(0090) 	displaybyte(*Ptr);
    0169 2DEA      MOV	R30,R10
    016A 2DFB      MOV	R31,R11
    016B 8100      LDD	R16,Z+0
    016C DF83      RCALL	_displaybyte
(0091) 	Ptr++ ;
    016D 2D8A      MOV	R24,R10
    016E 2D9B      MOV	R25,R11
    016F 9601      ADIW	R24,1
    0170 2EA8      MOV	R10,R24
    0171 2EB9      MOV	R11,R25
(0092) 	lcd_write_data(' ');
    0172 E200      LDI	R16,0x20
    0173 E010      LDI	R17,0
    0174 D030      RCALL	_lcd_write_data
    0175 9543      INC	R20
    0176 1746      CP	R20,R22
    0177 F388      BCS	0x0169
    0178 D330      RCALL	pop_gset3
    0179 9508      RET
_delay:
  i                    --> R20
  times                --> R16
    017A D33A      RCALL	push_gset1
FILE: F:\programme\nrf2401\lcd.c
(0001) ///****************************************************************//
(0002) //液晶显示模块,采用ATmega8单片机和OCM4*8液晶,串行方式
(0003) //采用PORTD的高三位
(0004) //pd5---lcd_cs
(0005) //pd7---lcd_sdat
(0006) //pd6---lcd_sclk
(0007) //周金广2006年7月20日整理
(0008) ///****************************************************************//
(0009) ///////////////////////////////////////////////////
(0010) //lcd初始化程序
(0011) //////////////////////////////////////////////////
(0012) #include <stdio.h>
(0013) #include <iom8v.h>
(0014) #include <macros.h>
(0015) 
(0016) 
(0017) ///////////////////////////////////////////////
(0018) //
(0019) //////////////////////////////////////////////
(0020) void delay(unsigned int times)
(0021) {unsigned int i;
(0022) for(i=0;i<times;i++)
    017B 2744      CLR	R20
    017C 2755      CLR	R21
    017D C002      RJMP	0x0180
    017E 5F4F      SUBI	R20,0xFF
    017F 4F5F      SBCI	R21,0xFF
    0180 1740      CP	R20,R16
    0181 0751      CPC	R21,R17
    0182 F3D8      BCS	0x017E
    0183 D334      RCALL	pop_gset1
    0184 9508      RET
_lcd_send_byte:
  data1                --> R20
  i                    --> R22
  data                 --> R10
    0185 D32B      RCALL	push_gset3
    0186 2EA0      MOV	R10,R16
(0023) ;
(0024) }
(0025) 
(0026) void lcd_send_byte(char data)
(0027) {unsigned int i,data1;
(0028) for(i=0;i<8;i++)
    0187 2766      CLR	R22
    0188 2777      CLR	R23
    0189 C015      RJMP	0x019F
(0029) {data1=data&0x80;       //test data bit7 为零则放送零,为一则放送一
    018A 2D4A      MOV	R20,R10
    018B 2755      CLR	R21
    018C 7840      ANDI	R20,0x80
    018D 7050      ANDI	R21,0
(0030)  if(data1!=0)
    018E 3040      CPI	R20,0
    018F 0745      CPC	R20,R21
    0190 F029      BEQ	0x0196
(0031)  { PORTD|=BIT(PD7);
    0191 9A97      SBI	0x12,7
(0032)      delay(20);
    0192 E104      LDI	R16,0x14
    0193 E010      LDI	R17,0
    0194 DFE5      RCALL	_delay
(0033)   }
    0195 C004      RJMP	0x019A
(0034)  else {PORTD&=~BIT(PD7);          ///当单片机速度太快时,加延时
    0196 9897      CBI	0x12,7
(0035)      delay(20); }
    0197 E104      LDI	R16,0x14
    0198 E010      LDI	R17,0
    0199 DFE0      RCALL	_delay
(0036) 	   
(0037) //PORTD=PORTD&data;
(0038) PORTD|=BIT(PD6);     // set sclk high
    019A 9A96      SBI	0x12,6
(0039) 
(0040) PORTD&=~BIT(PD6);    // set sclk low
    019B 9896      CBI	0x12,6
(0041) data=data<<1;
    019C 0CAA      LSL	R10
    019D 5F6F      SUBI	R22,0xFF
    019E 4F7F      SBCI	R23,0xFF
    019F 3068      CPI	R22,0x8
    01A0 E0E0      LDI	R30,0
    01A1 077E      CPC	R23,R30
    01A2 F338      BCS	0x018A
    01A3 D305      RCALL	pop_gset3
    01A4 9508      RET
_lcd_write_data:
  data2                --> R22
  data1                --> R10
  data3                --> R20
  data                 --> R20
    01A5 D30B      RCALL	push_gset3
    01A6 2F40      MOV	R20,R16
(0042) }
(0043) }
(0044) /////////////////////////////////////////////////////////////
(0045) ////
(0046) ////////////////////////////////////////////////////////////
(0047) void lcd_write_data(char data)
(0048) {char data1=0xfa,data2,data3;
    01A7 EF8A      LDI	R24,0xFA
    01A8 2EA8      MOV	R10,R24
(0049)     
(0050) 	PORTD|=BIT(PD5);      //set cs high
    01A9 9A95      SBI	0x12,5
(0051) 	
(0052)    data2=data&0xf0;
    01AA 2F64      MOV	R22,R20
    01AB 7F60      ANDI	R22,0xF0
(0053)    data3=data&0x0f;
    01AC 704F      ANDI	R20,0xF
(0054)    data3=data3<<4;
    01AD 2F84      MOV	R24,R20
    01AE 708F      ANDI	R24,0xF
    01AF 9582      SWAP	R24
    01B0 2F48      MOV	R20,R24
(0055)    
(0056)    lcd_send_byte(data1);
    01B1 2D0A      MOV	R16,R10
    01B2 DFD2      RCALL	_lcd_send_byte
(0057)    lcd_send_byte(data2);
    01B3 2F06      MOV	R16,R22
    01B4 DFD0      RCALL	_lcd_send_byte
(0058)    lcd_send_byte(data3);
    01B5 2F04      MOV	R16,R20
    01B6 DFCE      RCALL	_lcd_send_byte
(0059)    
(0060)    PORTD&=~BIT(PD5);       //set cs low
    01B7 9895      CBI	0x12,5
    01B8 D2F0      RCALL	pop_gset3
    01B9 9508      RET
_lcd_write_comm:
  data2                --> R22
  data1                --> R10
  data3                --> R20
  data                 --> R20
    01BA D2F6      RCALL	push_gset3
    01BB 2F40      MOV	R20,R16
(0061) 
(0062) }
(0063) /////////////////////////////////////////////////////////////
(0064) ////
(0065) ////////////////////////////////////////////////////////////
(0066) void lcd_write_comm(char data)
(0067) //int data;
(0068) {char data1=0xf8,data2,data3;
    01BC EF88      LDI	R24,0xF8
    01BD 2EA8      MOV	R10,R24
(0069)    PORTD|=BIT(PD5);     //set cs high
    01BE 9A95      SBI	0x12,5
(0070)    
(0071)    data2=data&0xf0;
    01BF 2F64      MOV	R22,R20
    01C0 7F60      ANDI	R22,0xF0
(0072)    data3=data&0x0f;
    01C1 704F      ANDI	R20,0xF
(0073)    data3=data3<<4;
    01C2 2F84      MOV	R24,R20
    01C3 708F      ANDI	R24,0xF
    01C4 9582      SWAP	R24
    01C5 2F48      MOV	R20,R24
(0074)    
(0075)    lcd_send_byte(data1);
    01C6 2D0A      MOV	R16,R10
    01C7 DFBD      RCALL	_lcd_send_byte
(0076)    lcd_send_byte(data2);
    01C8 2F06      MOV	R16,R22
    01C9 DFBB      RCALL	_lcd_send_byte
(0077)    lcd_send_byte(data3);
    01CA 2F04      MOV	R16,R20
    01CB DFB9      RCALL	_lcd_send_byte
(0078)    
(0079)    PORTD&=~BIT(PD5);     //set cs low
    01CC 9895      CBI	0x12,5
    01CD D2DB      RCALL	pop_gset3
    01CE 9508      RET
(0080) 
(0081) }
(0082) void lcd_initial(void)
(0083) {
(0084)     
(0085)    lcd_write_comm(0x30);			//基本指令集
_lcd_initial:
    01CF E300      LDI	R16,0x30
    01D0 DFE9      RCALL	_lcd_write_comm
(0086)    lcd_write_comm(0x01);			//清除显示屏幕,把DDRAM位址计数器调整为"00H"
    01D1 E001      LDI	R16,1
    01D2 DFE7      RCALL	_lcd_write_comm
(0087)    lcd_write_comm(0x03);			//把DDRAM位址计数器调整为"00H",游标回原点,该功能不影响显示DDRAM
    01D3 E003      LDI	R16,3
    01D4 DFE5      RCALL	_lcd_write_comm
(0088)    lcd_write_comm(0x06);			//光标右移
    01D5 E006      LDI	R16,6
    01D6 DFE3      RCALL	_lcd_write_comm
(0089)    lcd_write_comm(0x0c);			//显示屏打开
    01D7 E00C      LDI	R16,0xC
    01D8 DFE1      RCALL	_lcd_write_comm
    01D9 9508      RET
_screen:
  j                    --> Y+1
  i                    --> R20
  data                 --> R22
    01DA D2D8      RCALL	push_gset2
    01DB 2F60      MOV	R22,R16
    01DC 2F71      MOV	R23,R17
(0090) }
(0091) /////////////////////////////////////////////////////
(0092) ////
(0093) /////////////////////////////////////////////////////
(0094) 
(0095) void screen(data)
(0096) char data[65];
(0097) 
(0098)  {         
(0099) 	    unsigned int i,j;
(0100) 		lcd_write_comm(0x08);
    01DD E008      LDI	R16,0x8
    01DE DFDB      RCALL	_lcd_write_comm
(0101) 		for (i=0;i<64;i++)
    01DF 2744      CLR	R20
    01E0 2755      CLR	R21
    01E1 C020      RJMP	0x0202
(0102) 			{lcd_write_data(data[i]);
    01E2 2FE4      MOV	R30,R20
    01E3 2FF5      MOV	R31,R21
    01E4 0FE6      ADD	R30,R22
    01E5 1FF7      ADC	R31,R23
    01E6 8100      LDD	R16,Z+0
    01E7 DFBD      RCALL	_lcd_write_data
(0103) 			if (i==15)
    01E8 304F      CPI	R20,0xF
    01E9 E0E0      LDI	R30,0
    01EA 075E      CPC	R21,R30
    01EB F411      BNE	0x01EE
(0104) 			lcd_write_comm(0x90);      //设定DDRAM第二行,第一列
    01EC E900      LDI	R16,0x90
    01ED DFCC      RCALL	_lcd_write_comm
(0105) 			if (i==31)
    01EE 314F      CPI	R20,0x1F
    01EF E0E0      LDI	R30,0
    01F0 075E      CPC	R21,R30
    01F1 F411      BNE	0x01F4
(0106) 			lcd_write_comm(0x88);     //设定DDRAM第三行,第一列
    01F2 E808      LDI	R16,0x88
    01F3 DFC6      RCALL	_lcd_write_comm
(0107) 			if (i==47)
    01F4 324F      CPI	R20,0x2F
    01F5 E0E0      LDI	R30,0
    01F6 075E      CPC	R21,R30
    01F7 F411      BNE	0x01FA
(0108) 			lcd_write_comm(0x98);     //设定DDRAM第四行,第一列
    01F8 E908      LDI	R16,0x98
    01F9 DFC0      RCALL	_lcd_write_comm
(0109) 			if (i==63)
    01FA 334F      CPI	R20,0x3F
    01FB E0E0      LDI	R30,0
    01FC 075E      CPC	R21,R30
    01FD F411      BNE	0x0200
(0110) 			lcd_write_comm(0x80);     //设定DDRAM第一行,第一列
    01FE E800      LDI	R16,0x80
    01FF DFBA      RCALL	_lcd_write_comm
    0200 5F4F      SUBI	R20,0xFF
    0201 4F5F      SBCI	R21,0xFF
    0202 3440      CPI	R20,0x40
    0203 E0E0      LDI	R30,0
    0204 075E      CPC	R21,R30
    0205 F2E0      BCS	0x01E2
(0111) 			}
(0112) 		lcd_write_comm(0x0c);
    0206 E00C      LDI	R16,0xC
    0207 DFB2      RCALL	_lcd_write_comm
    0208 D29E      RCALL	pop_gset2
    0209 9508      RET
_fanxian:
  y                    --> R20
  x                    --> R22
  j                    --> R10
  i                    --> R12
  hang                 --> R14
    020A D2A2      RCALL	push_gset5
    020B 2EE0      MOV	R14,R16
(0113) }	
(0114) //////////////////////////////////
(0115) void fanxian(unsigned char hang)   //  0x80-1     0x90-2   0x88-3    0x98-4
(0116) 	{	
(0117) 	    unsigned char x,y,i,j;
(0118) 	     lcd_write_comm(0x34);        //开启绘图功能显示 
    020C E304      LDI	R16,0x34
    020D DFAC      RCALL	_lcd_write_comm
(0119) 		 lcd_write_comm(0x34);
    020E E304      LDI	R16,0x34
    020F DFAA      RCALL	_lcd_write_comm
(0120) 	    
(0121) 	    y=0x80;
    0210 E840      LDI	R20,0x80
(0122)         x=0x80;
    0211 E860      LDI	R22,0x80
(0123) 		lcd_write_data(0x00);
    0212 2700      CLR	R16
    0213 DF91      RCALL	_lcd_write_data
(0124) 		lcd_write_comm(x);             //设置x 坐标 
    0214 2F06      MOV	R16,R22
    0215 DFA4      RCALL	_lcd_write_comm
(0125) 		lcd_write_comm(y); 
    0216 2F04      MOV	R16,R20
    0217 DFA2      RCALL	_lcd_write_comm
(0126) 		for (j=0;j<32;j++)
    0218 24AA      CLR	R10
    0219 C010      RJMP	0x022A
(0127) 		  {for (i=0;i<16;i++)
    021A 24CC      CLR	R12
    021B C003      RJMP	0x021F
(0128) 			lcd_write_data(0x00);
    021C 2700      CLR	R16
    021D DF87      RCALL	_lcd_write_data
    021E 94C3      INC	R12
    021F 2D8C      MOV	R24,R12
    0220 3180      CPI	R24,0x10
    0221 F3D0      BCS	0x021C
(0129) 		
(0130) 			
(0131) 			lcd_write_comm(++x);
    0222 2F86      MOV	R24,R22
    0223 5F8F      SUBI	R24,0xFF
    0224 2F68      MOV	R22,R24
    0225 2F08      MOV	R16,R24
    0226 DF93      RCALL	_lcd_write_comm
(0132) 			lcd_write_comm(y);
    0227 2F04      MOV	R16,R20
    0228 DF91      RCALL	_lcd_write_comm
    0229 94A3      INC	R10
    022A 2D8A      MOV	R24,R10
    022B 3280      CPI	R24,0x20
    022C F368      BCS	0x021A
(0133) 			
(0134) 		  }
(0135) 		
(0136)         y=0x88; 
    022D E848      LDI	R20,0x88
(0137) 		x=0x80;
    022E E860      LDI	R22,0x80
(0138) 		lcd_write_data(0x00);
    022F 2700      CLR	R16
    0230 DF74      RCALL	_lcd_write_data
(0139)      	lcd_write_comm(x);
    0231 2F06      MOV	R16,R22
    0232 DF87      RCALL	_lcd_write_comm
(0140) 		lcd_write_comm(y);
    0233 2F04      MOV	R16,R20
    0234 DF85      RCALL	_lcd_write_comm
(0141) 		for (j=32;j<64;j++)
    0235 E280      LDI	R24,0x20

⌨️ 快捷键说明

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