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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? upsd3300_lcd.c

?? 增強型8位單片機UPSD33xx系列芯片常用片上外設的驅動程序(ADC,TIMER,UART,I2C..)
?? C
?? 第 1 頁 / 共 2 頁
字號:
			}
		
		 }
		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
}





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩国产成人精品| 欧美亚洲动漫精品| 欧美性受xxxx| 久久久久久久久久久久久久久99| 成人欧美一区二区三区白人| 日韩国产欧美在线播放| jlzzjlzz欧美大全| 精品日本一线二线三线不卡| 亚洲国产精品久久人人爱蜜臀| 国产精品一区免费在线观看| 日韩一级欧美一级| 亚洲国产精品久久一线不卡| 99国产精品久久| 日本一区二区免费在线观看视频| 欧美aaaaaa午夜精品| 色婷婷综合五月| 亚洲国产电影在线观看| 激情av综合网| 日韩精品中午字幕| 亚洲不卡一区二区三区| 色女孩综合影院| 中文字幕一区二区三区四区 | 欧美一区二区三区视频在线观看| 国产精品女主播在线观看| 国产在线一区二区综合免费视频| 欧美日韩电影在线| 亚洲综合色在线| 91蜜桃在线观看| 国产精品短视频| 97国产一区二区| 国产精品视频观看| 波多野结衣中文一区| 国产欧美日韩精品一区| 国产精品亚洲一区二区三区在线 | 91免费视频观看| 成人欧美一区二区三区视频网页| 日韩三级视频在线看| 天天综合网 天天综合色| 欧美视频一二三区| 日本不卡123| 欧美成人bangbros| 国产老女人精品毛片久久| 久久新电视剧免费观看| 国产黄色91视频| 亚洲欧洲www| 欧美主播一区二区三区美女| 亚洲一区二区三区三| 欧美久久久影院| 国产又粗又猛又爽又黄91精品| 久久久精品国产免费观看同学| 国产精品99久久久久久有的能看 | 欧美一级理论性理论a| 美女免费视频一区二区| 久久久91精品国产一区二区三区| 国产成人免费高清| 亚洲欧美日韩系列| 91麻豆精品91久久久久久清纯| 久久国产乱子精品免费女| 国产欧美视频一区二区| 在线一区二区三区做爰视频网站| 午夜精品久久久久久久久久久 | 欧美精品亚洲二区| 精品一区二区三区日韩| 一区在线观看视频| 欧美日本乱大交xxxxx| 国产一区二区三区四区在线观看| 欧美国产精品久久| 欧美军同video69gay| 国产二区国产一区在线观看| 夜夜嗨av一区二区三区四季av | 亚洲激情中文1区| 欧美三级视频在线观看| 国产在线播放一区二区三区| 有坂深雪av一区二区精品| 欧美精品一区二区蜜臀亚洲| 一本色道a无线码一区v| 精品无人码麻豆乱码1区2区| 亚洲欧美日韩国产综合| 精品国产电影一区二区| 在线精品视频一区二区三四| 精品一区中文字幕| 亚洲444eee在线观看| 中文字幕在线不卡视频| 精品久久久久久亚洲综合网| 91麻豆精品在线观看| 国产在线精品一区二区不卡了 | 国产成人精品网址| 天天做天天摸天天爽国产一区| 中文字幕va一区二区三区| 日韩欧美激情在线| 色94色欧美sute亚洲线路一久| 国产乱一区二区| 理论片日本一区| 亚洲成人av电影在线| 久久久久97国产精华液好用吗| 欧美日韩国产电影| 色婷婷久久综合| 成人v精品蜜桃久久一区| 国产最新精品免费| 蜜桃av噜噜一区| 图片区小说区国产精品视频| 亚洲黄色录像片| 亚洲欧洲精品一区二区精品久久久 | 欧美精品777| 色8久久人人97超碰香蕉987| 国产二区国产一区在线观看| 毛片av中文字幕一区二区| 五月婷婷激情综合网| 亚洲美女一区二区三区| 国产精品不卡视频| 国产精品网站导航| 欧美激情中文字幕| 国产欧美综合色| 日本一区二区三区免费乱视频 | 国产传媒一区在线| 国产一区在线看| 国产高清不卡二三区| 国产成人精品免费看| 国产经典欧美精品| 国产大陆a不卡| 成人国产精品视频| 波多野结衣视频一区| 国产成a人亚洲| 懂色av一区二区夜夜嗨| av在线综合网| 91久久香蕉国产日韩欧美9色| 91一区二区在线| 欧美亚洲国产一卡| 欧美日韩电影在线| 日韩一级在线观看| 国产日产亚洲精品系列| 国产精品视频观看| 一区二区激情视频| 午夜成人免费电影| 国产自产v一区二区三区c| 国产成人精品一区二区三区四区| 成人精品亚洲人成在线| 色偷偷久久人人79超碰人人澡| 欧美调教femdomvk| 日韩精品一区二区在线| 国产欧美日韩另类一区| 亚洲欧美日韩人成在线播放| 亚洲电影视频在线| 九九国产精品视频| www.久久久久久久久| 欧美影院精品一区| 久久嫩草精品久久久久| 亚洲色图欧洲色图| 老司机免费视频一区二区| 成人性生交大合| 欧美日韩精品是欧美日韩精品| 日韩精品一区二区三区在线观看| 国产精品私人自拍| 午夜视频一区在线观看| 国产精品一区2区| 在线亚洲免费视频| 日韩一区二区三免费高清| 国产精品超碰97尤物18| 老司机精品视频导航| 91在线视频在线| 欧美电视剧免费观看| 亚洲欧美日韩小说| 国产主播一区二区| 欧美日韩一区二区欧美激情 | 欧美精品一区二区三区四区| 国产精品对白交换视频| 六月婷婷色综合| 欧美在线|欧美| 久久精品水蜜桃av综合天堂| 亚洲一区在线观看视频| 粉嫩嫩av羞羞动漫久久久| 6080国产精品一区二区| 亚洲欧洲av另类| 国产一区二区三区在线观看精品 | voyeur盗摄精品| 精品不卡在线视频| 午夜国产精品一区| 色综合久久88色综合天天免费| 精品国产一区二区三区四区四| 一区二区成人在线观看| 不卡的av中国片| 久久精品水蜜桃av综合天堂| 理论电影国产精品| 在线不卡a资源高清| 亚洲人成小说网站色在线| 国产在线一区二区| 欧美成人女星排名| 日韩av二区在线播放| 欧美日韩一区二区三区在线| 亚洲日本一区二区三区| 99综合电影在线视频| 欧美国产禁国产网站cc| 国产一区啦啦啦在线观看| 精品久久国产97色综合| 日本欧美一区二区三区| 91精品欧美久久久久久动漫| 亚洲高清视频中文字幕| 欧美日韩综合在线| 亚洲成人自拍网| 精品视频在线视频|