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

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

?? uart.c

?? 針對philips的51單片機LPC931的具體應用的例子。實現對uart, spi, i2c等硬件資源的操作。還有針對小內存單片機操作系統的實現。
?? C
字號:
#include "REG931.H"
#include "memory.h"
#include "system.h"
#include "key.h"
#include "vfd.h"
#include "display.h"
#include "uart.h"
#include "iic.h"

// uart setting: start bit=1, stop bit=1, data bit=8, verify bit= none, baud rate=19200
// use internal baud rate generator
void InitUart(void){
#ifdef   INCLUDE_UART_CODE
// set uart operation mode
	SSTAT=0xe0;		// RI + TI
	SCON=0x50;
// set baud rate : 19200, use baud rate generate
// 0x5f0=4800; 0x02f0=9600;  0x170=19200;  0x0030=115200  @7.373MHz; baud=Fosc/((BRGR1,BRGR0)+16)=7.373MHz/(0x0170+16)=19200
	BRGR1 = 0x02;	
	BRGR0 = 0xf0;
//	BRGR1 = 0x01;
//	BRGR0 = 0x70;
	BRGCON = 0x03;	// bit0--BRGEN=0: baud rate generate disenable; bit1--select baud source
	ESR=1;
	EST=1;
#endif
}

void StartUartData(uchar Len){
#ifdef   INCLUDE_UART_CODE
	TxLen=Len;
	TxIndex=0;
	SBUF=TxDBuff[0];		// start
#else
	Len=Len;
#endif
}


void UartCMProcess(uchar *Pt, uchar Lenth, bit bfront){
	uchar cmd, Len, n, ln, temp=0;
	cmd=*Pt++;
	Pt++;
	Len=Lenth;
	if(cmd<UART_CM1_ADDR+8){   // CM1 ~ CM20
		temp = 1;		ln=LN4;
		cmd -=UART_CM1_ADDR;
		if(Len>9-cmd)		Len=9-cmd;
		bStrLnUpdate=1;
	}
	else if(cmd < UART_CM1_ADDR+12){   // CM9 ~ CM20
		temp = 2;		ln=LN1;
		cmd -=UART_CM1_ADDR+8;
		bLn1Update=1;
	}
	else if(cmd<UART_CM1_ADDR+16){   // CM13 ~ CM20
		temp = 2;		ln=LN2;
		cmd -=UART_CM1_ADDR+12;
		bLn2Update =1;
	}
	else if(cmd<UART_CM1_ADDR+20){   // CM17 ~ CM20
		temp = 2;		ln=LN3;
		cmd -=UART_CM1_ADDR+16;
		bLn3UpDate=1;
	}
	if(temp>1){
		if(Len >5-cmd) 		Len = 5-cmd;
	}
	if(temp)
		for(n=0;n<Len;n++) 
			DisplayChar(ln, cmd+n+1, *Pt++, bfront);
//		DisplayStr2Buff(ln, cmd+1, Pt+1, NO_FILLSPACE, bfront);		// need to debug
}

void FlashIcon2Buff(bit Icon, uchar addr, uchar uc){
	if(Icon)	
		VFD.BakupBuff[addr] |= uc;
	else	   	VFD.BakupBuff[addr] &= ~uc;
}

void VFD_BSMSGM(uint intData, bit sign){
	bit bBSM;
	uchar n, bb;
	if(intData>=37*2*8)
		return;
	if(intData<37*8)
		bBSM=1;	// BSM
	else{
		intData -= 37*8;		bBSM=0;      // SGM
	}
	n = intData/8;	// byte
	bb = intData%8;	// bit
	if(bBSM){
		if(sign) 	VFD.BakupBuff[n] |=0x1<<bb;   // set bitx
		else		VFD.BakupBuff[n] &= ~(0x1<<bb);  // clear bit
	}
	else{
		if(sign) 	VFD.FrontBuff[n] |=0x1<<bb;   // set bitx
		else		VFD.FrontBuff[n] &= ~(0x1<<bb);  // clear bit
//		VFD.BakupBuff[n] = VFD.FrontBuff[n];
	}
}


/*  Input: uart or i2c received data in RxDBuff[30]; 
// exicute vary command base on RxdBuff[0]
// exicute time typically
// DM: 500us~860us;  SCM: 400us~560us;  BBM/BTM: 80~200 us
// clr/set All: 200~400us;   CM: 300~500us
*/
void I2C_Uart_InforProcess(void){
//	uchar CmdFrame[RXD_BUF_SIZE-2];
#define CmdFrame		RxDBuff
	uchar cmd=0, n, Len;
	bit sign=0;
	if(bRxDProcessEnd)
		return;
	if(CheckSum(RxDBuff, RxLen-1) != RxDBuff[RxLen-1]){		// checksum error
		bRxDProcessEnd=1;
		RxIndex=RxLen=0;
		return;
	}
// RxLen== cmd + len + Para1 + ...+ ParaN + verify
	CmdFrame[RxLen] = 0;  //set \0
	cmd=CmdFrame[0];
	Len=CmdFrame[1];  // Parameter number
//   process information as follow
	if(cmd!=UART_SELF_TEST_ADDR)
		Mode=SYS_IDLE;
//	CommTimer=20;                // for debug
	if(cmd<=UART_BBM_BTM_ADDR){
		for(n=0; n<Len;n++)
			if(cmd>=BUF_SIZE)  VFD.FrontBuff[cmd-BUF_SIZE+n] = CmdFrame[n+2];
			else     VFD.BakupBuff[cmd+n] = CmdFrame[n+2];
	}
	else if(cmd>=UART_CM1_ADDR&& cmd<UART_CM1_ADDR+20){   // CM1 ~ CM20
		UartCMProcess(CmdFrame, Len, BACKUP_BUF);
		if(bLn1Update&&bFlashLine1)		bLn1Update=0;
		else if(bLn2Update&&bFlashLine2)	bLn2Update=0;
		else if(bLn3UpDate&&bFlashLine3)	bLn2Update=0;
		else if(bStrLnUpdate&&(RollStatus&bit_roll_enable))    bStrLnUpdate=0;
		VFDBack2FrontProc( );
	}
	else{
		switch(cmd){
		case UART_STM_ADDR:
//			RollStatus &= 0xfe;
			for(n=RxLen-1;n<RXD_BUF_SIZE;n++)
				RxDBuff[n]=' ';
			DisplayStr2Buff(LN4, 1, &CmdFrame[2],NO_FILLSPACE, BACKUP_BUF);
			bStrLnUpdate=1;
			if(bFlashStr1||(RollStatus&bit_roll_enable))
				break;
			VFDBack2FrontProc(  );
			break;
		case UART_SCM_ADDR:
			DisplayStr(LN4,1, Len-1, &CmdFrame[2], FILLSPACE);
			RxLen  -=4;    // decrease command & ctrl word
			if(CmdFrame[Len+1] & bit_roll_enable){	// for start/stop roll flag
				RollStatus &= 0xfe;
				VFDRollProcess(  );
			}
			RollStatus=CmdFrame[Len+1];  
			bStrLnUpdate = 0;  // not to update;
			bFlashStr1=0;
			break;
		case UART_DM1_ADDR:
			bLn1Update=1;
			goto DISP_INTDATA;
		case UART_DM2_ADDR:
			bLn2Update=1;
			goto DISP_INTDATA;
		case UART_DM3_ADDR:
			bLn3UpDate=1;
	DISP_INTDATA:
//			bIconUpdate=1;
			WD.uc[0] = CmdFrame[2];	// high 
			WD.uc[1] = CmdFrame[3];  // low
			n = cmd-UART_DM1_ADDR+1;
			DisplayDigit(n,WD.IntData, CmdFrame[4], BACKUP_BUF);
			if(bFlashLine1||bFlashLine2||bFlashLine3) 				
				break;
			VFDBack2FrontProc( );
			break;
		case UART_BRM_ADDR:
			Percent=CmdFrame[2];
			DisplayColumn(Percent);
			break;
		case UART_CLR_ALL:
			FreshAllBuff(0);
			ClrAllFlag( );
			break;
		case UART_SET_ALL:
			FreshAllBuff(1);
			ClrAllFlag( );
			break;
		case UART_SWITCH_DISP:
			ForceBack2FrontProc( );
			RollStatus &= (~bit_roll_enable);
			break;
		case UART_VFD_BRIGHT_ADDR:
			break;
		case UART_SELF_TEST_ADDR:
			for(n=0;n<BUF_SIZE;n++)
				VFD.FrontBuff[n]=0;
			SelfTestUnit=CmdFrame[2];
			Counter32ms=0;
			Mode=SYS_SCREEN_TEST_SELF;
			bSelfTest=1;
			PerModulus=0;
			ClrAllFlag( );
			break;
		case UART_BSM_SGM_ADDR:
			sign= CmdFrame[2] & 0x04;   // on==1 or off==0
			WD.uc[0] = CmdFrame[2] & 0x3;
			WD.uc[1] = CmdFrame[3];
			VFD_BSMSGM(WD.IntData, sign);
			break;
		case UART_BUSY_ADDR:
			CommTimer=20;
			break;
		case UART_FLASH_ICON_ADDR:
			VFDFlashProcess(FORCE_EN);		// for swtich the display
			for(n=0;n<3;n++)
				bBit.FlashScroll[n] = CmdFrame[n+2];
			VFD.BakupBuff[2] = ((bBit.FlashScroll[0] &0xF7) | (VFD.BakupBuff[2] & 0x08));
			VFD.BakupBuff[3] = ((bBit.FlashScroll[1]& 0xDE) | (VFD.BakupBuff[3] & 0x21));
			FlashIcon2Buff(bFlashClose, 0, 0x80);
			FlashIcon2Buff(bFlashOpen, 0, 0x40);
			FlashIcon2Buff(bFlashProtect, 0, 0x04);
			FlashIcon2Buff(bFlashAlarm, 0, 0x08);
			FlashIcon2Buff(bFlashEP, 18, 0x40);
			FlashIcon2Buff(bFlashEQ, 18, 0x80);

//			VFD.FrontBuff[0] = VFD.BakupBuff[0];
//			VFD.FrontBuff[2] = VFD.BakupBuff[2];
//			VFD.FrontBuff[3] = VFD.BakupBuff[3];
//			VFD.FrontBuff[18] = VFD.BakupBuff[18];  // segment EP & EQ
			if(bFlashStr1)		RollStatus &= (~bit_roll_enable);
			break;
		case UART_SOFTWARE_VER:
			n = SOFTWARE_VERSION;
			SendData2TxBuff(UART_SOFTWARE_VER, &n);
			break;
		}
	}
	RxIndex=RxLen=0;
	bRxDProcessEnd=1;
}


void UartFrameResetCheck(void){
	if(!Timer4ms){
		RxIndex=RxLen=0;
	}
}
// Frame    == cmd + RxLen + para1 +....+ ParaN + CheckSum
// CheckSum == cmd + RxLen + para1 +....+ paraN
// RxLen     == para1 ~ paraN
// exicute time typically 100us, max 1960us
void UartRXD_Isr(void)   interrupt     4		// RI interrupt, vector is 0x23
{
#ifdef     INCLUDE_UART_CODE
	uchar ucData;
	RI=0;
	ucData=SBUF;
	if(!bRxDProcessEnd){
		return;	
	}
 	if(!RxIndex){
		RxDBuff[0]=ucData;
		RxIndex++;
		Timer4ms = T4ms_80ms;
 		return;	  // end byte0 of frame
	}
	if(RxIndex>RXD_BUF_SIZE)
		return;
 	RxDBuff[RxIndex]=ucData;
	if(RxIndex==1)
		RxLen=ucData+3;		// + cmd + len + verify
	RxIndex++;
	if(RxIndex==RxLen){	// caculate verify
		bRxDProcessEnd=0;	 // receive data end
		I2C_Uart_InforProcess( );
//		RxIndex=0;
	}
#endif
}


void UartTXD_Isr(void)   interrupt     13		// TI interrupt, vector is 0x6B
{
#ifdef    INCLUDE_UART_CODE
	TI=0;
	TxIndex++;
	if(TxIndex<TxLen){
		SBUF = TxDBuff[TxIndex];
	}
#endif
}





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区在线视频| www.欧美亚洲| 精品国产一区二区三区久久久蜜月 | 亚洲国产精品影院| 欧美日韩国产精品自在自线| 亚洲一区二区三区四区的| 欧美色大人视频| 蜜臀久久99精品久久久画质超高清 | 久久久久久夜精品精品免费| 成人性视频免费网站| 亚洲视频你懂的| 欧美日本乱大交xxxxx| 蜜桃视频免费观看一区| 久久精品网站免费观看| 99精品偷自拍| 青青草一区二区三区| 国产视频在线观看一区二区三区 | 欧美性猛交xxxx乱大交退制版| 亚洲国产精品一区二区www | 欧美色视频在线观看| 看片的网站亚洲| 国产精品国产三级国产a| 91久久精品一区二区二区| 蜜臀va亚洲va欧美va天堂| 国产亚洲成年网址在线观看| 色先锋久久av资源部| 青青草原综合久久大伊人精品优势| 久久久99精品免费观看| 欧美日韩国产另类一区| 国产成人综合在线播放| 亚洲国产人成综合网站| 国产三级一区二区三区| 9191精品国产综合久久久久久| 成人午夜激情视频| 日本最新不卡在线| 亚洲欧美日韩久久精品| 精品电影一区二区三区| 欧美午夜精品理论片a级按摩| 国内精品自线一区二区三区视频| 一区二区三区精品视频在线| 久久久.com| 日韩三级视频中文字幕| 色吧成人激情小说| 风间由美性色一区二区三区| 日韩精品亚洲一区二区三区免费| 国产精品国产三级国产普通话99 | 色综合一区二区三区| 国产综合一区二区| 日韩国产在线观看一区| 亚洲老妇xxxxxx| 中文字幕乱码亚洲精品一区| 91精品久久久久久蜜臀| 在线免费观看日韩欧美| 成人免费看黄yyy456| 国产一区二区三区免费| 免费欧美日韩国产三级电影| 亚洲已满18点击进入久久| 中文字幕在线免费不卡| 国产日韩欧美精品电影三级在线| 精品久久久久香蕉网| 日韩一卡二卡三卡国产欧美| 欧美日韩精品一区二区三区蜜桃| 色哟哟国产精品免费观看| 99精品视频一区| aaa国产一区| 99视频一区二区| 不卡的av网站| 波多野结衣亚洲| 成人久久18免费网站麻豆| 国产高清视频一区| 高清不卡在线观看| 粉嫩aⅴ一区二区三区四区五区| 国产在线播精品第三| 加勒比av一区二区| 国产成人8x视频一区二区| 国产成人福利片| 福利一区二区在线| 91在线观看地址| 91麻豆成人久久精品二区三区| 成人久久视频在线观看| 97久久超碰精品国产| 91热门视频在线观看| 欧美主播一区二区三区美女| 欧美午夜精品久久久久久超碰| 欧美性感一类影片在线播放| 欧美日韩国产精选| 欧美va天堂va视频va在线| 2023国产精品| 国产精品视频一区二区三区不卡| 亚洲视频免费观看| 亚洲国产va精品久久久不卡综合| 婷婷开心激情综合| 国内精品久久久久影院色| 国产精品一区二区无线| 成av人片一区二区| 在线精品视频小说1| 91麻豆精品国产91久久久久久 | 国产丝袜美腿一区二区三区| 国产精品久久久久影院亚瑟| 一区二区三区不卡视频| 日日夜夜免费精品视频| 韩国毛片一区二区三区| 99久久综合国产精品| 欧美日韩中文国产| 久久久久久电影| 一区二区三区视频在线观看| 日本亚洲一区二区| 国产91丝袜在线观看| 色呦呦日韩精品| 精品欧美乱码久久久久久1区2区| 国产精品系列在线| 午夜精品久久一牛影视| 国产传媒日韩欧美成人| 欧美日韩精品三区| 国产午夜精品一区二区三区视频| 一区二区三区四区不卡在线| 国内精品视频一区二区三区八戒 | 99久久夜色精品国产网站| 欧美日韩国产一区| 中文在线资源观看网站视频免费不卡 | 欧美少妇性性性| 国产色产综合产在线视频| 丝袜诱惑亚洲看片| av中文一区二区三区| 日韩精品一区二区三区视频在线观看| 最新热久久免费视频| 久久精品国产第一区二区三区| 色综合天天综合色综合av | 91麻豆精品国产91久久久更新时间| 国产欧美一区二区在线观看| 亚洲成av人综合在线观看| www.日本不卡| 久久精品欧美一区二区三区麻豆| 亚欧色一区w666天堂| 99久久99精品久久久久久 | www.色精品| ww亚洲ww在线观看国产| 午夜私人影院久久久久| 91丨porny丨首页| 久久亚洲一区二区三区明星换脸| 午夜精品爽啪视频| 色综合久久中文综合久久牛| 国产欧美视频在线观看| 久久精品国产一区二区三| 欧美午夜片在线看| 中文字幕一区二区三区四区| 国产毛片精品国产一区二区三区| 5858s免费视频成人| 亚洲一区二区美女| 色综合色狠狠综合色| 中文欧美字幕免费| 丁香婷婷综合网| 久久综合九色欧美综合狠狠| 麻豆精品在线视频| 日韩一区二区中文字幕| 午夜伊人狠狠久久| 欧美伦理电影网| 亚洲成人午夜影院| 欧美欧美午夜aⅴ在线观看| 午夜成人免费视频| 欧美久久久久久蜜桃| 亚洲成在人线免费| 51精品久久久久久久蜜臀| 亚洲成人av电影在线| 欧美在线影院一区二区| 亚洲自拍欧美精品| 欧美日韩一级视频| 日韩电影在线观看电影| 日韩欧美资源站| 极品少妇xxxx偷拍精品少妇| 久久夜色精品一区| 国产精品18久久久久久vr| 国产日韩欧美激情| 99r精品视频| 亚洲午夜久久久久久久久电影网 | 久久久久99精品国产片| 国产盗摄视频一区二区三区| 国产精品进线69影院| 在线观看不卡一区| 日韩电影一区二区三区| 欧美成人精品福利| 东方欧美亚洲色图在线| 亚洲美女视频在线观看| 欧美日韩成人在线一区| 激情都市一区二区| 中文字幕第一区综合| 欧美在线播放高清精品| 琪琪一区二区三区| 国产视频在线观看一区二区三区| 99re热视频精品| 视频一区欧美日韩| 久久免费午夜影院| 99国产一区二区三精品乱码| 亚洲一区二区三区四区中文字幕| 91精品婷婷国产综合久久| 国产不卡高清在线观看视频| 亚洲免费色视频| 日韩欧美一卡二卡| av电影在线观看完整版一区二区 | 紧缚捆绑精品一区二区|