📄 master.c
字号:
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 + -