📄 check.c
字号:
#include "check.h"
#include "function.h"
#include "24C16.h"
#include "LM3S_I2CM.h"
#include "tmp101.h"
bool Buzzer_Flag = 0; //蜂鸣器标志位
bool Show = 1;
/***************************************************
函数名:Self_checking()
功能: 系统自检
参数:
说明:
返回值:0 系统自检结果正常 、 1~N 系统自检异常
****************************************************/
char Self_checking(void)
{
unsigned char Check_result = 0;
unsigned char i = 0;
unsigned long ZLG7290_Check = 0xAA;
char EE24C16_Check = 0;
GPIO_L(LED1);GPIO_L(LED2);GPIO_L(LED3);GPIO_L(LED4); //点亮控制板上的4个LED
//Buzzer_Runing(); //打开蜂鸣器
TimerLoadSet(TIMER0_BASE , TIMER_A , 30000UL); //设置定时器初值 定时1s
TimerEnable(TIMER0_BASE , TIMER_A); //使能Timer0A
Buzzer_Flag = 1; //蜂鸣器标志 可以进入定时器中相应的if部分*/
//数码管7290自检
ZLG7290_Check = ZLG7290_Download_One(ZLG7290_DpRam+1,1,0,8);
if(ZLG7290_Check!=I2C_MASTER_ERR_NONE)
{
Error_Table[Check_Error_Flag++] = 34;
Check_result = 1;
}
//LED和按键7290自检
ZLG7290_Check = ZLG7290_Download(ZLG7290_DpRam+1,1,0,8);
if(ZLG7290_Check!=I2C_MASTER_ERR_NONE)
{
Error_Deal(35);
Check_result = 1;
}
//数码管自检成功点亮所有的数码管
for(i=0;i<6;i++)
{
ZLG7290_Download_Display(ZLG7290_DpRam+i,1,0,8);
} //点亮所有的LED
for(i=0;i<6;i++)
{
ZLG7290_Download(ZLG7290_DpRam+i,1,0,8);
Delay(100);
}
//自检pwm板的通信
/*GPIO_L(CON_4851); //使能485发送数据
SendData_USART0(0xA1,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01
);//发送自检命令
Delay(120000); //等待数据发送完毕 20ms
GPIO_H(CON_4851);
TimerLoadSet(TIMER2_BASE , TIMER_A , 30000UL); // 设置定时器初值 定时1s
TimerEnable(TIMER2_BASE , TIMER_A); // 使能Timer2A
while(!Timer2AFlag);//等待定时时间到
Timer2AFlag = 0;
TimerDisable(TIMER2_BASE,TIMER_A); //关闭定时器2A
if((Uart1Buf[0]!=0xA3)||(Uart1Buf[1]!=0x55)||(Uart1Buf[2]!=0xAA))
{
Error_Deal(36);
Check_result = 1;
}*/
//自检EEPROM
WriteByteToEEPROM(5,0x02);
Delay(0xfffff);
EE24C16_Check = ReadByteFromEEPROM(5);
if(EE24C16_Check!=0x02)
{
Error_Deal(37);
Check_result = 1;
}
//温度自检
//tmp101_ReadReg(0x00, TMp101_buf);//采集温度 TMp101_buf[0]是温度整数部分
tmp101_ReadReg(0x00, TMp101_buf);//采集温度 TMp101_buf[0]是温度整数部分
if(TMp101_buf[0] > 40)
{
Error_Deal(38);
Check_result = 1;
}
//模拟参数采集自检
ADC_Caiji();
ADC_Caiji();
if(ADC_AI_Data > 2000)
{
Error_Deal(39);
Check_result = 1;
}
if(ADC_UI_Data > 2000)
{
Error_Deal(40);
Check_result = 1;
}
if(Check_result)
{
ClearAll_LED(0,3); //清除所有LED
Display(5,0,0);//显示错误代码初始值
}
return Check_result;
}
/***************************************************
函数名:Error_Display()
功能:
参数:
说明: 显示错误信息
返回值:无
****************************************************/
void Error_Display(void)
{
if(Key_Left)
{
Display_Parameter(Left_Move); //进入参数查看
Show = 1;
}
else if(Key_Right)
{
Display_Parameter(Right_Move); //进入参数查看
Show = 1;
}
else
{
Show = 0;
}
if(Show==1)
{
Display(5,0,0);//显示错误代码
}
}
/***************************************************
函数名:Error_Deal
功能:
参数:
说明: 错误信息处理函数
返回值:无
****************************************************/
void Error_Deal(unsigned char Error_Data)
{
unsigned char i = 0;
if(Check_Error_Flag==10)//10个错误代码 存放栈已满
{
for(i=0;i<9;i++)//错误信息在数组里面 往前移动一位
{
Error_Table[i] = Error_Table[i+1];
}
Error_Table[i+1] = Error_Data;
}
else
{
Error_Table[Check_Error_Flag++] = Error_Data;
}
}
/*********************************************
功能:蜂鸣器初始化
参数:无
返回:无
***********************************************/
void BuzzerInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB); // 使能GPIOB端口
GPIOPinTypeOut(GPIO_PORTB_BASE , GPIO_PIN_1); // 设置PB1输入类型
GPIOPinWrite(GPIO_PORTB_BASE , GPIO_PIN_1 , 0x01 << 1); // 更新PB1的输出状态 高
}
//蜂鸣器运行函数
void Buzzer_Runing(void)
{
GPIOPinWrite(GPIO_PORTB_BASE , GPIO_PIN_1 , 0X00 << 1); //PB1的输出低
}
//停止蜂鸣器函数
void Buzzer_Stop(void)
{
GPIOPinWrite(GPIO_PORTB_BASE , GPIO_PIN_1 , 0X01 << 1); //更新PB1的输出高
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -