⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 master.c

📁 MSP430F149液位控制代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		P3OUT |= BIT0;						//switch ro RX mode

		CommStat &= 0x0F;				//Low resered
	}
}

unsigned int GetHeight(void) {

	unsigned int itemp;
	unsigned int ADCResult;
	
	ADC12MCTL0 = SREF_1 + INCH_6;
	ADC12CTL0 |= ENC;
	ADC12CTL0 |= ADC12SC;
	
	while (ADC12CTL0 & ADC12SC);       //转换完成后 ADC12SC自动复位;
	
	ADC12CTL0 &= ~ENC;
	
	ADCResult = ADC12MEM0;
	
	for(itemp=0;itemp<sizeof(Height_Tab);itemp++)
			if(ADCResult<Height_Tab[itemp])break;

	////////////////////////////////TESTING////////////////////////////////
	ADResult_Temp = ADCResult;
	//////////////////////////////////////////////////////////////////////////

	return itemp;
	//return ADResult_Temp;
}
//---------------------------------------------------------
void InitValve(void){
	//设定端口方向
	P2DIR |= (BIT0+BIT1);
	//初始化端口
	P2OUT |= (BIT0+BIT1);
}
void ValveA_Run(void){
	//打开电磁阀A:加水
	P2OUT &= ~BIT0;
	LCD_Display(Kai,2,40,0);
	ValveB_Stop();
}
void ValveA_Stop(void){
	//关闭电磁阀A
	P2OUT |= BIT0;
	LCD_Display(Guan,2,40,0);
}
void ValveB_Run(void){
	//打开电磁阀B:放水
	P2OUT &= ~BIT1;
	LCD_Display(Kai,2,104,0);
	ValveA_Stop();
}
void ValveB_Stop(void){
	//关闭电磁阀B
	P2OUT |= BIT1;
	LCD_Display(Guan,2,104,0);
}
//---------------------------------------------------------
void LCD_Initialization(void)
{	P5DIR = 0xff;
	P5OUT = 0x00;
		//Set Port5 Output mode and data;
	P6DIR |= 0x007;
	P6OUT&=~LCD_RST;
	P6OUT&=~LCD_CS1;
	P6OUT&=~LCD_CS2;
		//Set Port6 Output mode and data;
	P4DIR |= (BIT4+BIT5+BIT6+BIT7);
	P4OUT &= ~BIT4;
	P4OUT &= ~LCD_RW;
	P4OUT &= ~LCD_EN;
	P4OUT &= ~BIT7;
			//Set Port4 Output mode and data;
	LCD_Delayt(5);
	P6OUT|=LCD_RST;
	LCD_WriteByte(LCD_DisplayON,LCD_Instrument|LCD_Chip1);
	LCD_WriteByte(LCD_DisplayON,LCD_Instrument|LCD_Chip2);
	LCD_WriteByte(LCD_StartLine,LCD_Instrument|LCD_Chip1);
	LCD_WriteByte(LCD_StartLine,LCD_Instrument|LCD_Chip2);
	LCD_Clear(0x00);
}
unsigned char LCD_ReadByte(unsigned char flag)
{	unsigned char LCD_Result=0x00;
	P4OUT&=~LCD_EN;
	P4OUT|=LCD_RW;
	if ((flag&LCD_Data)==0x01)
		P4OUT|=LCD_DI;
	else 
		P4OUT&=~LCD_DI;
		//LCD_DI=flag&LCD_Data;
	if ((flag&LCD_Chip1)==0x02)
		P6OUT|=LCD_CS1;
	else
		P6OUT|=LCD_CS2;
		//Chip Selected;
	P4OUT|=LCD_EN;
		//Start Read Operation;
	LCD_Delayt(2);
	P5DIR=0x00;
	LCD_Result=(P5IN&0xff);
	P5DIR=0xff;
		//Get Data From Port5;
	P4OUT&=~(LCD_EN);
		//Stop Read Operation;
	P6OUT&=~(LCD_CS1+LCD_CS2);
	return LCD_Result;
}
void LCD_WriteByte(unsigned char I_Data,unsigned char flag)
{	unsigned char itemp=0;
	do
	{	itemp=LCD_ReadByte(flag&0xfe);
		//Read Status Register;
	}while (itemp&0x80);
	LCD_Delayt(2);
		//Check if device is busy;
	P4OUT&=~LCD_EN;
	P4OUT&=~LCD_RW;
		//Write Enable;
	if ((flag&LCD_Data)==0x01)
		P4OUT|=LCD_DI;
	else
		P4OUT&=~(LCD_DI);
		//LCD_DI=flag&LCD_IData;
	if ((flag&LCD_Chip1)==0x02)
		P6OUT|=LCD_CS1;
	else
		P6OUT|=LCD_CS2;
	P4OUT|=LCD_EN;
	P5OUT=I_Data;
	LCD_Delayt(2);
	P4OUT&=~(LCD_EN);
	P6OUT&=~(LCD_CS1+LCD_CS2);
}
unsigned char LCD_Location(unsigned char XPos,unsigned char YPos)
{	unsigned char ce_flag=YPos<64?LCD_Chip1:LCD_Chip2;
	XPos=XPos&0x07;
		//X Position < 8;
	YPos=YPos&0x3f;
		//Y Position < 64;
	LCD_WriteByte(LCD_StartLine,LCD_Instrument|LCD_Chip1);
	LCD_WriteByte(LCD_StartLine,LCD_Instrument|LCD_Chip2);
	LCD_WriteByte((LCD_XAddress+XPos),ce_flag&0xfe);
	LCD_WriteByte((LCD_YAddress+YPos),ce_flag&0xfe);
	return ce_flag;
}
void LCD_Clear(unsigned char I_Data)
{	unsigned char xtemp,ytemp;
	for (xtemp=0;xtemp<8;xtemp++)
	{	LCD_Location(xtemp,0);
		LCD_Location(xtemp,64);
		for (ytemp=0;ytemp<64;ytemp++)
		{	LCD_WriteByte(I_Data,LCD_Data|LCD_Chip1);
			LCD_WriteByte(I_Data,LCD_Data|LCD_Chip2);
		}
	}
}
void LCD_ClearRange(unsigned char Start_XPos,unsigned char Start_YPos,
					unsigned char End_XPos,unsigned char End_YPos)
{	unsigned char XPos,YPos,flag;
	for (XPos=Start_XPos;XPos<End_XPos;XPos++)
	{	flag=LCD_Location(XPos,Start_YPos);
		for (YPos=Start_YPos;YPos<End_YPos;YPos++)
		{	if (YPos==64)
				flag=LCD_Location(XPos,64);
			LCD_WriteByte(0x00,flag|LCD_Data);
		}
	}
}
void LCD_Delayt(unsigned int dtime)
{	unsigned int itemp;
	for (itemp=0;itemp<dtime;itemp++);
}
void LCD_Delayl(unsigned int dtime)
{	unsigned int itemp;
	for (itemp=0;itemp<dtime;itemp++)
		LCD_Delayt(10000);
}
void LCD_Display(const unsigned char *Buffer,unsigned char Start_XPos,
					unsigned char Start_YPos,unsigned char Rotate)
{	unsigned char XPos,YPos,flag;
	unsigned char Width=Buffer[0],Height=Buffer[1];
	for (XPos=0;XPos<Height;XPos++)
	{	flag=LCD_Location((XPos+Start_XPos),Start_YPos);
		for (YPos=0;YPos<Width;YPos++)
		{	if ((YPos+Start_YPos)==64)
				flag=LCD_Location((XPos+Start_XPos),64);
			if(Rotate == 1)
			{       LCD_WriteByte((0xff-Buffer[XPos*Width+YPos+2]),flag|LCD_Data);
			} else {
			LCD_WriteByte(Buffer[XPos*Width+YPos+2],flag|LCD_Data);
			}
		}
	}
}
void LCD_DispNum(unsigned int dates,unsigned char Start_XPos,
				 unsigned char Start_YPos,unsigned char Rotate) {
					 //这是一个,注意仅仅是一个哦,显示数据的地方哦
	switch (dates) {
		case 0:
			LCD_Display(Number0,Start_XPos,Start_YPos,Rotate);
			break;
		case 1:
			LCD_Display(Number1,Start_XPos,Start_YPos,Rotate);
			break;
		case 2:
			LCD_Display(Number2,Start_XPos,Start_YPos,Rotate);
			break;
		case 3:
			LCD_Display(Number3,Start_XPos,Start_YPos,Rotate);
			break;
		case 4:
			LCD_Display(Number4,Start_XPos,Start_YPos,Rotate);
			break;
		case 5:
			LCD_Display(Number5,Start_XPos,Start_YPos,Rotate);
			break;
		case 6:
			LCD_Display(Number6,Start_XPos,Start_YPos,Rotate);
			break;
		case 7:
			LCD_Display(Number7,Start_XPos,Start_YPos,Rotate);
			break;
		case 8:
			LCD_Display(Number8,Start_XPos,Start_YPos,Rotate);
			break;
		case 9:
			LCD_Display(Number9,Start_XPos,Start_YPos,Rotate);
			break;
	}
}
void LCD_DispNums(unsigned int dates,unsigned char Start_XPos,
				  unsigned char Start_YPos,unsigned char Rotate){
	unsigned int itemp,jtemp;
	jtemp = dates;
	itemp = dates/10000;
	//LCD_DispNum(itemp,Start_XPos,Start_YPos,Rotate);
	jtemp = jtemp - itemp*10000;
	itemp = jtemp/1000;
	//LCD_DispNum(itemp,Start_XPos,Start_YPos+8,Rotate);
	jtemp = jtemp - itemp*1000;
	itemp = jtemp/100;
	//LCD_DispNum(itemp,Start_XPos,Start_YPos+16,Rotate);
	LCD_DispNum(itemp,Start_XPos,Start_YPos,Rotate);
	jtemp = jtemp - itemp*100;
	itemp = jtemp/10;
	//LCD_DispNum(itemp,Start_XPos,Start_YPos+24,Rotate);
	LCD_DispNum(itemp,Start_XPos,Start_YPos+8,Rotate);
	itemp = jtemp - itemp*10;
	//LCD_DispNum(itemp,Start_XPos,Start_YPos+32,Rotate);
	LCD_DispNum(itemp,Start_XPos,Start_YPos+16,Rotate);
}
//---------------------------------------------------------
void LCD_DispMainMenu(void){
	if(Sys_Menu_Flag==0) {
		//Sys_Menu_Flag=0时,选择"单机模式"
		LCD_Clear(0x00);
		LCD_Display(DanJi,2,32,1);
		LCD_Display(LianJi,4,32,0);
	} else {
		//Sys_Menu_Flag=1时,选择"联机模式"
		LCD_Clear(0x00);
		LCD_Display(DanJi,2,32,0);
		LCD_Display(LianJi,4,32,1);
	}
}
void LCD_DispSoloMode(void){
	LCD_Clear(0x00);
	LCD_Display(HaoMi,0,32,0);		LCD_Display(KeYue,0,96,0);
	LCD_Display(FaMen,2,0,0);			LCD_Display(CharA,2,32,0);
	LCD_Display(FaMen,2,64,0);		LCD_Display(CharB,2,96,0);
	LCD_Display(SheDing,4,0,0);		LCD_Display(HaoMi,4,96,0);
	LCD_Display(Key1,7,0,0);			LCD_Display(Key2,7,32,0);
	LCD_Display(Key3,7,64,0);			LCD_Display(Key4,7,96,0);
	LCD_DispNums(Sys_Height_Current,0,8,0);
	LCD_DispNums(Sys_Weight_Current,0,72,0);
	LCD_DispNums(Sys_Height_Target,4,72,1);
	//停止本地的工作
	ValveA_Stop();
	ValveB_Stop();
}
void AlarmDelayl(unsigned int dtime) {
	unsigned int itemp;
	
	itemp =dtime;

	P4DIR |= BIT3;
	P4OUT &= ~BIT3;

	LCD_Delayl(itemp);

	P4DIR &= ~BIT3;
}

//---------------------------------------------------------
void InitLEDs(void){
	LED_DIR |= (LED_SDI + LED_SFTCLK + LED_LCHCLK);
	LED_OUT &= ~(LED_SDI + LED_SFTCLK + LED_LCHCLK);
}
void LEDGo(unsigned char displays){
	unsigned char itemp;
	for (itemp=0;itemp<8;itemp++){
		if((displays<<itemp)&BIT7) LED_OUT |= LED_SDI;
		else LED_OUT &= ~LED_SDI;
		LED_OUT &= ~LED_SFTCLK;
		LED_OUT |= LED_SFTCLK;
		LED_OUT &= ~LED_SFTCLK;
	}
	LED_OUT &= ~LED_LCHCLK;
	LED_OUT |= LED_LCHCLK;
	LED_OUT &= ~LED_LCHCLK;
}
//---------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -