亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? upsd3300_lcd.c

?? 51單片機(jī)I2C源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
			}
		
		 }
		else
		{
			if(i%2==0)
			{
			dot_buffer[i] =	pic[i+1];
					
			}
			if(i%2==1)
			{
				dot_buffer[i] =	pic[i-1];
			
			}
	
		}
	}
}

void disp_one_asc3(unsigned char width,unsigned char length,unsigned char *pic)
{
	unsigned long  i;
	for (i=0;i<width*length;i++)
	{
		if(mode) 
		{
			if(i%3==0)
			{
				dot_buffer[i] =	~pic[i+2];
					
			}
			if(i%3==1)
			{
				dot_buffer[i] =	~pic[i];
					
			}
			if(i%3==2)
			{
				dot_buffer[i] =	~pic[i-2];
					
			}		
		 }
		else
		{
			if(i%3==0)
			{
				dot_buffer[i] =	pic[i+2];
					
			}
			if(i%3==1)
			{
				dot_buffer[i] =	pic[i];
					
			}
			if(i%3==2)
			{
				dot_buffer[i] =	pic[i-2];
					
			}
		}
	}
}

void disp_one_asc4(unsigned char width, unsigned char *pic)
{
	unsigned long  i;
	for (i=0;i<width*4;i++)
	{
		if(mode) 
		{
			if(i%4==0)
			{
				dot_buffer[i] =	~pic[i+3];
					
			}
			if(i%4==1)
			{
				dot_buffer[i] =	~pic[i+1];
					
			}
			if(i%4==2)
			{
				dot_buffer[i] =	~pic[i-1];				
			}	
			if(i%4==3)
			{
				dot_buffer[i] =	~pic[i-3];
			}		
        }
		else
		{
			if(i%4==0)
			{
				dot_buffer[i] =	*(pic+i+3);
			}
			if(i%4==1)
			{
				dot_buffer[i] =	*(pic+i+1);
					
			}
			if(i%4==2)
			{
				dot_buffer[i] =	*(pic+i-1);				
			}	
			if(i%4==3)
			{
				dot_buffer[i] =	*(pic+i-3);
			}		
		}
	}
}


void DrawPic ( unsigned char x0,unsigned char y0,unsigned char width,unsigned char length,unsigned char *bmp)
{
	unsigned char x, address;
	unsigned char * dat;

	unsigned char m;		
	unsigned long i=0;
	unsigned char page =0; // if layer = 0;page = 0,so it will disply the first line Chinese word
	
	bit window = 0;  //display on master LCD
		unsigned char orig_buscon;
           orig_buscon = BUSCON;   // Save buscon value
           BUSCON |= 0x3C;           // Set Xdata Read/Write to max wait states


	if(length%8==0)
	m = length/8;
	else
	m = length/8 + 1;

	if(m==2)
	disp_one_asc2(width, length, bmp);
	if(m==3)
	disp_one_asc3(width, length, bmp);
	if(m==4)
	disp_one_asc4(width, bmp);

    dat = dot_buffer;

	OutMasterCom( 0X00 ); //display column address	
	OutMasterCom ( 0XC0|y0 );//display start line 	

	OutSlaveCom ( 0X00 );
	OutSlaveCom ( 0XC0|y0);

	for(x=x0;x<x0+width;x++)
	{
		if(x>121)
			 return;  //the column exceeded 121 will be ignored
		if (x>60) 	
		{ 
			window =1; //disply on slave LCD
			address = x%61;
		}
 		else 
		address = x;  //display on master LCD

		SetPage (page,page);      //disply the upper part of a Chinese word
		SetAddress(address,address);

		if (window) 
			PutChar0(dat[i]);
		else 
			PutChar1(dat[i]);
				i+=1; 

		if(m>=2)
		{
			SetPage (page+1,page+1);  //disply the lower part of a Chinese word
			SetAddress(address,address);

			if (window) 
				PutChar0(dat[i]);
			else 
				PutChar1(dat[i]);
				i+=1; 
		 }

		 if(m>=3)
		{
			SetPage (page+2,page+2);  //disply the lower part of a Chinese word
			SetAddress(address,address);

			if (window) 
				PutChar0(dat[i]);
			else 
				PutChar1(dat[i]);
				i+=1; 
		 }

		 if(m>=4)
		{
			SetPage (page+3,page+3);  //disply the lower part of a Chinese word
			SetAddress(address,address);

			if (window) 
				PutChar0(dat[i]);
			else 
				PutChar1(dat[i]);
				i+=1; 
		 }
	}
	BUSCON = orig_buscon;  // Restore buscon value
}


/*---------------------------------------------------------------------------------------
Function:
	this function is used to display a Chinese word. 
Parameters:
	x0:		start column address.
    layer:	if layer = 0,display the first line Chinese word,otherwise display the second line.
	width:	the number of column of a Chinese word dot matrix.
	bmp:	the pointer of the  dot matrix data.
Note:
	the LCD can only display two line Chinese word,so page 0 and 1 is to display the first line,page2
    and page 3 is to display the second line.

----------------------------------------------------------------------------------------*/

void disp_one_ch(unsigned char col,unsigned char layer,unsigned int ch_code,unsigned char mode)
{
	unsigned char i,j,c2,c1;
	extern PSD_REGS PSD_reg;
	unsigned char xdata *ptr;
	
	j = PSD_reg.PAGE ; //reserve page number first
	PSD_reg.PAGE = CHINESE_FONT_PAGE;

	c2 = (unsigned char)((ch_code&0xff00)>>8);  
	c1 = (unsigned char)(ch_code&0x00ff);


	for(i=0;i<159;i++)  //check index table to get the specific location
	{
		if ((c2 == index[i])&&(c1 == index[i+1]))
		{
			ptr = (unsigned char xdata *)((index[i+2])*32);
			break;
		 }
	}

	for(i=0;i<32;i++)
	{
		dot_buffer[i] = *(FONT_BASE_ADDRESS+ptr+i);  //fetch font data from internal flash directly
	}

	if (mode)
	{
		for(i=0;i<32;i++)
		{	
			dot_buffer[i] = ~ dot_buffer[i];
		}
	}
		DrawBmp(col,layer,16,dot_buffer);//display the Chinese word after get the data from flash
		PSD_reg.PAGE = j;  //restore page number
}
#endif
/*---------------------------------------------------------------------------------------
Function:
	this function is used to converts low nibble of unsigned byte.
Parameters:
	byte: this unsigned byte is ready to converting.
Note:
	none

----------------------------------------------------------------------------------------*/
char htoa_lo(unsigned char byte)	 
					 // (0-F hex) to ascii   
{
	{
	byte = byte & 0x0F;	// keep lower nibble only   
	if (byte <= 0x09)
		return(byte + 0x30);
	else
		return (byte + 0x37);
	}
}


/*---------------------------------------------------------------------------------------
Function:
	this function is used to converts low nibble of unsigned byte.
Parameters:
	byte: this unsigned byte is ready to converting.
Note:
	none

----------------------------------------------------------------------------------------*/
char htoa_hi(unsigned char byte)	 // converts hi nibble of unsigned byte
					 // (0-F hex) to ascii   
{
	{
	byte = byte & 0xF0;	// keep upper nibble only   
	byte = byte >> 4;
	if (byte <= 0x09)
		return(byte + 0x30);
	else
		return (byte + 0x37);
	}
}

/*---------------------------------------------------------------------------------------
printfLCD(chr_ptr) 

This function is used to display a string of Chinese words and standard ASCII codes on
the LCD display.

chr_ptr - unsigned char*
		- pointer to string to display on LCD.
----------------------------------------------------------------------------------------*/
void printfLCD(unsigned char *ptr, ...) 
{
	unsigned char c1,c2;
	unsigned int  c3;

	//unsigned char *var_ptr=&ptr+1;
	unsigned char var;
	unsigned char orig_buscon;
	#ifdef __RC51__	//use ANSI stdarg
	va_list var_ptr;
	va_start(var_ptr,0);
	#else	
	unsigned char *var_ptr=&ptr+1;
	#endif
   orig_buscon = BUSCON;   // Save buscon value
   BUSCON |= 0x3C;           // Set Xdata Read/Write to max wait states


	if(ulayer >3)  //if page exceed the range 0 to 3,force it to 0.
		ulayer = 0;

	while (*ptr != NULL) 
	{
		c1 = *ptr;
		c2 = *(ptr+1);
		c3 = c1;
		c3 = (c3<<8)|c2;
		if(c1 <= 128)   // deal with asc code , if c1<=128 ,it will deal with asc code,otherwise Chinese word.
		{
			if ( *ptr == '\r')
			{
				ptr++;
				ucol = 0;
			}
			else if( *ptr == '\n')
			{
				ptr++;
				ucol = 0;
				ulayer++;
			}
			else if( *ptr == '%')
			{
				ptr++;
				
				if (*ptr == 'd')
				{
					ptr++;
			 		#ifdef __RC51__	//use ANSI stdarg
 					var = *var_ptr--;
 					var_ptr--;
	            #else	
					var = *var_ptr++;
					#endif
					c1 = (var & 0x0F)+'0';
					disp_one_asc(ucol,ulayer,c1,mode);
					ucol+=7;
				}
				else if (*ptr == 'x')
			 	{  
			 		#ifdef __RC51__	//use ANSI stdarg
 					var = *var_ptr--;
 					var_ptr--;
	            #else	
					var = *var_ptr++;
					#endif
					c1 = htoa_hi(var);
					disp_one_asc(ucol,ulayer,c1,mode);
					ucol+=7;
					c1 = htoa_lo(var);
					disp_one_asc(ucol,ulayer,c1,mode);
					ucol+=7;
					ptr++;
				}
				else if (*ptr == 'w')
				{
					ptr++;
			 		#ifdef __RC51__	//use ANSI stdarg
 					var_ptr--;
 					var = *var_ptr;
 					
 					#else	
					var = *var_ptr++;
					#endif
					c1 = htoa_hi(var);
					disp_one_asc(ucol,ulayer,c1,mode);
					ucol+=7;
					c1 = htoa_lo(var);
					disp_one_asc(ucol,ulayer,c1,mode);
					ucol+=7;
			 		#ifdef __RC51__	//use ANSI stdarg
			 		var_ptr++;
 					var = *var_ptr;
			 		var_ptr-=2;			
 					#else	
					var = *var_ptr++;
					#endif
					c1 = htoa_hi(var);
					disp_one_asc(ucol,ulayer,c1,mode);
					ucol+=7;
					c1 = htoa_lo(var);
					disp_one_asc(ucol,ulayer,c1,mode);
					ucol+=7;

				}
				else 
				{
					c1 = *ptr;
					disp_one_asc(ucol,ulayer,c1,mode);
					ucol+=7;
					ptr++;
				}
			}
			else
			{				
				disp_one_asc(ucol,ulayer,c1,mode);
				ucol+=7;
				ptr++;    // one asc need one byte in computer system
			}
		
		 }
		#ifdef ENGLISH_CHINESE_FONT
		 else    //deal with Chinese, if c1<=128 ,it will deal with asc code, otherwise Chinese word.
		 {

			if(mode) 
				disp_one_ch(ucol,ulayer,c3,1);
			else    
				disp_one_ch(ucol,ulayer,c3,0);
			ucol+=16;  //16*16 Chinese dot matrix
			ptr += 2;  //one Chinese word need two byte in computer system
		
		  }
		#endif
	}
	BUSCON = orig_buscon;  // Restore buscon value
}


unsigned char font_detection(void) 
{
	unsigned char xdata j,a,b;	
	unsigned char xdata *ascii;

	#ifdef ENGLISH_CHINESE_FONT
	unsigned char xdata c,d;	
	unsigned char xdata *chchar;
    #endif

	extern xdata PSD_REGS PSD_reg;

	j = PSD_reg.PAGE;  // page number  will be changed in fetching ASC font data,so reserve page number first

	#ifndef ENGLISH_CHINESE_FONT
	ascii = (unsigned char xdata *)(FONT_BASE_ADDRESS);
	PSD_reg.PAGE =ENGLISH_FONT_PAGE; 
	a = ascii[0];
	b = ascii[1];
	#else
	ascii = (unsigned char xdata *)(FONT_BASE_ADDRESS);
	chchar = (unsigned char xdata *)(FONT_BASE_ADDRESS);
	PSD_reg.PAGE =ENGLISH_FONT_PAGE; 
	a = ascii[0];
	b = ascii[1];
	PSD_reg.PAGE =CHINESE_FONT_PAGE;
	c = chchar[0];
	d = chchar[1];
	#endif


    // If the font is not detected in the flash 
    // then display a bitmapped "no font" message on the LCD

	#ifndef ENGLISH_CHINESE_FONT
		if ((a == E_FONT_DETECT_BYTE_0) && (b == E_FONT_DETECT_BYTE_1)) 
	#else
		if (  (a == E_FONT_DETECT_BYTE_0) && (b == E_FONT_DETECT_BYTE_1)  && 
          		(c == C_FONT_DETECT_BYTE_0) && (d == C_FONT_DETECT_BYTE_1) )  
	#endif

	{
		return(0);        // Indicate the font was detected.
	}
    else              // Font not detected, so display bitmapped messaged.
	{ 
		DrawBmp(0,0,7,nn);    // n    
		DrawBmp(8,0,7,oo);    // o

		DrawBmp(24,0,7,ff);   // f
		DrawBmp(32,0,7,oo);   // o   
		DrawBmp(40,0,7,nn);   // n
		DrawBmp(48,0,7,tt);   // t

		return(1);    // Indicate the font was not detected.
	}
} 

/*---------------------------------------------------------------------------------------
Function:
	this function is used to merge LCD initialization and set display start line and column address. 
Parameters:
	ptr: none
Note:
	this function only used once just before user start using void printfLCD(unsigned char *ptr, ...).

----------------------------------------------------------------------------------------*/

void lcd_init(void)  
{
	unsigned char orig_buscon;
    orig_buscon = BUSCON;   // Save buscon value
    BUSCON |= 0x3C;           // Set Xdata Read/Write to max wait states 
	///////////////////////LCD initialization/////////
	BusyCheck();
	LcdConfig ( );	
	lcd_clear ( );	
	//////////////////////////set display start line and column address/////////
	OutMasterCom ( 0xC0 );
	OutSlaveCom ( 0xC0 );
	OutMasterCom ( 0x00 );
	OutSlaveCom ( 0x00 );

    if (font_detection())  // If font not detected,
	{
	while(1);              // wait here forever.
	}
	BUSCON = orig_buscon;  // Restore buscon value
}





?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品自拍偷拍动漫精品| 欧美一区二区三区视频免费播放 | 欧美另类一区二区三区| 日韩三级电影网址| 无吗不卡中文字幕| 激情久久久久久久久久久久久久久久| 成人国产精品免费观看动漫| 3751色影院一区二区三区| 国产精品欧美久久久久无广告| 午夜精品在线看| 91免费观看国产| 久久久久久久久久久久电影| 日本va欧美va瓶| 精品视频资源站| 亚洲日本护士毛茸茸| 国产精品一区2区| 欧美精品一区二区久久婷婷| 丝袜亚洲另类欧美综合| 欧美在线一区二区| 中文字幕亚洲一区二区va在线| 国产又黄又大久久| 精品国产一二三| 美日韩一级片在线观看| 欧美一级xxx| 日韩高清中文字幕一区| 欧美日韩精品一区视频| 亚洲最色的网站| 色综合天天综合在线视频| 中文字幕视频一区| 99精品视频在线播放观看| 国产欧美综合在线| 成人网在线播放| 国产欧美日韩三级| 国产一区二区不卡在线| 精品久久一二三区| 国产一区二区三区日韩| 欧美精品一区二区在线播放 | 国产mv日韩mv欧美| 久久久久久夜精品精品免费| 福利一区福利二区| 中文字幕制服丝袜成人av | 久久er99热精品一区二区| 欧美一区二区精品| 乱中年女人伦av一区二区| 日韩欧美在线综合网| 秋霞成人午夜伦在线观看| 欧美精品1区2区3区| 日本 国产 欧美色综合| 日韩欧美二区三区| 国产一区二区电影| 欧美国产成人精品| 在线视频欧美精品| 亚洲丶国产丶欧美一区二区三区| 欧美精品xxxxbbbb| 国产资源在线一区| 亚洲欧美色一区| 在线播放91灌醉迷j高跟美女 | 亚洲精品在线电影| 成人美女视频在线看| 亚洲一本大道在线| 亚洲欧洲日韩在线| 欧美日韩一区高清| 国产一区二区精品在线观看| 《视频一区视频二区| 91精品国产一区二区三区| 国产精品69久久久久水密桃| 亚洲天天做日日做天天谢日日欢 | 一本一本大道香蕉久在线精品| 亚洲综合图片区| 久久综合久久99| 色域天天综合网| 精品一区二区三区久久| 亚洲人午夜精品天堂一二香蕉| 91精品在线观看入口| 国产98色在线|日韩| 五月综合激情日本mⅴ| 国产欧美一区二区精品秋霞影院| 色婷婷综合久久久久中文一区二区 | 久久久国产午夜精品| 精品视频在线免费看| 国产成人免费av在线| 丝袜美腿亚洲综合| 亚洲欧美电影一区二区| 精品盗摄一区二区三区| 在线观看日韩电影| 福利视频网站一区二区三区| 免费成人在线视频观看| 夜色激情一区二区| 国产欧美日韩在线视频| 日韩一区二区免费高清| 欧美在线免费播放| 成人国产精品免费网站| 狠狠色丁香婷婷综合久久片| 午夜a成v人精品| 亚洲六月丁香色婷婷综合久久 | 成人动漫一区二区三区| 老司机免费视频一区二区| 亚洲一区二区三区精品在线| 国产精品每日更新在线播放网址 | 亚洲婷婷综合色高清在线| 久久先锋影音av| 日韩午夜在线观看| 欧美日韩的一区二区| 欧美怡红院视频| 在线一区二区三区四区| 91尤物视频在线观看| 99久久精品免费看| 成人sese在线| 成人av电影在线观看| 国产精品一二三区在线| 国产尤物一区二区| 国产精品亚洲专一区二区三区 | 欧美变态tickle挠乳网站| 欧美一区二区视频网站| 欧美日韩国产a| 欧美理论电影在线| 7777精品伊人久久久大香线蕉经典版下载 | 在线电影一区二区三区| 欧美在线综合视频| 欧美高清激情brazzers| 欧美高清www午色夜在线视频| 欧美日韩另类一区| 日韩一区二区免费在线电影| 日韩小视频在线观看专区| 日韩精品一区二区三区在线| 欧美变态凌虐bdsm| 久久综合九色综合97婷婷女人| 精品国产乱码久久久久久免费| 精品国产精品网麻豆系列| 久久亚洲影视婷婷| 欧美国产日韩在线观看| 亚洲精品成人精品456| 一级特黄大欧美久久久| 天天综合天天综合色| 国产成人亚洲综合a∨婷婷 | 国产精品99久久久久久久vr | 最新久久zyz资源站| 亚洲欧美激情小说另类| 亚洲成av人片www| 美女一区二区视频| 丰满少妇在线播放bd日韩电影| av欧美精品.com| 欧美色网站导航| 久久亚洲综合av| 一级做a爱片久久| 极品美女销魂一区二区三区| 成人午夜激情片| 69av一区二区三区| 国产亚洲欧美中文| 亚洲一级二级三级在线免费观看| 日韩电影在线看| 97精品久久久久中文字幕| 欧美在线一二三四区| 精品国产一区二区精华| 亚洲精品乱码久久久久久黑人| 日本在线不卡一区| av资源网一区| 日韩丝袜情趣美女图片| 亚洲日本在线天堂| 蜜桃av一区二区三区| 色呦呦网站一区| 亚洲精品在线免费播放| 亚洲自拍偷拍九九九| 福利视频网站一区二区三区| 欧美一区二区三区四区久久| 亚洲精品中文字幕乱码三区 | 久久久国际精品| 午夜国产精品影院在线观看| 本田岬高潮一区二区三区| 日韩欧美国产一区二区在线播放| 亚洲三级在线免费观看| 国产精品1区2区| 日韩午夜在线影院| 亚洲高清中文字幕| 色成年激情久久综合| 欧美国产日产图区| 国产专区综合网| 国产精品久久久久影院老司| 男女男精品网站| 欧美色大人视频| 亚洲免费观看在线观看| 成人午夜视频福利| 久久久亚洲精品石原莉奈| 美洲天堂一区二卡三卡四卡视频| 在线观看日韩高清av| 亚洲精品乱码久久久久久黑人 | 国产露脸91国语对白| 日韩欧美中文一区二区| 日韩不卡一区二区三区| 欧美片在线播放| 亚洲成人av电影在线| 在线观看不卡视频| 亚洲综合激情另类小说区| 91麻豆精品视频| 亚洲视频香蕉人妖| 色综合色狠狠天天综合色| 亚洲天堂久久久久久久| 99国产精品国产精品毛片| 中文字幕日韩一区| 色播五月激情综合网|