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

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

?? shumaguan4.c

?? 串行口的設計
?? C
字號:
/**********************************************************************
**文件名:shumaguan4.c												 **
**功能:實現鍵盤(或串口輸入)、數碼管顯示,實現計算器功能			 **
**創建人:xingyuegu													 **
**創建日期:2006-9-10												 **
**版本:1.0															 **
**修改日期:2006-10-17												 **
**版本:2.0															 **
**修改日期:2006-10-20												 **
**版本:3.0															 **
**修改日期:2006-10-27												 **
**版本:4.0															 **
**********************************************************************/

#include <reg51.h>

#define uchar unsigned char
#define uint  unsigned int

/**********************************************************************
**								函數申明							 **
**********************************************************************/

void delay(unsigned int);
void display(int );
unsigned char key_scan(void);
unsigned char transition(unsigned char);
void time_set();
void time0_int();
bit isdigit(unsigned char );
unsigned int process(unsigned char );
void init(void);
void Int_UART(void);


/**********************************************************************
**								變量定義							 **
**********************************************************************/
unsigned int result=0;
unsigned int currentvalue=0,lastvalue;
unsigned char lastop;
volatile bit flag=0; 
unsigned char keyvalue;	  	
uchar *TX232,*RX232;
int code num_tab1[4]=
{0x88,0x84,0x82,0x81}
;
int code num_tab2[11]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}
;
unsigned  char code keypadvalue[][4]={
{'7','8','9','/'},
{'4','5','6','*'},
{'1','2','3','-'},
{'o','0','=','+'}
};
/**********************************************************************
**函數功能:主函數										 			 **
**參數:無														 	 **
**返回:無															 **
**********************************************************************/
void main()
{

	uchar *str="Please collect operation mode :1 (pc) ,2 (not for pc)\n";
  	init();
	Int_UART();
	TX232=str;
	SBUF=*TX232;	
		 while(1)
	 	{
			if(keyvalue=='1')
			{
				while(1)
				{

			 		if(flag)
					{
				
						keyvalue=key_scan();  
						init();	
						flag=0;
						//if(keyvalue!=0)
						result=process(keyvalue);
					}
					if(result<=9999)
					{
  						display(result);
					
					}
					else
					{
						display(0);
				
					}
				}
			}
			else if(keyvalue=='2')
			{	
				keyvalue=0;
				while(1)
				{
					if(flag)
					{				
						init();	
						flag=0;
						//if(keyvalue!=0)
						result=process(keyvalue);
					}
					if(result<=9999)
					{
  						display(result);
					
					}
					else
					{
						display(0);
				
					}
				}
			} 								
				
			
		}

}

/**********************************************************************
**函數功能:初始化函數(包括中斷初始化)						 	 **
**參數:無														 	 **
**返回:無															 **
**********************************************************************/
void init(void)
{
	EA=1;
	EX0=1;
	IT0=1;
	P1=0xf0;
}
/**********************************************************************
**函數功能:初始化串口函數(包括波特率設置)						 **
**參數:無														 	 **
**返回:無															 **
**********************************************************************/
void Int_UART(void)
//功能:	串口初始化
{
	SCON = 0x50 ; 	//SCON: serail mode 1, 8-bit UART, enable ucvr  
	TMOD |= 0x20 ; 	//TMOD: timer 1, mode 2, 8-bit reload  
	PCON |= 0x80 ; 	//SMOD=1;  
	TH1 = 0xFA ;	//Baud:4800 fosc=11.0592MHz  
	IE |= 0x90 ;	//Enable Serial Interrupt  
	TR1 = 1 ; 		// timer 1 run  
}
/**********************************************************************
**函數功能:中斷服務子程序										 	 **
**參數:無														 	 **
**返回:無															 **
**********************************************************************/

void int0_isr(void) interrupt 0 using 1
{

	if(!flag)
	{
		EX0=0;
		flag=1;
	}

	
}
/**********************************************************************
**函數功能:鍵值處理函數(處理+.-.*./.=)								 **
**參數:字符型														 **
**返回:整型														 **
**********************************************************************/
unsigned int process(unsigned char kvalue)
{

			if(isdigit(kvalue))//&&!flag)	  //如果是數字,求值
				{
					currentvalue=transition(kvalue)+currentvalue*10;
				 	result=currentvalue;
					

				 }
			else						   //如果是功能鍵
				if(kvalue=='o')			   //如果是ON/C,清0
				{
					 result=0;
					currentvalue=0;
					lastvalue=0;
				}
				else if(kvalue=='+')	  //如果是“+”
				{
					  lastop=kvalue;	   //lastop保存操作碼
					  lastvalue=result;//當前值成為上次值
					  currentvalue=0;		   //當前值清0
				}
					else if(kvalue=='-')
					{
						lastop=kvalue;
					  	lastvalue=result;
					  	currentvalue=0;
					}
						else if(kvalue=='*')
						{
							lastop=kvalue;
					  		lastvalue=result;
					  		currentvalue=0;
						}
							else if(kvalue=='/')
							{
								lastop=kvalue;
					  			lastvalue=result;
					  			currentvalue=0;
							}										

					  			else if(kvalue=='=')	 //如果是“=”
					  			{	
									switch(lastop)	  //判斷操作碼是什么
									{
										case '+':
										{
											result=currentvalue+lastvalue;
											lastvalue=result;
											break;
										}
										case '-':
										{
											result=lastvalue-currentvalue;
											lastvalue=result;
											break;
										}
										case '*':
										{
											result=currentvalue*lastvalue;
											lastvalue=result;
											break;
										}
										case '/':
										{
											result=lastvalue/currentvalue;
											lastvalue=result;
											break;
										}
									}
							}
	if(result>9999)
	{
		result=0;
		currentvalue=0;
	}
	return result;
}
								

/**********************************************************************
**函數功能:判斷按鍵的鍵值是功能鍵還是數字鍵						 **
**參數:整型數														 **
**返回:BOOL型														 **
**********************************************************************/
bit isdigit(unsigned char kvalue)
{
	if(kvalue>='0'&&kvalue<='9')
	return 1;
	else 
	return 0;
}
/**********************************************************************
**函數功能:把數字的ASCII轉換成整型									 **
**參數:整型數														 **
**返回:整型														 **
**********************************************************************/
unsigned char transition(unsigned char kvalue)
{
	if(kvalue>='0'&&kvalue<='9')
		return (kvalue-'0');
	else
		return 0;
}
/**********************************************************************
**函數功能:鍵盤掃描功能										 	 **
**參數:無														 	 **
**返回:返回鍵值													 **
**********************************************************************/
unsigned char key_scan(void)
{
	unsigned char line,row,temp,a,b,kvalue1;
	temp=0xfe;
	//flag=0;
	P1=0xf0;
	if((P1&0xf0)!=0xf0)
	{
		delay(10);
		P1=0xf0;
		if((P1&0xf0)!=0xf0)
		{			
			
			delay(10);
			for(line=0;line<4;line++) //進行行掃描
			{
				a=temp<<line;
		 		b=temp>>(8-line);
		 		P1=a|b;
				P1=P1&0x0f;
				P1=P1|0xf0;
		 		kvalue1=P1&0xf0;
		 		if(kvalue1!=0xf0)
		 		break;
			}
		
			P1=P1&0x0f;
			P1=P1|0xf0;
			P1=0xf0;
			while((P1&0xf0)!=0xf0)  //判斷鍵彈起
			{		
			}
	
			if(kvalue1==0xe0) //確定是第幾列
			row=0;
			else if(kvalue1==0xd0)
				row=1;
				else if(kvalue1==0xb0)
					row=2;
					else  if(kvalue1==0x70)
						 row=3;
						 else 
						 return 0;
			P1=0xf0;
			return keypadvalue[line][row];
		}
	
	
	}
	P1=0xf0; 
	return 0;
}	

/**********************************************************************
**函數功能:在數碼管上顯示數據										 **
**參數:整型數														 **
**返回:無															 **
**********************************************************************/
void display(int disnum)
{
	int ge,shi,bai,qian,i,j;
	int num[5]={0,0,0,0,10};
	if(disnum<=9999)
	{
		ge=disnum%10;
		shi=(disnum%100)/10;
		bai=(disnum/100)%10;
		qian=disnum/1000;
		num[0]=ge;
		num[1]=shi;
		num[2]=bai;
		num[3]=qian;
		if(qian!=0)
		{
			for(i=0;i<4;i++)
			{
				
				P2=num_tab1[i];		   //先送位碼
				P0=num_tab2[num[i]];   //再送段碼
				delay(1);
			}
		}
		else
		{
			if(bai!=0)
			{
				for(i=0;i<3;i++)
				{
					
					P2=num_tab1[i];
					P0=num_tab2[num[i]];
					delay(1);
				}
			}
			else
			{
				if(shi!=0)
				{
					for(i=0;i<2;i++)
					{
						
						P2=num_tab1[i];
						P0=num_tab2[num[i]];
						delay(1);
					}
				} 	
				else
				{
					for(i=0;i<1;i++)
					{
						for(j=0;j<4;j++)
						{
							if(j==0)
							{
								
								P2=num_tab1[j];
								P0=num_tab2[num[i]];
								delay(1);
							}
							else
							{
								
								P2=num_tab1[j];
								P0=num_tab2[num[4]];
								delay(1);
							}
						}
					}
				}
			}
		}
	}
	else
	;
}
/**********************************************************************
**函數功能:延時時間										 		 **
**參數:整型數														 **
**返回:無															 **
**********************************************************************/	
void delay(unsigned int time)
{
	int i;
	int k;
	for(i=0;i<time;i++)
	for(k=0;k<100;k++);
}

/**********************************************************************
**函數功能:串口接收中斷中斷函數,接收數據							 **
**參數:無															 **
**返回:無															 **
**********************************************************************/	
void Int_Rx(void) interrupt 4 using 2							

{
	
		if(RI)
		{
			RI=0;
			flag=1;
			keyvalue=SBUF;
		

		}
		if(TI)
		{
			TI=0;
			if(*TX232!='\0')
			{
				TX232++;
				SBUF=*TX232;
			}

		}

		
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一搞黄网站| 色婷婷综合久久久中文字幕| av电影在线不卡| 日韩免费看的电影| 亚洲va天堂va国产va久| 成人福利视频网站| 精品免费视频.| 天天综合网天天综合色| eeuss鲁片一区二区三区| 欧美一区三区四区| 亚洲一区二区三区四区在线免费观看| 国产在线精品一区二区| 欧美精品aⅴ在线视频| 亚洲特黄一级片| 成人免费三级在线| 精品国产伦一区二区三区观看方式| 一区二区久久久| 91碰在线视频| 亚洲丝袜另类动漫二区| 成人午夜又粗又硬又大| 久久久久国产精品麻豆| 日本va欧美va精品发布| 欧美另类z0zxhd电影| 一区二区三区欧美| 91久久精品一区二区三| 亚洲猫色日本管| 99久久99久久精品免费观看| 欧美三级在线看| 午夜精品久久久久| 在线不卡欧美精品一区二区三区| 亚洲一区二区三区四区在线免费观看| 99精品桃花视频在线观看| 国产精品久久久久久亚洲毛片| 国产精品一线二线三线精华| 精品盗摄一区二区三区| 韩国av一区二区| 久久久99免费| 粉嫩高潮美女一区二区三区 | 九九国产精品视频| 欧美高清性hdvideosex| 五月天激情小说综合| 777精品伊人久久久久大香线蕉| 婷婷中文字幕综合| 欧美tickle裸体挠脚心vk| 国产精品综合二区| 综合在线观看色| 日本大香伊一区二区三区| 五月婷婷久久丁香| 欧美一级一级性生活免费录像| 免费观看91视频大全| 久久久久久9999| 91一区二区在线| 亚洲成人av一区二区| 日韩欧美国产综合一区 | 日韩精品一区二区三区四区| 精品在线一区二区三区| 国产精品丝袜91| 欧洲国内综合视频| 麻豆成人免费电影| 国产蜜臀av在线一区二区三区| 99久久伊人精品| 五月综合激情网| 久久青草国产手机看片福利盒子 | 国产一区二区三区观看| 国产精品成人免费| 欧美日韩国产天堂| 国产成人免费xxxxxxxx| 亚洲一本大道在线| 久久九九99视频| 欧美年轻男男videosbes| 国产一本一道久久香蕉| 亚洲一二三四区不卡| 精品久久久久久最新网址| 色婷婷久久久久swag精品 | 精品人在线二区三区| www.色综合.com| 久久er99精品| 一区二区三区高清在线| 久久久精品日韩欧美| 欧美午夜精品免费| 福利一区在线观看| 天堂av在线一区| 国产精品丝袜91| 日韩三级视频在线观看| 色老头久久综合| 菠萝蜜视频在线观看一区| 美女视频黄 久久| 亚洲成人动漫av| 亚洲色图色小说| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美日韩一二三区| 99久久伊人网影院| 国产精品一线二线三线| 免费成人av在线| 午夜精品一区二区三区电影天堂 | 92精品国产成人观看免费| 国产在线精品免费| 裸体歌舞表演一区二区| 亚洲成av人片一区二区三区| 亚洲精品日产精品乱码不卡| 久久久久久久久伊人| 日韩视频免费直播| 91精品国产91久久久久久一区二区 | 91精品国产色综合久久久蜜香臀| 91免费版在线| 9i看片成人免费高清| 懂色av一区二区三区蜜臀| 国产一区二区三区四区在线观看| 美女视频网站黄色亚洲| 蜜臀久久久久久久| 久久成人久久爱| 久久99精品国产.久久久久久 | 午夜亚洲福利老司机| 亚洲精品综合在线| 亚洲人123区| 亚洲精品国产精华液| 亚洲免费视频成人| 樱花草国产18久久久久| 亚洲一卡二卡三卡四卡 | 成人综合在线视频| 国产91在线|亚洲| 99久久精品免费看| 在线欧美一区二区| 欧美一区二区三区免费大片 | 日韩欧美一级二级三级久久久| 日韩欧美亚洲国产另类| 精品捆绑美女sm三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美系列在线观看| 欧美日韩亚洲综合在线| 日韩一区二区在线观看视频| 日韩精品在线一区二区| 欧美国产成人精品| 夜夜精品视频一区二区| 国产在线精品免费| 高清国产一区二区| 欧美在线不卡一区| 日韩午夜小视频| 中文字幕av资源一区| 亚洲最新视频在线播放| 美女网站在线免费欧美精品| 国产成人在线电影| 欧美性猛片xxxx免费看久爱| 欧美v国产在线一区二区三区| 欧美国产一区二区| 日韩经典一区二区| 成人福利在线看| 8x8x8国产精品| 中文字幕在线不卡国产视频| 午夜电影网亚洲视频| 国产成人综合自拍| 欧美日韩国产成人在线91| 久久久精品国产免费观看同学| 亚洲精品免费看| 国产一区二区三区四区五区美女 | 不卡区在线中文字幕| 欧美日韩免费高清一区色橹橹 | 风间由美一区二区三区在线观看| 色国产综合视频| 久久一二三国产| 午夜精品久久久久久不卡8050| 国产 日韩 欧美大片| 欧美精品vⅰdeose4hd| 中文字幕一区二区三区精华液| 婷婷国产v国产偷v亚洲高清| 99精品在线免费| 久久精品夜色噜噜亚洲a∨| 亚洲国产欧美一区二区三区丁香婷| 国产精品18久久久久| 欧美一区二区三区在线电影| 成人欧美一区二区三区白人| 国产一区二区三区不卡在线观看 | 亚洲国产精品黑人久久久 | 亚洲午夜av在线| av在线这里只有精品| 久久亚洲精品国产精品紫薇| 三级久久三级久久| 91九色最新地址| 亚洲青青青在线视频| 国产精品一二三四| 欧美不卡一区二区三区| 丝袜亚洲另类欧美综合| 91久久精品国产91性色tv| 欧美极品aⅴ影院| 国内精品视频一区二区三区八戒| 91精品国产综合久久香蕉的特点| 一区二区三区四区国产精品| 成人一道本在线| 久久久久久久久久美女| 极品销魂美女一区二区三区| 欧美一区二区三区在线电影| 日韩精品一级中文字幕精品视频免费观看 | 91小视频免费看| 国产精品婷婷午夜在线观看| 国产一区激情在线| 久久久精品黄色| 极品瑜伽女神91| 精品少妇一区二区三区日产乱码| 欧美aaa在线| 精品国产一区二区三区久久久蜜月|