www.pudn.com > cytd0328.rar > cytd0328.c
#include#include #include #include /*adc0809*/ sbit P3_3_EOC = P3^3; sbit P3_4_STR = P3^4; sbit P3_5_OE = P3^5; sbit P3_6_ALE = P3^6; sbit P3_7_ADDR = P3^7; /*状态开关*/ sbit P3_2_STAT = P3^2; /*看门狗*/ sbit P1_6_DOG = P1^6; /*报警控制*/ sbit P1_7_POWER = P1^7; unsigned char count=0; unsigned char count_but=1; unsigned char flag=0; /*按钮标志*/ unsigned char flag_alarm=0; unsigned char step_dis=1; /*显示步聚*/ unsigned char temp,power; unsigned char disp_buff[6]; unsigned int power_val,temp_val; unsigned char delay_time; unsigned char count_alarm=0; unsigned char value; code unsigned char CGTAB[11]={0x39,0x6e,0x6e,0x76,0x40,0x7d,0x71,0x06,0x4f,0x06,0x3f};/*CYYH-6F1310*/ code unsigned char POW[3]={0x73,0x40,0x40};/*P--*/ code unsigned char TEM[3]={0x78,0x40,0x40};/*T--*/ code unsigned char ALARM[6]={0x00,0x40,0x77,0x38,0x40,0x00};/*-AL-*/ code unsigned char NUMB[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f}; /*喂狗*/ void dog(void) { unsigned char i; P1_6_DOG=1; for (i=0;i<100;i++) { } P1_6_DOG=0; } /***********/ void delay(m) { while(m--); } /*0809 操作*/ void adc0809(void) { unsigned i; P3_7_ADDR=0; /*选择通道0*/ P3_6_ALE = 1; /*地址锁存*/ P3_6_ALE=0; P3_4_STR = 1; /*AD转换启动*/ P3_4_STR=0; for(i=0;i<50;i++) /*延时8个周期*/ { } while (!P3_3_EOC) /*等待AD转换完成*/ { } P3_5_OE=1;/*允许输出*/ power=P0;/*保存功率值*/ P3_5_OE=0; P3_7_ADDR=1;/*选择通道1*/ P3_6_ALE=1;/*地址锁存*/ P3_6_ALE=0; P3_4_STR=1;/*AD转换启动*/ P3_4_STR=0; for(i=0;i<50;i++) {};/*延时8个周期*/ while (!P3_3_EOC) { }; /*等待AD转换完成*/ P3_5_OE=1;/*允许输出*/ temp=P0;/*保存温度值*/ P3_5_OE=0; } /*VFD显示扫描*/ void display(void) { //unsigned int i; P2=disp_buff[0]; P1_0=1; delay(20); P1_0=0; delay(20); P2=disp_buff[1]; P1_1=1; delay(20); P1_1=0; delay(20); P2=disp_buff[2]; P1_2=1; delay(20); P1_2=0; delay(20); P2=disp_buff[3]; P1_3=1; delay(20); P1_3=0; delay(20); P2=disp_buff[4]; P1_4=1; delay(20); P1_4=0; delay(20); P2=disp_buff[5]; P1_5=1; delay(20); P1_5=0; delay(20); } void system_int(void) { unsigned int i; P3 = 0x0f; P2 = 0xff; P0 = 0xff; P1 = 0x80;/*声音提示*/ for (i=0;i<120;i++) { dog(); delay(10); } P1_7_POWER=0; for (i=0;i<500;i++) { dog(); delay(10); } IT0 = 1; // Configure interrupt 0 for falling edge on /INT0 (P3.2) EX0 = 1; // Enable EX0 Interrupt TMOD = 0x11; TH0 = 0xec; /* 15ms */ TL0 =0x77; TR0 = 1; ET0 = 1; TH1 = 0x3c; /* 0.1s */ TL1 = 0xb0; TR1 = 1; /* Start Timer 1 Running */ ET1 = 1; /* Enable Timer 1 Interrupts */ EA = 1; /* Global Interrupt Enable */ } /******************************/ void main() { system_int(); while(1) { dog(); adc0809(); if (power<5) { power_val=0; } else if(power>=200) { power_val=405-power; } else { power_val=210+(200-power)*12; } temp_val=(temp-34)*0.2+247; dog(); if ((temp_val>350)||(power_val>=250)) { count_alarm++; if (count_alarm>5) { P1_7_POWER=1; disp_buff[0]=ALARM[0]; disp_buff[1]=ALARM[1]; disp_buff[2]=ALARM[2]; disp_buff[3]=ALARM[3]; disp_buff[4]=ALARM[4]; disp_buff[5]=ALARM[5]; while(1) { dog(); delay(10); flag_alarm=1; } } } else { count_alarm=0; } if (flag) { while(delay_time<100) { //adc0809(); if (power<5) { power_val=0; } else if(power>=200) { power_val=405-power; } else { power_val=210+(200-power)*12; } temp_val=(temp-34)*0.2+247; switch(count_but) { case 1: { disp_buff[0]=POW[0]; disp_buff[1]=POW[1]; disp_buff[2]=POW[2]; value=power_val/100; disp_buff[3]=NUMB[value]; power_val%=100; value=power_val/10; disp_buff[4]=NUMB[value]|0x80; power_val%=10; value=power_val; disp_buff[5]=NUMB[value]; } break; case 2: { disp_buff[0]=TEM[0]; disp_buff[1]=TEM[1]; disp_buff[2]=TEM[2]; value=temp_val/100; disp_buff[3]=NUMB[value]; temp_val%=100; value=temp_val/10; disp_buff[4]=NUMB[value]|0x80; temp_val%=10; value=temp_val; disp_buff[5]=NUMB[value]; } break; case 3: { flag=0; count_but=1; delay_time=101; step_dis=1; } break; default: { flag=0; count_but=1; delay_time=101; step_dis=1; } break; } dog(); } flag=0; count_but=1; step_dis=1; } } } /*外部中断0*/ void service_int0() interrupt 0 { unsigned int i; for (i=0;i<50;i++) { } if (~P3_2_STAT) { if (flag) { count_but++; delay_time=0; if (count_but>=3) { count_but=3; } } else { flag=1; count_but=1; delay_time=0; } } } /*定时器0中断*/ void service_timer0() interrupt 1 { TH0 = 0xec; /* 15ms */ TL0 =0x77; display(); } /*定时器1中断*/ void timer1_ISR() interrupt 3 { TH1 = 0x3c; /* 0.1s */ TL1 = 0xb0; delay_time++; if (flag==0) { if (flag_alarm==0) { //ET0 = 0; count++; if (count>=10) { count=0; switch (step_dis) { case 1: { disp_buff[0]=0x00; disp_buff[1]=0x00; disp_buff[2]=0x00; disp_buff[3]=0x00; disp_buff[4]=0x00; disp_buff[5]=0x00; step_dis++; } break; case 2: { disp_buff[0]=0x00; disp_buff[1]=0x00; disp_buff[2]=0x00; disp_buff[3]=0x00; disp_buff[4]=0x00; disp_buff[5]=CGTAB[0]; step_dis++; } break; case 3: { disp_buff[0]=0x00; disp_buff[1]=0x00; disp_buff[2]=0x00; disp_buff[3]=0x00; disp_buff[4]=CGTAB[0]; disp_buff[5]=CGTAB[1]; step_dis++; } break; case 4: { disp_buff[0]=0x00; disp_buff[1]=0x00; disp_buff[2]=0x00; disp_buff[3]=CGTAB[0]; disp_buff[4]=CGTAB[1]; disp_buff[5]=CGTAB[2]; step_dis++; } break; case 5: { disp_buff[0]=0x00; disp_buff[1]=0x00; disp_buff[2]=CGTAB[0]; disp_buff[3]=CGTAB[1]; disp_buff[4]=CGTAB[2]; disp_buff[5]=CGTAB[3]; step_dis++; } break; case 6: { disp_buff[0]=0x00; disp_buff[1]=CGTAB[0]; disp_buff[2]=CGTAB[1]; disp_buff[3]=CGTAB[2]; disp_buff[4]=CGTAB[3]; disp_buff[5]=CGTAB[4]; step_dis++; } break; case 7: { disp_buff[0]=CGTAB[0]; disp_buff[1]=CGTAB[1]; disp_buff[2]=CGTAB[2]; disp_buff[3]=CGTAB[3]; disp_buff[4]=CGTAB[4]; disp_buff[5]=CGTAB[5]; step_dis++; } break; case 8: { disp_buff[0]=CGTAB[1]; disp_buff[1]=CGTAB[2]; disp_buff[2]=CGTAB[3]; disp_buff[3]=CGTAB[4]; disp_buff[4]=CGTAB[5]; disp_buff[5]=CGTAB[6]; step_dis++; } break; case 9: { disp_buff[0]=CGTAB[2]; disp_buff[1]=CGTAB[3]; disp_buff[2]=CGTAB[4]; disp_buff[3]=CGTAB[5]; disp_buff[4]=CGTAB[6]; disp_buff[5]=CGTAB[7]; step_dis++; } break; case 10: { disp_buff[0]=CGTAB[3]; disp_buff[1]=CGTAB[4]; disp_buff[2]=CGTAB[5]; disp_buff[3]=CGTAB[6]; disp_buff[4]=CGTAB[7]; disp_buff[5]=CGTAB[8]; step_dis++; } break; case 11: { disp_buff[0]=CGTAB[4]; disp_buff[1]=CGTAB[5]; disp_buff[2]=CGTAB[6]; disp_buff[3]=CGTAB[7]; disp_buff[4]=CGTAB[8]; disp_buff[5]=CGTAB[9]; step_dis++; } break; case 12: { disp_buff[0]=CGTAB[5]; disp_buff[1]=CGTAB[6]; disp_buff[2]=CGTAB[7]; disp_buff[3]=CGTAB[8]; disp_buff[4]=CGTAB[9]; disp_buff[5]=CGTAB[10]; step_dis++; } break; case 13: { disp_buff[0]=CGTAB[6]; disp_buff[1]=CGTAB[7]; disp_buff[2]=CGTAB[8]; disp_buff[3]=CGTAB[9]; disp_buff[4]=CGTAB[10]; disp_buff[5]=0x00; step_dis++; } break; case 14: { disp_buff[0]=CGTAB[7]; disp_buff[1]=CGTAB[8]; disp_buff[2]=CGTAB[9]; disp_buff[3]=CGTAB[10]; disp_buff[4]=0x00; disp_buff[5]=0x00; step_dis++; } break; case 15: { disp_buff[0]=CGTAB[8]; disp_buff[1]=CGTAB[9]; disp_buff[2]=CGTAB[10]; disp_buff[3]=0x00; disp_buff[4]=0x00; disp_buff[5]=0x00; step_dis++; } break; case 16: { disp_buff[0]=CGTAB[9]; disp_buff[1]=CGTAB[10]; disp_buff[2]=0x00; disp_buff[3]=0x00; disp_buff[4]=0x00; disp_buff[5]=0x00; step_dis++; } break; case 17: { disp_buff[0]=CGTAB[10]; disp_buff[1]=0x00; disp_buff[2]=0x00; disp_buff[3]=0x00; disp_buff[4]=0x00; disp_buff[5]=0x00; step_dis=1; } break; default: { step_dis++; } } } //ET0 = 1; } } }