西南科技大学高等教育自学考试毕业论文
void delayms(unsigned int ms); unsigned char GetKeyboardVal();
volatile unsigned int timecount,settimecounter;
volatile unsigned char timesecond,ctrlcount,Flag,settime; unsigned char code
LED_tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; main() {
unsigned char key; Relay_0=1; Flag=START; settime=15;
Time2_xkHz_inital(); delayms(2000);
frequent_test_inital(); timesecond=0; while(1) {
if(Flag==RUNNING) {//显示 }
else if(Flag==SETINGTIME) { }
key=GetKeyboardVal(); switch(key) {
case 1: {
if(Flag!=RUNNING) {
if(settime>0)settime--;
LED_all_print(settime); LED_all_print(timesecond);
26
西南科技大学高等教育自学考试毕业论文
settimecounter=0; Flag=SETINGTIME;
}
break;
}
case 2: { if(Flag!=RUNNING) { if(settime<30)settime++; settimecounter=0; Flag=SETINGTIME;
} break;
}
}
}
}
void T1_interrupt() interrupt 3 using 2 {
unsigned int fre_count; TF1=0; TR1=0; TR0=0;
if(Flag==RUNNING) { timecount++; if(timecount==100) { timecount=0; timesecond--; if(timesecond==0)
{
27
//定时器1中断程序
西南科技大学高等教育自学考试毕业论文
}
}
}
//停止吹风 Relay_0=1; Flag=STOP;
else if(Flag==INVERIFY) {
if(ctrlcount<200) { }
Flag=HAVE_INVERIFY; ctrlcount++; if(ctrlcount==200)
}
if(Flag==SETINGTIME) { } else {
fre_count=(256*TH0+TL0); //TH0和TL0为得到的计数值高位和低位。计算出频率
if((fre_count>=FREQUENT_MIN)&&(fre_count<=FREQUENT_MAX)) //如果有
接收频率符合发射频率,说明有物体
if(fre_count>=FREQUENT_MIN) {
if(Flag==START) {
settimecounter++; if(settimecounter==200) {
Flag=START;
}
28
西南科技大学高等教育自学考试毕业论文
}
}
}
ctrlcount=140; Flag=INVERIFY;
else if(Flag==HAVE_INVERIFY) {
//开吹风 Relay_0=0; Flag=RUNNING;
Start_timing(settime);//开始倒计时15秒
}
else { }
//清除频率计数值 if(ctrlcount==0) { } else { }
ctrlcount--; //停止吹风 Relay_0=1; Flag=START; Stop_timing();
TH0=0; TL0=0;
TH1=TIMER_H; //重装定时器1 TL1=TIMER_L;
TR1=1; TR0=1;
//开定时器
29
西南科技大学高等教育自学考试毕业论文
}
void Time2_xkHz_inital() {
T2MOD=0x02; //设置定时器2自动外部输出,输出脚一定是P1^0 T2CON=0;
RCAP2H=RCAP2_H; RCAP2L=RCAP2_L; EA=1;
ET2=0; //关T2中断 TR2=1; }
void frequent_test_inital() //初始化 {
TMOD = 0x15; //T0计时
TH0 = 0;
TL0 = 0; //值
TH1=TIMER_H; TL1=TIMER_L;
EA = 1; // TR0 = 1; // TR1 = 1; // ET1 = 1; //}
void Start_timing(unsigned char settime) {
timecount=0;
30
红外接收T0计数,T1清空T0计数开总中断 开定时0 开定时1 开T1中断 西南科技大学高等教育自学考试毕业论文
timesecond=settime; }
void LED_bit_print(unsigned char num,unsigned char printdata) {
switch(num) { }
LEDPORT=LED_tab[printdata]; delayms(2); LED_0=1; LED_1=1; }
void LED_all_print(unsigned char printdata) {
printdata%=100;
LED_bit_print(0,printdata/10);
LED_bit_print(1,printdata); }
//个位 //十位
case 0:{LED_0=0;LED_1=1;}break; case 1:{LED_0=1;LED_1=0;}break;
31