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

📄 jifeng_jieshou.lst

📁 非常适合实用的无线射频芯片NRF905
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0242 98AB      CBI	0x15,3
(0369) 		}
(0370) 		LCD_Delay(1);
    0243 E001      LDI	R16,1
    0244 E010      LDI	R17,0
    0245 DFB2      RCALL	_LCD_Delay
(0371) 		temp=temp<<1;
    0246 0F66      LSL	R22
    0247 1F77      ROL	R23
(0372) 		Hign_LCD_SCL;
    0248 9AAC      SBI	0x15,4
(0373) 		LCD_Delay(1);
    0249 E001      LDI	R16,1
    024A E010      LDI	R17,0
    024B DFAC      RCALL	_LCD_Delay
(0374) 		Low_LCD_SCL;
    024C 98AC      CBI	0x15,4
    024D 5F4F      SUBI	R20,0xFF
    024E 4F5F      SBCI	R21,0xFF
    024F 3048      CPI	R20,0x8
    0250 E0E0      LDI	R30,0
    0251 075E      CPC	R21,R30
    0252 F354      BLT	0x023D
(0375) 	}
(0376) 	Low_LCD_RS;
    0253 98AD      CBI	0x15,5
(0377) 	Hign_LCD_CS;    //先cs置0,然后把数据都送到口上准备好(产生上升沿),最后才置片选cs为1	
    0254 9AAF      SBI	0x15,7
    0255 D22F      RCALL	pop_gset2
    0256 9508      RET
_Lcd_Write_command:
  i                    --> R20
  temp                 --> R22
  COMMAND              --> R20
    0257 D239      RCALL	push_gset2
    0258 2F40      MOV	R20,R16
(0378) }
(0379) //---------------------------------LCD写命令函数--------------------------------
(0380) void Lcd_Write_command(uchar COMMAND)
(0381) {
(0382) 	uchar i,temp;
(0383) 	temp = COMMAND;
    0259 2F64      MOV	R22,R20
(0384) 	Hign_LCD_RS;		
    025A 9AAD      SBI	0x15,5
(0385) 	Hign_LCD_CS;
    025B 9AAF      SBI	0x15,7
(0386) 	Hign_LCD_SCL;
    025C 9AAC      SBI	0x15,4
(0387) 	LCD_Delay(1);
    025D E001      LDI	R16,1
    025E E010      LDI	R17,0
    025F DF98      RCALL	_LCD_Delay
(0388) 	Low_LCD_RS;		//RS=0 为写命令
    0260 98AD      CBI	0x15,5
(0389) 	Low_LCD_CS;
    0261 98AF      CBI	0x15,7
(0390) 	Low_LCD_SCL;
    0262 98AC      CBI	0x15,4
(0391) 	LCD_Delay(1);
    0263 E001      LDI	R16,1
    0264 E010      LDI	R17,0
    0265 DF92      RCALL	_LCD_Delay
(0392) 	for(i=0;i<8;i++)
    0266 2744      CLR	R20
    0267 C010      RJMP	0x0278
(0393) 	{
(0394) 		Low_LCD_SCL;
    0268 98AC      CBI	0x15,4
(0395) 		if(temp&0x80)
    0269 FF67      SBRS	R22,7
    026A C002      RJMP	0x026D
(0396) 		{
(0397) 		Hign_LCD_SI;
    026B 9AAB      SBI	0x15,3
(0398) 		}
    026C C001      RJMP	0x026E
(0399) 		else
(0400) 		{
(0401) 		Low_LCD_SI;
    026D 98AB      CBI	0x15,3
(0402) 		}
(0403) 		temp=temp<<1;	
    026E 0F66      LSL	R22
(0404) 		LCD_Delay(1);
    026F E001      LDI	R16,1
    0270 E010      LDI	R17,0
    0271 DF86      RCALL	_LCD_Delay
(0405) 		Hign_LCD_SCL;
    0272 9AAC      SBI	0x15,4
(0406) 		LCD_Delay(1);
    0273 E001      LDI	R16,1
    0274 E010      LDI	R17,0
    0275 DF82      RCALL	_LCD_Delay
(0407) 		Low_LCD_SCL;
    0276 98AC      CBI	0x15,4
    0277 9543      INC	R20
    0278 3048      CPI	R20,0x8
    0279 F370      BCS	0x0268
(0408) 	}
(0409) 	Hign_LCD_RS;
    027A 9AAD      SBI	0x15,5
(0410) 	Hign_LCD_CS;      //用了temp后,原来的command的就不会变了
    027B 9AAF      SBI	0x15,7
    027C D208      RCALL	pop_gset2
    027D 9508      RET
_Lcd_CURSOR:
  add_col              --> R20
  add_page             --> R22
    027E D212      RCALL	push_gset2
    027F 2F42      MOV	R20,R18
    0280 2F60      MOV	R22,R16
(0411) }
(0412) //-------------------------------LCD光标函数------------------------------------
(0413) void Lcd_CURSOR(uchar add_page,uchar add_col)               //光标定位	//8页(<0fh), 且128列(>0fh)
(0414) {                                                           //每页8行
(0415) 	Lcd_Write_command(0xB0+(add_page&0x0f));     //+号为合成为一个字节(其实就是或)B0+0x
    0281 2F06      MOV	R16,R22
    0282 700F      ANDI	R16,0xF
    0283 5500      SUBI	R16,0x50
    0284 DFD2      RCALL	_Lcd_Write_command
(0416) 	Lcd_Write_command(0x10|(add_col>>4)); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
    0285 2F04      MOV	R16,R20
    0286 9502      SWAP	R16
    0287 700F      ANDI	R16,0xF
    0288 6100      ORI	R16,0x10
    0289 DFCD      RCALL	_Lcd_Write_command
(0417) 	Lcd_Write_command(add_col&0x0f);      //Set column address LSB(00+xx)即Y3 Y2 Y1 Y0
    028A 2F04      MOV	R16,R20
    028B 700F      ANDI	R16,0xF
    028C DFCA      RCALL	_Lcd_Write_command
    028D D1F7      RCALL	pop_gset2
    028E 9508      RET
_Lcd_Clear:
  i                    --> R20
  j                    --> R22
    028F D201      RCALL	push_gset2
(0418) }
(0419) //-------------------------------LCD清屏函数------------------------------------
(0420) void Lcd_Clear(void)                         //128x64字节,实际中一般要多
(0421) {	
(0422) 	uchar i,j;
(0423) 	for(i=0;i<9;i++)                     //>8页
    0290 2744      CLR	R20
    0291 C00E      RJMP	0x02A0
(0424) 	{
(0425) 		 Lcd_CURSOR(i,0);		
    0292 2722      CLR	R18
    0293 2F04      MOV	R16,R20
    0294 DFE9      RCALL	_Lcd_CURSOR
(0426) 		 for(j=0;j<132;j++)          //>128列
    0295 2766      CLR	R22
    0296 C006      RJMP	0x029D
(0427) 		 {	
(0428) 		 	 Lcd_CURSOR(i,j);      //列在变,光标也在不停的换列
    0297 2F26      MOV	R18,R22
    0298 2F04      MOV	R16,R20
    0299 DFE4      RCALL	_Lcd_CURSOR
(0429) 		 	 Lcd_Write_Data(0); //定好一页后,再一列一列的写00h,列在变
    029A 2700      CLR	R16
    029B DF8F      RCALL	_Lcd_Write_Data
    029C 9563      INC	R22
    029D 3864      CPI	R22,0x84
    029E F3C0      BCS	0x0297
    029F 9543      INC	R20
    02A0 3049      CPI	R20,0x9
    02A1 F380      BCS	0x0292
    02A2 D1E2      RCALL	pop_gset2
    02A3 9508      RET
_Test_LCD:
  i                    --> R20
  j                    --> R22
    02A4 D1EC      RCALL	push_gset2
(0430) 		 }		
(0431) 	}
(0432) }	
(0433) //--------------------------------LCD测试---------------------------------------
(0434) void Test_LCD(void)
(0435) {	
(0436) 	uchar i,j;
(0437) 	for(i=0xB0;i<0xB8;i++)		//B0-B8共8页
    02A5 EB40      LDI	R20,0xB0
    02A6 C014      RJMP	0x02BB
(0438) 	{
(0439) 		Lcd_Write_command(i);     //+号为合成为一个字节(其实就是或)B0+0x
    02A7 2F04      MOV	R16,R20
    02A8 DFAE      RCALL	_Lcd_Write_command
(0440) 		Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
    02A9 E100      LDI	R16,0x10
    02AA DFAC      RCALL	_Lcd_Write_command
(0441) 		Lcd_Write_command(0x01); 
    02AB E001      LDI	R16,1
    02AC DFAA      RCALL	_Lcd_Write_command
(0442) 		 Lcd_CURSOR(i,0);
    02AD 2722      CLR	R18
    02AE 2F04      MOV	R16,R20
    02AF DFCE      RCALL	_Lcd_CURSOR
(0443) 		 for(j=0;j<132;j++)
    02B0 2766      CLR	R22
    02B1 C006      RJMP	0x02B8
(0444) 		 {	                        //每读写一次,列会自动加1
(0445) 		 	 Lcd_CURSOR(i,j);       //列在变,光标也在不停的换列,重新进行定位
    02B2 2F26      MOV	R18,R22
    02B3 2F04      MOV	R16,R20
    02B4 DFC9      RCALL	_Lcd_CURSOR
(0446) 		 	 Lcd_Write_Data(0x01);  //检测写进f0h???4点亮4点暗
    02B5 E001      LDI	R16,1
    02B6 DF74      RCALL	_Lcd_Write_Data
    02B7 9563      INC	R22
    02B8 3864      CPI	R22,0x84
    02B9 F3C0      BCS	0x02B2
    02BA 9543      INC	R20
    02BB 3B48      CPI	R20,0xB8
    02BC F350      BCS	0x02A7
    02BD D1C7      RCALL	pop_gset2
    02BE 9508      RET
_dis_1616hz:
  i                    --> R20
  j                    --> R14
  hz                   --> R22
  row                  --> R10
  x2                   --> R12
  x1                   --> R14
    02BF D1CB      RCALL	push_gset5
    02C0 2EC2      MOV	R12,R18
    02C1 2EE0      MOV	R14,R16
    02C2 84AA      LDD	R10,Y+10
    02C3 856C      LDD	R22,Y+12
    02C4 857D      LDD	R23,Y+13
(0447) 		 }
(0448) 		 		
(0449) 	}
(0450) }
(0451) /*
(0452) //------------------------------------------------------------------------------
(0453) void dis_biankuang()			//边框设计
(0454) {	
(0455) 	uchar i,j,k;
(0456) 	for(i=0xB0;i<0xB8;i++)		//2页16行
(0457) 	{
(0458) 		Lcd_Write_command(i);     	//+号为合成为一个字节(其实就是或)B0+0x
(0459) 		Lcd_Write_command(0x10); 	//Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
(0460) 		Lcd_Write_command(0x01); 
(0461) 		Lcd_CURSOR(i,0);
(0462) 		 for(j=0;j<132;j++)
(0463) 		 {	                        //每读写一次,列会自动加1
(0464) 		 	 Lcd_CURSOR(i,j);       //改变列位置,列在变,光标也在不停的换列,重新进行定位
(0465) 		 	 Lcd_Write_Data(0x03);  //检测写进f0h???4点亮4点暗
(0466) 		 }
(0467) 		 for(k=0xB0;k<0xB7;k++)
(0468) 		 {
(0469) 		 for(j=2;j<6;j++)
(0470) 		 {
(0471) 		  Lcd_CURSOR(k,j);       //改变列位置,列在变,光标也在不停的换列,重新进行定位
(0472) 		  Lcd_Write_Data(0xff);
(0473) 		 }
(0474) 		 for(j=130;j<132;j++)
(0475) 		 {
(0476) 		  Lcd_CURSOR(k,j);       //改变列位置,列在变,光标也在不停的换列,重新进行定位
(0477) 		  Lcd_Write_Data(0xff);
(0478) 		 }
(0479) 		 }
(0480) 		 i=i+7;
(0481) 		 for(j=0;j<132;j++)      
(0482) 		 {	                        //每读写一次,列会自动加1
(0483) 		 	 Lcd_CURSOR(i,j);       //列在变,光标也在不停的换列,重新进行定位
(0484) 		 	 Lcd_Write_Data(0x03);  //检测写进f0h???4点亮4点暗
(0485) 		 }
(0486) 
(0487) 			
(0488) 	}
(0489) }
(0490) */
(0491) //------------------------------16*16汉字显示-----------------------------------
(0492) void dis_1616hz(uchar x1,uchar x2,uchar row,const uchar hz[])			//16*16
(0493) {	
(0494) 	uchar i,j;
(0495) 	for(i=x1;i<x2;i++)		//2页16行
    02C5 2D4E      MOV	R20,R14
    02C6 C032      RJMP	0x02F9
(0496) 	{
(0497) 		Lcd_Write_command(i);     	//+号为合成为一个字节(其实就是或)B0+0x
    02C7 2F04      MOV	R16,R20
    02C8 DF8E      RCALL	_Lcd_Write_command
(0498) 		Lcd_Write_command(0x10); 	//Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
    02C9 E100      LDI	R16,0x10
    02CA DF8C      RCALL	_Lcd_Write_command
(0499) 		Lcd_Write_command(0x01); 
    02CB E001      LDI	R16,1
    02CC DF8A      RCALL	_Lcd_Write_command
(0500) 		Lcd_CURSOR(i,0);
    02CD 2722      CLR	R18
    02CE 2F04      MOV	R16,R20
    02CF DFAE      RCALL	_Lcd_CURSOR
(0501) 		 for(j=0;j<16;j++)
    02D0 24EE      CLR	R14
    02D1 C00E      RJMP	0x02E0
(0502) 		 {	                        //每读写一次,列会自动加1
(0503) 		 	 Lcd_CURSOR(i,j+row);       //改变列位置,列在变,光标也在不停的换列,重新进行定位
    02D2 2D2E      MOV	R18,R14
    02D3 0D2A      ADD	R18,R10
    02D4 2F04      MOV	R16,R20
    02D5 DFA8      RCALL	_Lcd_CURSOR
(0504) 		 	 Lcd_Write_Data(hz[j]);  //检测写进f0h???4点亮4点暗
    02D6 2C2E      MOV	R2,R14
    02D7 2433      CLR	R3
    02D8 0E26      ADD	R2,R22
    02D9 1E37      ADC	R3,R23
    02DA 2DE2      MOV	R30,R2
    02DB 2DF3      MOV	R31,R3
    02DC 95C8      LPM
    02DD 2D00      MOV	R16,R0
    02DE DF4C      RCALL	_Lcd_Write_Data
    02DF 94E3      INC	R14
    02E0 2D8E      MOV	R24,R14
    02E1 3180      CPI	R24,0x10
    02E2 F378      BCS	0x02D2
(0505) 		 }
(0506) 		 i++;
    02E3 9543      INC	R20
(0507) 		 for(j=0;j<16;j++)      
    02E4 24EE      CLR	R14
    02E5 C00F      RJMP	0x02F5
(0508) 		 {	                        //每读写一次,列会自动加1
(0509) 		 	 Lcd_CURSOR(i,j+row);       //列在变,光标也在不停的换列,重新进行定位
    02E6 2D2E      MOV	R18,R14
    02E7 0D2A      ADD	R18,R10
    02E8 2F04      MOV	R16,R20
    02E9 DF94      RCALL	_Lcd_CURSOR
(0510) 		 	 Lcd_Write_Data(hz[j+16]);  //检测写进f0h???4点亮4点暗
    02EA 2D8E      MOV	R24,R14
    02EB 2799      CLR	R25
    02EC 0F86      ADD	R24,R22
    02ED 1F97      ADC	R25,R23
    02EE 9640      ADIW	R24,0x10

⌨️ 快捷键说明

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