📄 test331.c
字号:
#include "weibo0209.h"
uchar status; //status machine start status
uchar digit[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar disp_buff[2],stg_buff[2];
uchar setsection; //设置分段0,1,2,3
uchar coef[4]={0x0a,0x0a,0x0a,0x0a};//校正系数
uchar delay; //蜂鸣器延时
uchar set_power; //功率
uchar timeold,timenow,sec,timeover=0; //时间
uchar settime[2]={0xff,0xff}; //if(settime[0]<=0x0a),则开始进入设置状态
uchar timer1s; //1s定时
uchar coftimeris=31;
uchar powerover=0;
uchar adtimenumber=0,addisp;
uchar Set_TH1,Set_TL1;
uchar adjust_power=0;
uint k;
uchar comp8=1;
main()
{
Ini_sys();
read_parameter();
powerover=0;
while(1)
{
clr_wchdog(); //喂狗
ch451_write(0x403); //开键盘显示
ch451_write(0x500); //设置默认显示方式
//-------------------------------
if(set_power<=6)adjust_power=(float)(set_power)*coef[0]/10;
else if(set_power>6&&set_power<=30)adjust_power=(float)(set_power)*coef[1]/10;
else if(set_power>30&&set_power<=50)adjust_power=(float)(set_power)*coef[2]/10;
else adjust_power=(float)(set_power)*coef[3]/10;
keyprocess(); //键盘处理
delayms(40); //延时10ms
if(status==set){
dispset();
}
else{
disptimpower();
if(timeover){
timeover=0;
beep(1,2);
}
if(powerover){
beep(1,powerover);
powerover=0;
}
}
}
}
void int1()interrupt 2 using 1
{
abnormal();powerover=4;
}
void int0()interrupt 0 using 1 //外部中断0 系统定时器100Hz ,10ms
{
uint n;
TH1=0xd8;TL1=0xf0;
// n=adjust_power*15*2;
// if(delay!=0)delay--; //蜂鸣器
if(coftimeris++>50){
statusmachin(); //检测状态变化
coftimeris=0;
clr_wchdog(); //喂狗
}
if(status==zlstart||status==llstart){
if(adtimenumber++>=10){ //采集100ms
addisp=0;
TR0=0;
k|=TH0;
k<<=8;
k|=TL0;
TL0=0;TH0=0;
TR0=1;
adtimenumber=0;
// if(comp8==9){
// if(k<150){comp8=5;}
// else comp8=0;
// addisp=(uchar)((float)k/7.5);
// }
// else{
// if(k<15){comp8=5;}
// else comp8=0;
// addisp=(uchar)((float)k/1.5);
// }
//
addisp=(uchar)(k/3);
k=0;
// if(addisp>=100){
// abnormal();powerover=5;
// }
//应该试验确定大约多少瓦时确定多少触发时间
// if(addisp>adjust_power){ //实际大于设定,则触发需要后移,延时增加,T1初始值减小
// if(Set_TL1>1+(addisp-adjust_power))
// Set_TL1-=(addisp-adjust_power);
// else{
// if(Set_TH1>0xe4){Set_TL1=0xff;Set_TH1--;}
// else{ //{Set_TH1=0xe4;Set_TL1=0;}
// abnormal(); //触发达到最小,但是采集到的功率还是大,则出错,关闭
// powerover=2;
// }
// }
// }
// else if(addisp<adjust_power){
// if(Set_TL1<0xfe-2*(adjust_power-addisp))
// Set_TL1+=2*(adjust_power-addisp);
// else{
// if(Set_TH1<0xf0){
// Set_TL1=0;
// Set_TH1++;
// }
// else{ //{Set_TL1=0x00;Set_TH1=0xf0;}
// abnormal();//触发达到最大,但是采集到的功率还是不够,则出错,关闭
// powerover=3;
// }
// }
// }
// else{;}
// TH1=Set_TH1;TL1=Set_TL1;
}
}
//---------------处理设置状态的时间
// if(settime[0]<0x0b&&settime[0]>0){
// if(settime[1]>=1)settime[1]--;
// else {
// if(settime[0]>=1){settime[0]--;settime[1]=100;}
// else {settime[0]=0;settime[1]=0;}
// }
// }
}
void keyprocess(void)
{
uchar key=0xff;
if(!pushSW){ //脚踏开关
switch(status){
case llstart: //不是治疗状态,复位为治疗态
case llprepare:{timeold=0;timenow=0;set_power=0;status=zlprepare;}break;
case zlprepare:{ //再次踩脚踏开关,如果条件允许,则开始工作
if(timenow&&set_power)status=zlstart;
else status=zlprepare;
}break;
}
}
key=ch451_read();
key&=0x7f;
switch(key){
case llkeypress:{ //理疗
switch(status){
case zlstart: //不是理疗状态,复位为理疗态
case zlprepare:{timeold=0;timenow=0;set_power=0;status=llprepare;}break;
case llprepare:{//再次按下理疗键,如果条件允许,则开始工作
if(timenow&&set_power)status=llstart;
else status=llprepare;
}break;
}
}
break;
///////////////////////////////////////
case resetkeypress:{ //复位按下
if(status==llstart){timenow=timeold;status=llprepare;}
if(status==zlprepare){ //假如在治疗准备状态下按下复位键,如果没有开始设置
if(settime[0]>0x0a){settime[0]=0x0a;settime[1]=100;} //则设置settime
//-----
if(settime[0]==0x00){ //假如按键时间超过10s
ch451_write(CH451_DIG5|set);
settime[0]=0xff;settime[1]=0xff;
read_parameter();status=set; //转移为设置状态,读参数
}
//---
}
if (status==set){ //假如再设置状态下按下复位健,则返回
if(settime[0]>0x0a){settime[0]=0x0a;settime[1]=100;} //则设置settime
//---
if(settime[0]==0x00){ //假如按键时间超过10s
ch451_write(CH451_DIG5|llprepare);
settime[0]=0xff;settime[1]=0xff;
save_parameter();status=zlprepare; //转移为治疗准备状态,写参数
}
//---
}
}break;
case resetkeyup:{ //复位键抬起
if(settime[0]!=0x00){ //复位键没有按下10s
settime[0]=0xff;settime[1]=0xff;
}
}break;
////////////////////////////////////////////////////////////
case timeaddkeypress:{ //时间加
if(status==set){
if(setsection==3)setsection=0;
else setsection++;
}
else{
if(timenow>=99)timenow=0;
else timenow++;
timeold=timenow;
}
}
break;
case timedeckeypress:{ //时间减
if(status==set){
if(setsection==0)setsection=3;
else setsection--;
}
else{
if(timenow==0)timenow=99;
else timenow--;
timeold=timenow;
}
}
break;
case poweraddkeypress:{ //功率加
if(status==set){
if(coef[setsection]==15)coef[setsection]=6;
else coef[setsection]++;
}
else{
if(status==zlstart||status==zlprepare){
if(set_power>=60)set_power=0;
else set_power++;
}
if(status==llstart||status==llprepare){
if(set_power>=30)set_power=0;
else set_power++;
}
}
}
break;
case powerdeckeypress:{ //功率减
if(status==set){
if(coef[setsection]==6)coef[setsection]=15;
else coef[setsection]--;
}
else{
if(status==zlstart||status==zlprepare){
if(set_power<1)set_power=60;
else set_power--;
}
if(status==llstart||status==llprepare){
if(set_power<1)set_power=30;
else set_power--;
}
}
}
break;
}
if(status==set)dispset();
else disptimpower();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -