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

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

?? lcd.h

?? 含20個經典例程
?? H
字號:
////////LCD.h   此為LCD顯示子系統/////////
#include "C8051F040.h"	// Register definition file.
#include "intrins.h"
#include "math.h"
#include "string.h"
#include "stdlib.h"
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
enum {menulenth=16};//定義LCD一行顯示長度
#define toup sendc(0x14)  //lcd光標右移
#define todown sendc(0x10)//lcd光標左移
#define curshow sendc(0x0f)//顯示光標
#define home sendc(0x02)//移到首行
#define DISROW 2
sbit lcdrs=P5^2;//硬件控制接口
sbit lcdrw=P5^1;
sbit lcdcs=P5^0;
xdata uchar keybuf[16];//輸入緩沖區
code uchar disdata[3][16]={"0123456789.+-012","ABCDEFGHIJKLMNOP","QRSTUVWXYZ@#$%&*"};
xdata uchar intbuf[16];//顯示int型數據緩沖區
void delay1ms(uint time);//延時ms函數
void delay50us(uint time);//延時50us函數
void showpage(uchar *str,uchar *show);//顯示整個lcd屏
void sendc(uchar c);//給lcd發送命令
void showline(uchar  *str,bit page);//顯示lcd單行字符串
void showint(long idata num,bit line);//顯示lcd單行int型數據
void showintmes(long idata num,uchar *str,bit,page);//顯示lcd單行int+字符串
void puti(long  idata inum);//將inum變成字符串并放到intbuf[]中
void sendd(uchar c);//發送數據到lcd
void dispini();//顯示初始化
uchar menu_sec(uchar *menuname,uchar code  *menu,uchar menu_num);
uchar scankey();//返回0表示串鍵或無鍵按下,12345分別表示5個鍵
void  getkey();//字符輸入,若轉換成數字需要調用相應函數
int   getint();//數字輸入
void showf(long idata num,uchar fbit,bit line);
void putf(uchar fbit);
void delay1ms(uint time){//延遲1ms*time,這不是一個精確值
	uint i;
	uint j;
	for (i=0;i<time;i++){
		for(j=0;j<300;j++);
	}
}	
void delay50us(uchar time){//延時50us*time,不是精確值
	uchar i,j;
	for (i=0;i<time;i++){
		for(j=0;j<12;j++);
	}
}	
void sendc(uchar c){//給顯示lcd送命令
	SFRPAGE = 0x0f;//以下實際上是對lcd發送命令的時序圖進行操作的
	lcdrs=0;
	lcdrw=0;
	EA=0;
	P4=c;
	lcdcs=1;
	delay50us(1);
	lcdcs=0;
	delay50us(5);  
	lcdrw=1;
	lcdrs=1;   
	EA=1;
	if(c==1)
		delay1ms(2);
                
}
void dispini(){	//lcd顯示初始化
	delay1ms(100);
	SFRPAGE=0xf;
	lcdcs=0;         
	lcdrs=1;
	lcdrw=1;
	delay1ms(30);
	sendc(0x38);//8位,2行,5*7字體
	delay1ms(100);
	sendc(0x0c);//顯示開,光標關;不閃
	delay1ms(100);
	sendc(0x06);//增量方式,現不移動
	delay1ms(100);
	sendc(0x01);//清屏
	delay1ms(100);
}
void sendd(uchar c){//給顯示lcd送顯示字符
	SFRPAGE = 0x0f;
	EA=0;
	lcdrs=1;
	lcdrw=0;
	P4=c;
	lcdcs=1;
	delay50us(1);
	lcdcs=0;
	delay50us(4);
	lcdrw=1;
	lcdrs=0;
	EA=1;
}	
void puti(long  data inum){    
//將一個int型的數據轉化成ascii碼的字符串,結尾以'\0'結束,并將結果存于intbuf(全局變量數組,可在任何地方被調用)
//不用系統提供的函數是因為系統函數太浪費rom了,且可能需要較多的內存,當內部內存不夠時可能會出錯
//為了與普通51的兼容使用,故自行編了一個將int型數據轉化成字符串的程序
	long data t;
 	uchar data c=0;
	bit flag=1;
	t=100000000L;
	for(;c<16;c++)
		intbuf[c]='\0';
	c=0;
	if(inum<0){
		intbuf[0]='-';
		c++;
		inum=-inum;
	}
	for(;t>=10;t/=10){//此為將int型轉化成字符串算法
		if(t==10){
			intbuf[c]=inum/t+'0';
			intbuf[++c]=inum%t+'0';
			intbuf[++c]='\0';
			break;
		}
		if(inum<t&flag)
			continue;
		else	{
			flag=0;
			intbuf[c]=inum/t;
			inum-=(long)(intbuf[c]) * t;
			intbuf[c]+='0';
			c++;
		}
	}
}
void putf(uchar fbit){//將intbuf數組由后向前數第fbit位插入小數點'.',
//是系統避免用浮點數運算,用long型數據的乘除,再在結果中取小數位
//比如,32/456結果的顯示處理可以如此:將32乘10000,再除以456,將結果(int型數據)用
//puti()處理,此時是整數,在調用putf(4),保留四位小數
//即可,這樣處理比調用庫函數要有效的多
	char idata  t0;
	char idata  pf;
	pf=strlen(intbuf)-fbit;
	if(intbuf[0]!='-'){
		if(pf>0){
			t0=strlen(intbuf);
			for(pf=t0;pf>t0-fbit;pf--){
				intbuf[pf]=intbuf[pf-1];
			
			}
			intbuf[pf]='.';
		}
		else{
			pf=strlen(intbuf)-1;
			for(t0=fbit+1;t0>=0;t0--,pf--){
				if(pf>=0)
					intbuf[t0]=intbuf[pf];
				else
					intbuf[t0]='0';
				}
			intbuf[1]='.';
		}
		
	}
	else{
		if(pf>1){
			t0=strlen(intbuf);
			for(pf=t0;pf>t0-fbit;pf--){
				intbuf[pf]=intbuf[pf-1];
			
			}
			intbuf[pf]='.';
		}
		else{
			pf=strlen(intbuf)-1;
			for(t0=fbit+2;t0>=1;t0--,pf--){
				if(pf>=1)
					intbuf[t0]=intbuf[pf];
				else
					intbuf[t0]='0';
				}
			intbuf[0]='-';
			intbuf[2]='.';
		}
	}
			
		
}
void showf(long idata num,uchar fbit,bit line){
	puti(num);
	putf(fbit);
	showline(intbuf,line);
}
void showint(long idata num,bit line){
	puti(num);
	showline(intbuf,line);
}

void showintmes(long idata inum,uchar *str,bit page){//事實上是重新調用puti()再結尾加上*str
	idata uchar k;
	long idata t;
 	uchar idata c=0;
	bit flag=1;
	t=100000000;
	for(;c<16;c++)
		intbuf[c]='\0';
	c=0;
	if(inum<0){
		intbuf[0]='-';
		c++;
		inum=-inum;
	}
	for(;t>=10;t/=10){
		if(t==10){
			intbuf[c]=inum/t+'0';
			intbuf[++c]=inum%t+'0';
			intbuf[++c]=' ';
			goto putmes;
		}
		if(inum<t&flag)
			continue;
		else	{
			flag=0;
			intbuf[c]=inum/t;
			inum-=(long)(intbuf[c]) * t;
			intbuf[c]+='0';
			c++;
		}
	}//以上部分是將puti()函數重新寫一次,但不給數組加結束符
	putmes:
	for(k=c;*str!='\0';k++){//以下事實上是個數組復制的算法
     intbuf[k]=*str;
	     str++;                                         
	    if(*str==' '){
			intbuf[++c]='\0';
			break;
		}
	}
	intbuf[k]='\0';//intbuf數組復制完畢
	showline(intbuf,page);//顯示行控制
}
void showline(uchar  *str,bit page){//page值為0,顯示第一行,page為1,顯示第二行
	uchar idata  k;
	if(page==0){//控制顯示在第幾行是通過k的地址不同來實現的
		for(k=0x80;k<0x90;k++){
           	if(*str=='\0'){//*str的指針不下移,會執行到k=0x8f為止
				sendc(k);
				sendd(' ');//顯示空格是清掉上次顯示的后面部分
			}
			else{
				sendc(k); 
				sendd(*str);
				str++;
			}
		}
	}
	if(page==1){
		for(k=0xc0;k<0xd0;k++){
			if(*str=='\0'){
				sendc(k);
				sendd(' ');
			}
			else	{
				sendc(k); 
				sendd(*str);
				str++;
			}
		}
	}
}
void showpage(uchar *str,uchar *show){//顯示整屏
	showline(str,0);//str顯示在第一行
showline(show,1);//show顯示在第二行
 }
uchar scankey(){//掃描鍵值的函數
	uchar  c;
	SFRPAGE=0X0F;
	c=P5;
	c=c&0xf8;//電路中有按鍵按下是低電平
	if(c==0x0f8)
		return(0);
	delay1ms(20);
	switch(c){
	case 0xd8:
		return 4;//原來是1
	case 0xe8:
		return 2;
	case 0xf0:
		return 3;
	case 0xb8:
		return 1;//原來是4
	case 0x78:
		return 5;
	default: return 0;//此行事實上包含了對串鍵的處理
	}
}
uchar menu_sec(uchar *menuname,uchar code  *menu,uchar menu_num){
//菜單選擇控制,菜單可在code數組中定義,menu_num為菜單項數,menulenth為菜單一項的長度,主要是我無法在傳參中用二維數組控制
//才出此下策
	char idata c,i=0;
	showline(menuname,0);//菜單翻頁中menumame是不隨著翻動的
	showline(&(menu[i*menulenth]),1);
	for(;;){
		c=scankey();
		if(c==0)
			continue;
		if(c==1){//下翻頁操作
			i++;
			if(i>=menu_num)//i值上溢處理
				i=0;
				showline(&(menu[i*menulenth]),1);
		  }
	     if(c==3){//上翻頁操作
		     i--;
		     if(i<0)//i值下溢處理
		     	i=menu_num-1;
		     showline(&(menu[i*menulenth]),1);	
		  }
		 if(c==4)
			return -1;//作為exit鍵
		 if(c==5)
			return -2;//預想作為快捷鍵
	     if(c==2){//確定鍵處理		
		 	//while(scankey()==2);//手按下去的時間可能很長,所以等松鍵才處理
		 	//此程序有待用戶改進
		     	return i;
		     	            
		 }    
		for(c=0;c<3;c++)//完成一次掃描后給一定的延時
			delay1ms(100);	 
	}
}
int   getint(){
		getkey();
		return (atoi(keybuf));//調用的是系統函數,將字符串轉化成int型數據
}
void  getkey(){//取輸入值,可取16個字節長度的字符串
			char xdata  i,j,t,flag;
			uchar k,c;
		keystart:
			flag=0;
			for (k=0;k<16;k++){//先將緩沖區清零,以免把歷史數據當成目前數據
				keybuf[k]='\0';
			}
			showline(keybuf,1);//將輸入值回顯在第二行,以方便即時矯正
			i=0;
			j=0;
			showline(disdata[i],0);//供選擇輸入的字符顯示出來
			curshow;//顯示光標
			home;//回首位,作為初始狀態
			for(;;){
				do{	
					k=scankey();
					if(k==0)
					t=-1;
				}while(!k);//有按鍵按下時判斷是否為有效按鍵,若不是,一直等待
				if(k==1){//下翻頁鍵使之光標下移
					j++;
					toup;
					t=-1;
					if(j>15){//按過頭后要翻到下一頁顯示,且使光標顯示在首位
						j=0;
						i++;
						if(i>DISROW)	
							i=0;
						showline(disdata[i],0);
						curshow;	
						home;
					}
				}
				if(k==2){//確定鍵,使光標所在位置的字符為有效輸入,但是若為按長鍵表//示結束輸入
					while(scankey()==2){
						t++;
						if(t>20)
							goto getkeycon; 
					}
					if(flag>=16)
							goto keystart;//輸入值過多,控制其回到首位矯正
		
					keybuf[flag]=disdata[i][j];
					showline(keybuf,1);//將輸入值回顯
					home;
					delay1ms(3);//回顯完畢后要控制其光標恢復到首行輸入狀態
					flag++;
					for(c=0;c<j;c++){
						toup;
						delay1ms(1);
					}
					goto firstout;
					getkeycon:
					showline("Has inputed:  ",0);
					showline(keybuf,1);//需長按鍵
					while(scankey()==2);
					goto KEYEND;
				}
				if(k==3){//上翻頁鍵控制光標上移
					j--;
					t=-1;
					if(j<0)	{//同樣存在過頭處理,但是不是回到首位,而是末位
						j=15;
						i--;
						if(i<0)
							i=DISROW;
						showline(disdata[i],0);
						curshow;
						home;
						delay1ms(3);
						for(c=0;c<j;c++){
								toup;
								delay1ms(1);
						}
					}
					else{
							todown;
					}
				
			}
			if(k==5){//delete 鍵,使輸入緩沖區的最后一位刪掉
				flag--;
				if(flag<1)
					flag=0;
				keybuf[flag]='\0';
				showline(keybuf,1);
				curshow;
				home;
				delay1ms(3);
				for(c=0;c<j;c++){
						toup;
						delay1ms(1);
				}
			}	
		firstout:	//每個循環必要的延時
			for(k=0;k<2;k++)
			delay1ms(100);
		}
	KEYEND:	
		_nop_();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91尤物视频在线观看| 国产福利一区二区三区视频| 久久99精品国产| 91在线无精精品入口| 欧美一区二区播放| 国产精品福利一区二区| 日韩国产欧美视频| 色哟哟亚洲精品| 欧美日韩黄色一区二区| 国产目拍亚洲精品99久久精品| 亚洲电影视频在线| 成人综合婷婷国产精品久久 | 久久日韩粉嫩一区二区三区| 亚洲免费视频成人| 国产成人精品免费| 欧美一区中文字幕| 亚洲欧美激情一区二区| 国产一区二区三区免费看| 欧美亚洲一区三区| 中文子幕无线码一区tr| 捆绑调教一区二区三区| 在线精品国精品国产尤物884a| 久久久久久久久久久99999| 日韩中文字幕麻豆| 91一区一区三区| 国产免费成人在线视频| 日本成人在线看| 91小视频免费观看| 日韩精品一区二区三区中文不卡| 亚洲一区二区综合| 99久久伊人精品| 国产欧美一区二区精品性色| 久久精品国产久精国产爱| 欧美日韩黄色一区二区| 一区二区三区四区视频精品免费 | 91极品视觉盛宴| 国产精品美女久久久久久久| 久久国产综合精品| 911精品国产一区二区在线| 亚洲精品日产精品乱码不卡| 成人精品国产一区二区4080| 国产亚洲精品福利| 国内成人精品2018免费看| 欧美一级久久久| 日韩av网站在线观看| 欧美日韩亚洲综合| 亚洲免费观看高清完整版在线观看熊 | 欧美一区二区免费视频| 午夜精品久久久久久不卡8050 | 综合亚洲深深色噜噜狠狠网站| 国产精品资源站在线| 精品国产一区二区三区久久久蜜月| 亚洲成a人v欧美综合天堂下载| 在线免费不卡视频| 怡红院av一区二区三区| 不卡一卡二卡三乱码免费网站| 久久久99精品久久| 成人网男人的天堂| 国产精品久久久久久久裸模| 99re这里只有精品首页| 亚洲免费观看高清在线观看| 日本韩国精品在线| 亚洲一区在线观看免费| 欧美精品一卡二卡| 亚洲成人免费视频| 日韩欧美国产高清| 韩国精品一区二区| 亚洲国产精品成人综合 | 伊人色综合久久天天人手人婷| 成人午夜电影小说| 亚洲日本乱码在线观看| 91蝌蚪porny成人天涯| 亚洲综合色网站| 欧美一区二区人人喊爽| 国产一区二区看久久| 中文字幕一区日韩精品欧美| 91高清在线观看| 日本欧美加勒比视频| ww久久中文字幕| 成人黄色一级视频| 夜夜亚洲天天久久| 91精品国模一区二区三区| 韩国女主播一区二区三区| 国产精品国产三级国产aⅴ入口| 91美女视频网站| 最近中文字幕一区二区三区| 久久蜜桃av一区精品变态类天堂| 粉嫩绯色av一区二区在线观看| 136国产福利精品导航| 欧美专区日韩专区| 久久国产精品第一页| 亚洲国产精品av| 在线免费av一区| 美女高潮久久久| 中文字幕乱码久久午夜不卡| 色婷婷av一区| 久久国产尿小便嘘嘘| 中文字幕一区二区三区在线观看| 欧美色精品在线视频| 精品在线视频一区| 中文av一区特黄| 在线播放欧美女士性生活| 国产制服丝袜一区| 亚洲精品国产无天堂网2021 | 麻豆精品视频在线观看免费| 在线播放欧美女士性生活| 国产精品88av| 香蕉久久一区二区不卡无毒影院| 日韩你懂的在线播放| 99精品国产99久久久久久白柏| 日韩国产欧美在线观看| 国产精品三级久久久久三级| 日本韩国一区二区三区视频| 日韩国产欧美在线视频| 欧美国产日本韩| 日韩一区二区三区电影| 日本韩国欧美三级| 国产成人在线视频网址| 日韩国产精品久久久久久亚洲| 欧美国产日韩a欧美在线观看 | 成人一级片网址| 一区二区三区蜜桃网| 久久亚洲综合色一区二区三区 | 亚洲成人福利片| 国产精品私房写真福利视频| 日韩一区二区视频| 色婷婷狠狠综合| 粉嫩13p一区二区三区| 日韩av一区二区在线影视| 国产亚洲精品bt天堂精选| 91精品国产品国语在线不卡| 91亚洲精品久久久蜜桃网站| 国内精品国产三级国产a久久 | 欧美日韩在线播放一区| 懂色av一区二区三区免费看| 亚洲伊人伊色伊影伊综合网| 久久久精品综合| 91精品国产麻豆国产自产在线| 一本一道综合狠狠老| 国产成人在线网站| 精品一区二区三区在线播放| 亚洲第一电影网| 亚洲色图欧洲色图婷婷| 精品国产91洋老外米糕| 欧美巨大另类极品videosbest | 国产精品123区| 美腿丝袜亚洲色图| 午夜在线电影亚洲一区| 高清成人在线观看| 久久精品国产澳门| 丝袜脚交一区二区| 亚洲影视在线观看| 亚洲蜜桃精久久久久久久| 国产精品成人免费在线| 国产欧美一区二区三区在线老狼| 欧美成人精品3d动漫h| 欧美日韩国产综合一区二区| 色噜噜狠狠一区二区三区果冻| 国产·精品毛片| 精品一区二区影视| 精品一区中文字幕| 男男gaygay亚洲| 五月综合激情日本mⅴ| 亚洲永久精品国产| 亚洲一二三四区不卡| 亚洲精品免费一二三区| 亚洲精品成人在线| 亚洲人成人一区二区在线观看 | 欧美日韩精品高清| 欧美日韩一区二区三区高清| 欧洲国内综合视频| 91福利区一区二区三区| 欧美色电影在线| 91精品国产91热久久久做人人| 欧美大片国产精品| 欧美精品一区二区在线观看| 国产日韩欧美精品电影三级在线| 中文字幕免费在线观看视频一区| 亚洲色图19p| 五月天网站亚洲| 麻豆91在线播放免费| 国产.精品.日韩.另类.中文.在线.播放| 成人精品国产免费网站| 91成人免费电影| 日韩视频永久免费| 国产日韩欧美高清| 一区二区三区国产豹纹内裤在线| 亚洲五码中文字幕| 久久99热这里只有精品| 成人丝袜高跟foot| 日本大香伊一区二区三区| 制服丝袜在线91| 国产视频视频一区| 亚洲专区一二三| 精品一区二区av| 色综合久久88色综合天天免费| 91精品国产美女浴室洗澡无遮挡| 久久久久亚洲综合| 亚洲愉拍自拍另类高清精品| 黄色小说综合网站|