📄 main.c
字号:
void SysInit(void)
{
unsigned int iq0;
BCSCTL1 &= ~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for(iq0=0xFF; iq0>0; iq0--); // 延时,等待XT2起振
}
while((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 = SELM_2 + SELS; //选择MCLK为XT2
}
//*****************************************************************************
// 设置波特率程序,参数band为可以选择的波特率的编号
// 默认的波特率为119200bps
//
//*****************************************************************************
void SetBaud(int baud)
{
UCTL0 &= ~SWRST; // Release USART
if((baud & 0X10) == 0X10)
{
baud = 0X05; //9600bps
}
else
{
baud = 0X04; //19200bps
}
ME1 &= ~(UTXE0 + URXE0); // Disable USART operation
ME1 |= UTXE0 + URXE0; // Re-enable USART operation
IE1 |= URXIE0;
UBR00 = BaudRate[baud][0]; // Set configuration for
UBR10 = BaudRate[baud][1]; // new baud rate
UMCTL0 = BaudRate[baud][2];
RXBUF0; // Empty RX buffer and clear flags
}
#pragma vector = PORT1_VECTOR
__interrupt void GetKeyCode(void)
{
_DINT();
//Delay10ms(2);
if((ConflictFlag & LINKSENDFLG) == LINKSENDFLG) //通信过程不允许按键
{
_EINT();
P1IFG = 0X00;
return;
}
if(((P1IFG & P1IFG_6) == P1IFG_6)
||((P1IFG & P1IFG_7) == P1IFG_7)
||((P1IFG & P1IFG_5) == P1IFG_5))
{
count = 0;
for(i =50; i>1; i--)
{
if(((P1IFG & P1IFG_6) == P1IFG_6)
||((P1IFG & P1IFG_7) == P1IFG_7)
||((P1IFG & P1IFG_5) == P1IFG_5))
{
count++;
if(count >= 30)
{
break;
}
}
else
{
count =0;
break;
}
}
}
if(count >= 30) //确认有按键被按下
{
if((P1IFG & P1IFG_6) == P1IFG_6) //Start
{
if((P1IFG & P1IFG_6) == P1IFG_6)
{
// P3OUT &= ~P3OUT_1; //解除异常灯
Flag &= ~SwitchOn; //异常开关关闭
Flag &= ~SwitchOff; //异常开关解除
}
}
if((P1IFG & P1IFG_7) == P1IFG_7) //解除异常灯
{
if((Flag & SwitchOn) == SwitchOn)
ConflictFlag |= NEEDCOMM; //有通信需求
else if((Flag & SwitchOff) == SwitchOff)
ConflictFlag &= ~NEEDCOMM; //无通信需求
Flag |= SwitchOff; //解除开关打开
Flag &= ~SwitchOn;
}
if((P1IFG & P1IFG_5) == P1IFG_5)
{
if((Flag & SwitchOff) == SwitchOff)
ConflictFlag |= NEEDCOMM; //有通信需求
else if((Flag & SwitchOn) == SwitchOn)
ConflictFlag &= ~NEEDCOMM; //无通信需求
Flag |= SwitchOn; //异常开关打开
Flag &= ~SwitchOff;
}
}
P1IFG = 0X00; //P1口标志清零
_EINT();
/*_DINT(); //关闭中断
if((P1IFG & P1IFG_4) == P1IFG_4) //中断触发状态位
{
KeyTemp = P1IN & 0X0F; //获取按键编码
_NOP(); //延迟处理
_NOP();
_NOP();
_NOP();
KeyTemp = P1IN & 0X0F; //再次获取按键信息
if((P1IN & 0X0F) == KeyTemp)
{
Key = KeyTemp; //如果按键和上次的按键相同,确定按键
}
if(((Key == 0X0C) || (Key == 0X08) || (Key == 0X01)
|| (Key == 0X0A) || (Key == 0X06) || (Key == 0X00)
|| (Key == 0X0B))
&& ((Flag & StartFlg) == StartFlg)
&& ((DisplayFlg & ErrFlg) !=ErrFlg)) //0键和1.2键被按下
{
if(Key == 0X0C) //工数设定(0键)
{
Flag |= ResetFlg; //设定状态
Flag &= ~LCJ;
Flag &= ~RUNFlg;
if((DisplayFlg & ChangeWorkFlg) !=ChangeWorkFlg)
DisplayFlg = DShrinkFlg; //闪烁状态
else
{
DisplayFlg = DShrinkFlg;
DisplayFlg |= ChangeWorkFlg;
}
DisplayFlg |= NumSetFlg; //工数设
ConvertData(Number);
}
else if(Key == 0X08) //计划设定 (1键)
{
Flag |= ResetFlg; //设置状态
Flag &= ~LCJ;
Flag &= ~RUNFlg;
if((DisplayFlg & ChangeWorkFlg) !=ChangeWorkFlg)
DisplayFlg = DShrinkFlg; //闪烁状态
else
{
DisplayFlg = DShrinkFlg;
DisplayFlg |= ChangeWorkFlg;
}
DisplayFlg |= PlanSetFlg; //计划设定
ConvertData(Plan);
}
else if(Key == 0X01) //按键2 时钟设定
{
Flag |= ResetFlg; //设置状态
Flag &= ~LCJ;
Flag &= ~RUNFlg;
if((DisplayFlg & ChangeWorkFlg) !=ChangeWorkFlg)
DisplayFlg = DShrinkFlg; //闪烁状态
else
{
DisplayFlg = DShrinkFlg;
DisplayFlg |= ChangeWorkFlg;
}
DisplayFlg |= ClockSetFlg; //计划设定
temp = Hour*100+Min;
ConvertData(temp);
}
else if(Key == 0X0A) //按键3 本机地址设定
{
Flag |= ResetFlg; //设置状态
Flag &= ~LCJ;
Flag &= ~RUNFlg;
if((DisplayFlg & ChangeWorkFlg) !=ChangeWorkFlg)
DisplayFlg = DShrinkFlg; //闪烁状态
else
{
DisplayFlg = DShrinkFlg;
DisplayFlg |= ChangeWorkFlg;
}
DisplayFlg |= AddressSetFlg; //计划设定
ConvertData(SelfAddress);
}
else if(Key == 0X06) //第一班时间设定
{
Flag |= ResetFlg; //设置状态
Flag &= ~LCJ; //非启动状态
Flag &= ~RUNFlg; //非运状态行
if((DisplayFlg & ChangeWorkFlg) !=ChangeWorkFlg)
DisplayFlg = DShrinkFlg; //闪烁状态
else
{
DisplayFlg = DShrinkFlg;
DisplayFlg |= ChangeWorkFlg;
}
if((TimeSec1[0][0] <= 2359) && (ScaleClock != -1))
{
DisplayFlg |= TimeIndexFlg; //时间段检索标志
DisplayFlg |= CheckTimeFlg; //时间段索引状态
DisplayFlg &= ~DShrSetFlg; //第二行非闪烁状态
DisplayFlg |= DShrinkFlg; //第一行闪烁状态
DisplayFlg |= TimeFirstFlg; //时间段索引第一次标志
}
else
{
DisplayFlg &= ~CheckTimeFlg; //非时间段检查确认状态
DisplayFlg &= ~TimeFirstFlg;
DisplayFlg &= ~TimeIndexFlg;
}
DisplayFlg |= TimeSection1SetFlg; //时间段1设置状态
DisplayFlg &= ~TimeSection2SetFlg; //非时间段2设置状态
TimeSectionIndex =0; //时间段设置的索引
Index =0; //时间段查询的索引
SearchIndex = 0; //时间段检索的索引
Counter = 0; //记数
ConvertCode =0; //当前设定值
}
else if(Key == 0X00) //第二班时间设定
{
Flag |= ResetFlg; //设置状态
Flag &= ~LCJ; //非启动状态
Flag &= ~RUNFlg; //非运行状态
if((DisplayFlg & ChangeWorkFlg) !=ChangeWorkFlg)
DisplayFlg = DShrinkFlg; //闪烁状态
else
{
DisplayFlg = DShrinkFlg;
DisplayFlg |= ChangeWorkFlg;
}
if((TimeSec2[0][0] <= 2359) && (ScaleClock != -1))
{
DisplayFlg |= TimeIndexFlg; //时间段检索标志
DisplayFlg |= CheckTimeFlg; //时间段索引状态
DisplayFlg &= ~DShrSetFlg; //第二行非闪烁状态
DisplayFlg |= DShrinkFlg; //第一行闪烁状态
DisplayFlg |= TimeFirstFlg; //时间段索引第一次标志
}
else
{
DisplayFlg &= ~CheckTimeFlg; //非时间段检查确认状态
DisplayFlg &= ~TimeFirstFlg;
DisplayFlg &= ~TimeIndexFlg;
}
DisplayFlg |= TimeSection2SetFlg; //时间段2的设定状态
DisplayFlg &= ~TimeSection1SetFlg; //非时间段1的设定状态
TimeSectionIndex =0;
Index =0;
SearchIndex = 0;
Counter = 0;
ConvertCode =0;
}
TimerCount =0; //时钟定时量
DisplayFlg &= ~FirstFlg; //非第一次标志状态
DisplayFlg &= ~StartShrinkFlg; //非启动闪烁状态、
Flag &= ~StartFlg; //非设定状态
}
else if((Flag & ResetFlg) == ResetFlg) //在设定状态下,进行数据输入
{
if((Key == 0X0B)) //按键CLR清除设定数据
{
if(((DisplayFlg & TimeSection1SetFlg) == TimeSection1SetFlg))
{
for(Counter =0; Counter<25; Counter++)
{
if(Counter<9)
{
TimeSec2[Counter][0] =8888; //时间段1的清零操作
TimeSec2[Counter][1] =8888;
}
TimeSec1[Counter][0] = 8888;
TimeSec1[Counter][1] = 8888;
ScaleClock = -1;
Key = 0X0E ; //进入取消操作处理
}
}
else if((DisplayFlg & TimeSection2SetFlg) == TimeSection2SetFlg)
{
for(Counter =0; Counter<9; Counter++)
{
TimeSec2[Counter][0] = 8888; //时间段2的清零操作
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -