📄 ceshi1.c
字号:
i=jx_cs_cn+jx_cs_cn+jx_cs_cn+jx_cs_cn;
led_show_list[0]=encoder[jx_cs_list[i+3]];
led_show_list[1]=encoder[jx_cs_list[i+2]];
led_show_list[2]=encoder[jx_cs_list[i+1]];
led_show_list[3]=encoder[jx_cs_list[i]];
led_show_list[4]=0x00;
led_show_list[5]=0x00;
led_show_flag='S';
current_type='J'; //当前待测表为机械表
//lamp_cs=0; //常数指示灯
//lamp_wc=1; //误差指示灯
}
if(an_start_cn >= 5 )
{
key_time=200;
if(an_start_flag!='D')
{ an_start_flag='D';
check_step=0x00;
flash_flag='F';
}
else
{ an_start_flag=0x00;
flash_flag=0x00;lamp_cs=0;
}
//lamp_cs=1; //常数指示灯
//lamp_wc=0; //误差指示灯
}
}
/**************************************************************************************
*
* FUNCTION: do_pulse
*
* DESCRIPTION: 脉冲计数
*
* PARAMETERS: none
*
* RETURNED: none
*
*************************************************************************************/
void do_pulse(void)
{
if(check_pulse=='C')
{
if(pulse_bz_flag=='M')
{
pulse_bz_flag=0x00;
pulse_bz_cn++;
}
if(pulse_dz_flag=='M')
{
pulse_dz_flag=0x00;
pulse_dz_cn++;
}
if(pulse_jx_flag=='M')
{
pulse_jx_flag=0x00;
pulse_jx_cn++;
}
}
}
/**************************************************************************************
*
* FUNCTION: wc_over
*
* DESCRIPTION: 误差溢出数码管显示'E'.
*
* PARAMETERS: none
*
* RETURNED: none
*
*************************************************************************************/
void wc_over(void) //
{
led_show_list[0]=0x79;
led_show_list[1]=0x0;
led_show_list[2]=0x0;
led_show_list[3]=0x0;
led_show_list[4]=0x0;
led_show_list[5]=0x0;
led_show_flag='S';
}
/**************************************************************************************
*
* FUNCTION: wc_show
*
* DESCRIPTION: 以BCD码方式显示误差值.
*
* PARAMETERS: none
*
* RETURNED: none
*
*************************************************************************************/
void wc_show(uint m) //
{
uint i,j;
for(i=0;i<4;i++)
{ m*=10;
j=m/pulse_bz_cn;
led_show_list[3-i]= encoder[j];
m%=pulse_bz_cn;
}
led_show_list[2]+=0x80; //显示小数点.
if(sign_flag=='-')
{
led_show_list[4]=0x40; //显示'-'号
}
else
{
led_show_list[4]=0x00;
}
led_show_list[5]=0x00;
led_show_flag='S';
}
/**************************************************************************************
*
* FUNCTION: do_check
*
* DESCRIPTION: 处理检表开始
*
* PARAMETERS: none
*
* RETURNED: none
*
*************************************************************************************/
void do_check(void)
{ uint i;
if(an_start_flag=='D')
{
if(check_step==0)
{
check_step=1;
relay=1; //闭合继电器
pulse_bz_cn=0x00;
pulse_dz_cn=0x00;
pulse_jx_cn=0x00;
pulse_bz_flag=0x00;
pulse_dz_flag=0x00;
pulse_jx_flag=0x00;
check_pulse='C'; //可以判断有无脉冲
check_time=4000; //20秒
error=0; //出错
}
else
if(check_step==1)
{
if((check_time < 3000)&(pulse_bz_cn<5)) //5秒之内脉冲太少
{ lamp_cs=0;
an_start_flag=0x00;
error='E';
check_pulse=0x00;
flash_flag=0x00; //停止闪烁
}
else
if((check_time==0)|(pulse_bz_cn>=3200))
{
check_step=2;
check_pulse=0x00;
flash_flag=0x00; //停止闪烁
}
}
else
if(check_step==2)
{
an_start_flag=0x00;
check_step=3;
if(pulse_dz_cn<pulse_bz_cn)
{
sign_flag='-';
i=pulse_bz_cn-pulse_dz_cn;
}
else
{
sign_flag='+';
i=pulse_dz_cn-pulse_bz_cn;
}
if((i/pulse_bz_cn)>=1)
{wc_over(); //误差过大,数码管显示'E'
}
else
{ wc_show(i); //显示误差
}
}
}
}
void do_error(void)
{
if(error=='E')
{
error=0;
led_show_list[0]=0x40;
led_show_list[1]=0x40;
led_show_list[2]=0x00;
led_show_list[3]=0x40;
led_show_list[4]=0x40;
led_show_list[5]=0x00;
led_show_flag='S';
}
}
/**************************************************************************************
*
* FUNCTION: do_flash
*
* DESCRIPTION: 检测状态时数码管显示特殊符号
*
* PARAMETERS: none
*
* RETURNED: none
*
*************************************************************************************/
void do_flash(void)
{
uchar i;
if((flash_flag=='F')&(flash_ok=='F'))
{ //flash_flag=0;
flash_ok=0;
flash_cn++;
if(flash_cn>=6)
{flash_cn=0;}
if(flash_cn ==0)
{i=0x01;}
if(flash_cn==1)
{i=0x02;}
if(flash_cn==2)
{i=0x04;}
if(flash_cn==3)
{i=0x08;}
if(flash_cn==4)
{i=0x10;}
if(flash_cn==5)
{i=0x20;}
led_show_list[5]=i;
led_show_flag='S';
}
}
/**************************************************************************************
*
* FUNCTION: led_display
*
* DESCRIPTION: 数码管显示处理
*
* PARAMETERS: none
*
* RETURNED: none
*
*************************************************************************************/
void led_display(void)
{
if(led_show_flag=='S')
{
if((led_show_list[5]==0X3F)|(led_show_list[5]==0X00)) //消零
{
led_show_list[5]=0;
if((led_show_list[4]==0X3F)|(led_show_list[4]==0X00))
{
led_show_list[4]=0;
if((led_show_list[3]==0X3F)|(led_show_list[3]==0X00))
{
led_show_list[3]=0;
if((led_show_list[2]==0X3F)|(led_show_list[2]==0X00))
{
led_show_list[2]=0;
if((led_show_list[1]==0X3F)|(led_show_list[1]==0X00))
{
led_show_list[1]=0;
}
}
}
}
}
EXT_ADR=0x10;
EXT_DAT=led_show_list[0];
EXT_ADR=0x11;
EXT_DAT=led_show_list[1];
EXT_ADR=0x12;
EXT_DAT=led_show_list[2];
EXT_ADR=0x13;
EXT_DAT=led_show_list[3];
EXT_ADR=0x14;
EXT_DAT=led_show_list[4];
EXT_ADR=0x15;
EXT_DAT=led_show_list[5];
}
}
/**************************************************************************************
*
* FUNCTION: main
*
* DESCRIPTION: 主程序
*
* PARAMETERS: none
*
* RETURNED: none
*
*************************************************************************************/
void main(void)
{
uchar i;
uchar j;
uchar k;
beep=0;
relay=0;
lamp_cs=0;
lamp_wc=0;
for(i=0; i<10; i++) // 上电延时,等待电压稳定
{
WDT_RST=0xa1; // 清看门狗
for(j=0;j<255;j++);
}
initsys(); //初始化系统
led_dis_test(); //数码管显示测试程序
for(i=0; i<28; i++) //延时等候显示检测
{
for(j=0;j<200;j++)
{
WDT_RST=0xa1;
for(k=0; k<200; k++);
}
}
lamp_cs=1;
lamp_wc=1;
led_dis_clr();//数码管显示清屏程序
led_dis_hello();//显示HELLO
while(1)
{
watchdog_reset=0x9a; //喂狗标志
initsys_ref(); //冗余初始化
do_key(); //按键处理,判断哪个按键按下了
do_check(); //处理检表开始
do_pulse(); //检查脉冲
do_error(); //错误处理
do_flash(); //处理灯闪烁
led_display(); //显示处理
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -