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

📄 new.lst

📁 包含无线收发模块 NREF905的所有功能库函数 本库函数与外部函数接口简单易用
💻 LST
📖 第 1 页 / 共 5 页
字号:
_delay:
  i                    --> R20
  times                --> R16
    0434 D38F      RCALL	push_gset1
FILE: F:\programme\RF905\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++)
    0435 2744      CLR	R20
    0436 2755      CLR	R21
    0437 C002      RJMP	0x043A
    0438 5F4F      SUBI	R20,0xFF
    0439 4F5F      SBCI	R21,0xFF
    043A 1740      CP	R20,R16
    043B 0751      CPC	R21,R17
    043C F3D8      BCS	0x0438
    043D D389      RCALL	pop_gset1
    043E 9508      RET
_lcd_send_byte:
  data1                --> R20
  i                    --> R22
  data                 --> R10
    043F D380      RCALL	push_gset3
    0440 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++)
    0441 2766      CLR	R22
    0442 2777      CLR	R23
    0443 C015      RJMP	0x0459
(0029) {data1=data&0x80;       //test data bit7 为零则放送零,为一则放送一
    0444 2D4A      MOV	R20,R10
    0445 2755      CLR	R21
    0446 7840      ANDI	R20,0x80
    0447 7050      ANDI	R21,0
(0030)  if(data1!=0)
    0448 3040      CPI	R20,0
    0449 0745      CPC	R20,R21
    044A F029      BEQ	0x0450
(0031)  { PORTD|=BIT(PD7);
    044B 9A97      SBI	0x12,7
(0032)      delay(20);
    044C E104      LDI	R16,0x14
    044D E010      LDI	R17,0
    044E DFE5      RCALL	_delay
(0033)   }
    044F C004      RJMP	0x0454
(0034)  else {PORTD&=~BIT(PD7);          ///当单片机速度太快时,加延时
    0450 9897      CBI	0x12,7
(0035)      delay(20); }
    0451 E104      LDI	R16,0x14
    0452 E010      LDI	R17,0
    0453 DFE0      RCALL	_delay
(0036) 	   
(0037) //PORTD=PORTD&data;
(0038) PORTD|=BIT(PD6);     // set sclk high
    0454 9A96      SBI	0x12,6
(0039) 
(0040) PORTD&=~BIT(PD6);    // set sclk low
    0455 9896      CBI	0x12,6
(0041) data=data<<1;
    0456 0CAA      LSL	R10
    0457 5F6F      SUBI	R22,0xFF
    0458 4F7F      SBCI	R23,0xFF
    0459 3068      CPI	R22,0x8
    045A E0E0      LDI	R30,0
    045B 077E      CPC	R23,R30
    045C F338      BCS	0x0444
    045D D35A      RCALL	pop_gset3
    045E 9508      RET
_lcd_write_data:
  data2                --> R22
  data1                --> R10
  data3                --> R20
  data                 --> R20
    045F D360      RCALL	push_gset3
    0460 2F40      MOV	R20,R16
(0042) }
(0043) }
(0044) /////////////////////////////////////////////////////////////
(0045) ////
(0046) ////////////////////////////////////////////////////////////
(0047) void lcd_write_data(char data)
(0048) {char data1=0xfa,data2,data3;
    0461 EF8A      LDI	R24,0xFA
    0462 2EA8      MOV	R10,R24
(0049)     
(0050) 	PORTD|=BIT(PD5);      //set cs high
    0463 9A95      SBI	0x12,5
(0051) 	
(0052)    data2=data&0xf0;
    0464 2F64      MOV	R22,R20
    0465 7F60      ANDI	R22,0xF0
(0053)    data3=data&0x0f;
    0466 704F      ANDI	R20,0xF
(0054)    data3=data3<<4;
    0467 2F84      MOV	R24,R20
    0468 708F      ANDI	R24,0xF
    0469 9582      SWAP	R24
    046A 2F48      MOV	R20,R24
(0055)    
(0056)    lcd_send_byte(data1);
    046B 2D0A      MOV	R16,R10
    046C DFD2      RCALL	_lcd_send_byte
(0057)    lcd_send_byte(data2);
    046D 2F06      MOV	R16,R22
    046E DFD0      RCALL	_lcd_send_byte
(0058)    lcd_send_byte(data3);
    046F 2F04      MOV	R16,R20
    0470 DFCE      RCALL	_lcd_send_byte
(0059)    
(0060)    PORTD&=~BIT(PD5);       //set cs low
    0471 9895      CBI	0x12,5
    0472 D345      RCALL	pop_gset3
    0473 9508      RET
_lcd_write_comm:
  data2                --> R22
  data1                --> R10
  data3                --> R20
  data                 --> R20
    0474 D34B      RCALL	push_gset3
    0475 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;
    0476 EF88      LDI	R24,0xF8
    0477 2EA8      MOV	R10,R24
(0069)    PORTD|=BIT(PD5);     //set cs high
    0478 9A95      SBI	0x12,5
(0070)    
(0071)    data2=data&0xf0;
    0479 2F64      MOV	R22,R20
    047A 7F60      ANDI	R22,0xF0
(0072)    data3=data&0x0f;
    047B 704F      ANDI	R20,0xF
(0073)    data3=data3<<4;
    047C 2F84      MOV	R24,R20
    047D 708F      ANDI	R24,0xF
    047E 9582      SWAP	R24
    047F 2F48      MOV	R20,R24
(0074)    
(0075)    lcd_send_byte(data1);
    0480 2D0A      MOV	R16,R10
    0481 DFBD      RCALL	_lcd_send_byte
(0076)    lcd_send_byte(data2);
    0482 2F06      MOV	R16,R22
    0483 DFBB      RCALL	_lcd_send_byte
(0077)    lcd_send_byte(data3);
    0484 2F04      MOV	R16,R20
    0485 DFB9      RCALL	_lcd_send_byte
(0078)    
(0079)    PORTD&=~BIT(PD5);     //set cs low
    0486 9895      CBI	0x12,5
    0487 D330      RCALL	pop_gset3
    0488 9508      RET
(0080) 
(0081) }
(0082) void lcd_initial(void)
(0083) {
(0084)     
(0085)    lcd_write_comm(0x30);			//基本指令集
_lcd_initial:
    0489 E300      LDI	R16,0x30
    048A DFE9      RCALL	_lcd_write_comm
(0086)    lcd_write_comm(0x01);			//清除显示屏幕,把DDRAM位址计数器调整为"00H"
    048B E001      LDI	R16,1
    048C DFE7      RCALL	_lcd_write_comm
(0087)    lcd_write_comm(0x03);			//把DDRAM位址计数器调整为"00H",游标回原点,该功能不影响显示DDRAM
    048D E003      LDI	R16,3
    048E DFE5      RCALL	_lcd_write_comm
(0088)    lcd_write_comm(0x06);			//光标右移
    048F E006      LDI	R16,6
    0490 DFE3      RCALL	_lcd_write_comm
(0089)    lcd_write_comm(0x0c);			//显示屏打开
    0491 E00C      LDI	R16,0xC
    0492 DFE1      RCALL	_lcd_write_comm
    0493 9508      RET
_screen:
  j                    --> Y+1
  i                    --> R20
  data                 --> R22
    0494 D32D      RCALL	push_gset2
    0495 01B8      MOVW	R22,R16
(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);
    0496 E008      LDI	R16,0x8
    0497 DFDC      RCALL	_lcd_write_comm
(0101) 		for (i=0;i<64;i++)
    0498 2744      CLR	R20
    0499 2755      CLR	R21
    049A C01F      RJMP	0x04BA
(0102) 			{lcd_write_data(data[i]);
    049B 01FA      MOVW	R30,R20
    049C 0FE6      ADD	R30,R22
    049D 1FF7      ADC	R31,R23
    049E 8100      LDD	R16,Z+0
    049F DFBF      RCALL	_lcd_write_data
(0103) 			if (i==15)
    04A0 304F      CPI	R20,0xF
    04A1 E0E0      LDI	R30,0
    04A2 075E      CPC	R21,R30
    04A3 F411      BNE	0x04A6
(0104) 			lcd_write_comm(0x90);      //设定DDRAM第二行,第一列
    04A4 E900      LDI	R16,0x90
    04A5 DFCE      RCALL	_lcd_write_comm
(0105) 			if (i==31)
    04A6 314F      CPI	R20,0x1F
    04A7 E0E0      LDI	R30,0
    04A8 075E      CPC	R21,R30
    04A9 F411      BNE	0x04AC
(0106) 			lcd_write_comm(0x88);     //设定DDRAM第三行,第一列
    04AA E808      LDI	R16,0x88
    04AB DFC8      RCALL	_lcd_write_comm
(0107) 			if (i==47)
    04AC 324F      CPI	R20,0x2F
    04AD E0E0      LDI	R30,0
    04AE 075E      CPC	R21,R30
    04AF F411      BNE	0x04B2
(0108) 			lcd_write_comm(0x98);     //设定DDRAM第四行,第一列
    04B0 E908      LDI	R16,0x98
    04B1 DFC2      RCALL	_lcd_write_comm
(0109) 			if (i==63)
    04B2 334F      CPI	R20,0x3F
    04B3 E0E0      LDI	R30,0
    04B4 075E      CPC	R21,R30
    04B5 F411      BNE	0x04B8
(0110) 			lcd_write_comm(0x80);     //设定DDRAM第一行,第一列
    04B6 E800      LDI	R16,0x80
    04B7 DFBC      RCALL	_lcd_write_comm
    04B8 5F4F      SUBI	R20,0xFF
    04B9 4F5F      SBCI	R21,0xFF
    04BA 3440      CPI	R20,0x40
    04BB E0E0      LDI	R30,0
    04BC 075E      CPC	R21,R30
    04BD F2E8      BCS	0x049B
(0111) 			}
(0112) 		lcd_write_comm(0x0c);
    04BE E00C      LDI	R16,0xC
    04BF DFB4      RCALL	_lcd_write_comm
    04C0 D2F5      RCALL	pop_gset2
    04C1 9508      RET
_fanxian:
  y                    --> R20
  x                    --> R22
  j                    --> R10
  i                    --> R12
  hang                 --> R14
    04C2 D2F9      RCALL	push_gset5
    04C3 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);        //开启绘图功能显示 
    04C4 E304      LDI	R16,0x34
    04C5 DFAE      RCALL	_lcd_write_comm
(0119) 		 lcd_write_comm(0x34);
    04C6 E304      LDI	R16,0x34
    04C7 DFAC      RCALL	_lcd_write_comm
(0120) 	    
(0121) 	    y=0x80;
    04C8 E840      LDI	R20,0x80
(0122)         x=0x80;
    04C9 E860      LDI	R22,0x80
(0123) 		lcd_write_data(0x00);
    04CA 2700      CLR	R16
    04CB DF93      RCALL	_lcd_write_data
(0124) 		lcd_write_comm(x);             //设置x 坐标 
    04CC 2F06      MOV	R16,R22
    04CD DFA6      RCALL	_lcd_write_comm
(0125) 		lcd_write_comm(y); 
    04CE 2F04      MOV	R16,R20
    04CF DFA4      RCALL	_lcd_write_comm
(0126) 		for (j=0;j<32;j++)
    04D0 24AA      CLR	R10
    04D1 C010      RJMP	0x04E2
(0127) 		  {for (i=0;i<16;i++)
    04D2 24CC      CLR	R12
    04D3 C003      RJMP	0x04D7
(0128) 			lcd_write_data(0x00);
    04D4 2700      CLR	R16
    04D5 DF89      RCALL	_lcd_write_data
    04D6 94C3      INC	R12
    04D7 2D8C      MOV	R24,R12
    04D8 3180      CPI	R24,0x10
    04D9 F3D0      BCS	0x04D4
(0129) 		
(0130) 			
(0131) 			lcd_write_comm(++x);
    04DA 2F86      MOV	R24,R22
    04DB 5F8F      SUBI	R24,0xFF
    04DC 2F68      MOV	R22,R24
    04DD 2F08      MOV	R16,R24
    04DE DF95      RCALL	_lcd_write_comm
(0132) 			lcd_write_comm(y);
    04DF 2F04      MOV	R16,R20
    04E0 DF93      RCALL	_lcd_write_comm
    04E1 94A3      INC	R10
    04E2 2D8A      MOV	R24,R10
    04E3 3280      CPI	R24,0x20
    04E4 F368      BCS	0x04D2
(0133) 			
(0134) 		  }
(0135) 		
(0136)         y=0x88; 
    04E5 E848      LDI	R20,0x88
(0137) 		x=0x80;
    04E6 E860      LDI	R22,0x80
(0138) 		lcd_write_data(0x00);
    04E7 2700      CLR	R16
    04E8 DF76      RCALL	_lcd_write_data
(0139)      	lcd_write_comm(x);
    04E9 2F06      MOV	R16,R22
    04EA DF89      RCALL	_lcd_write_comm
(0140) 		lcd_write_comm(y);
    04EB 2F04      MOV	R16,R20
    04EC DF87      RCALL	_lcd_write_comm
(0141) 		for (j=32;j<64;j++)
    04ED E280      LDI	R24,0x20
    04EE 2EA8      MOV	R10,R24
    04EF C010      RJMP	0x0500
(0142) 		  {for (i=0;i<16;i++)
    04F0 24CC      CLR	R12
    04F1 C003      RJMP	0x04F5
(0143) 			lcd_write_data(0x00);
    04F2 2700      CLR	R16
    04F3 DF6B      RCALL	_lcd_write_data
    04F4 94C3      INC	R12
    04F5 2D8C      MOV	R24,R12
    04F6 3180      CPI	R24,0x10
    04F7 F3D0      BCS	0x04F2
(0144) 			lcd_write_comm(++x);
    04F8 2F86      MOV	R24,R22
    04F9 5F8F      SUBI	R24,0xFF
    04FA 2F68      MOV	R22,R24
    04FB 2F08      MOV	R16,R24
    04FC DF77      RCALL	_lcd_write_comm
(0145) 			lcd_write_comm(y); 	 
    04FD 2F04      MOV	R16,R20
    04FE DF75      RCALL	_lcd_write_comm
    04FF 94A3      INC	R10
    0500 2D8A      MOV	R24,R10
    0501 3480      CPI	R24,0x40
    0502 F368      BCS	0x04F0
(0146) 			
(0147) 		  
(0148) 		  }
(0149) 		    
(0150) 		  lcd_write_comm(0x36);        //开启绘图功能显示 	
    0503 E306      LDI	R16,0x36
    0504 DF6F      RCALL	_lcd_write_comm
(0151) 		    	
(0152) 		if(hang==1)
    0505 2D8E      MOV	R24,R14
    0506 3081      CPI	R24,1
    0507 F419      BNE	0x050B
(0153)     	{
(0154)     	y=0x80; 
    0508 E840      LDI	R20,0x80
(0155) 		x=0x80;}
    0509 E860      LDI	R22,0x80
    050A C00E      RJMP	0x0519
(0156) 		else if(hang==2)
    050B 2D8E      MOV	R24,R14
    050C 3082      CPI	R24,2
    050D F419      BNE	0x0511
(0157) 		{
(0158) 		y=0x80;
    050E E840      LDI	R20,0x80
(0159) 		x=0x90;}
    050F E960      LDI	R22,0x90
    0510 C008      RJMP	0x0519
(0160) 		else if(hang==3)

⌨️ 快捷键说明

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