?? cytd0328.c
字號:
#include <AT89X51.h>
#include <math.h>
#include <absacc.h>
#include <string.h>
/*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;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -