?? e2prom.c
字號:
#include "reg52.h"
#include "a7279.h"
#include "ds18b20_3p.h"
#include "e2p.h"
unsigned char count_10s=0,sw=0;
unsigned char temp[3],wei,set_temp,n=10,count,addr;
unsigned int address=0;
void write_e2p_3times(unsigned char addre,unsigned char av0,unsigned char av1,unsigned char av2);
void comp(void);
sbit PWM0 = P0^0 ;
sbit PWM1 = P0^1 ;//電機
sbit PWM2 = P0^2 ;//電扇
void main()
{
TMOD=0X11;
// IT1=1;
// EX1=1;
ET1=1;
TH1 =0xfc;
TL1 =0x18;
ET0=1;
EX1=1;
IT1=1;
EA=1;
TH0=0x3c;
TL0=0xaf;
TR0=1;
TR1=1;
while(1)
{
comp() ;
}
}
void delay_1s() interrupt 1
{ unsigned int ep_av0[6],ep_av1[6],ep_av2[6],av0,av1,av2,i;
TR0=0;
TH0=0x3c;
TL0=0xaf;
TR0=1;
if(++count_10s==200)
{
count_10s=0;
ce_temp0();
ce_temp1();
ce_temp2();
ep_av1[i]=tempu[0]+tempu[1]*10+tempu[2]*100;
ep_av1[i]=tempu[3]+tempu[4]*10+tempu[5]*100;
ep_av1[i]=tempu[6]+tempu[7]*10+tempu[8]*100;
if(i==5)
{
av0=(ep_av0[0]+ep_av0[1]+ep_av0[2]+ep_av0[3]+ep_av0[4]+ep_av0[5])/6;
av1=(ep_av1[0]+ep_av1[1]+ep_av1[2]+ep_av1[3]+ep_av1[4]+ep_av1[5])/6;
av2=(ep_av2[0]+ep_av2[1]+ep_av2[2]+ep_av2[3]+ep_av2[4]+ep_av2[5])/6;
write_e2p_3times(addr,av0,av1,av2);
}
i=++i%6;
// write_e2p_4times(address,,,)
switch(sw)
{
case 0: write7279(0x87,tempu[0]);
write7279(0x86,tempu[1]+0x80);
write7279(0x85,tempu[2]);
write7279(0x80,0); break;
case 1:write7279(0x87,tempu[3]);
write7279(0x86,tempu[4]+0x80);
write7279(0x85,tempu[5]);
write7279(0x80,1); break;
case 2: write7279(0x87,tempu[6]);
write7279(0x86,tempu[7]+0x80);
write7279(0x85,tempu[8]);
write7279(0x80,2);break;
case 3:write7279(0x85,temp[0]);
write7279(0x86,temp[1]+0x80);
write7279(0x87,temp[2]);
write7279(0x80,3); break;
}
}
}
void key0() interrupt 2
{
unsigned char keynumb;
static char sig=0;
keynumb=read7279(0x15);
if(set_temp)
{
sw=3;
if(keynumb==0x13)
{ set_temp=0;
write7279(0x88,0xff); }
else
{
switch(keynumb)
{
case 0x06:temp[wei++]=1;break;
case 0x0e:temp[wei++]=2;break;
case 0x16:temp[wei++]=3;break;
case 0x05:temp[wei++]=4;break;
case 0x0d:temp[wei++]=5;break;
case 0x15:temp[wei++]=6;break;
case 0x04:temp[wei++]=7;break;
case 0x0c:temp[wei++]=8;break;
case 0x14:temp[wei++]=9;break;
case 0x0b:temp[wei++]=0;break;
case 0x03:sig=++sig%2;break;
default:;break;
} wei=wei%3;
switch(wei)
{
case 0:write7279(0x88,0xdf);break;
case 1:write7279(0x88,0xbf);break;
case 2:write7279(0x88,0x7f);break;
}
}
}
else
{
if(keynumb==0x1b) sw=++sw%4;
if(keynumb==0x13) { set_temp=1;write7279(0x88,0xdf);sw=3; }
}
if(sw==3&&sig==1)
write7279(0x94,0x01);
else write7279(0x94,0x00);
switch(sw)
{
case 0: write7279(0x87,tempu[0]);
write7279(0x86,tempu[1]+0x80);
write7279(0x85,tempu[2]);
write7279(0x80,0); break;
case 1:write7279(0x87,tempu[3]);
write7279(0x86,tempu[4]+0x80);
write7279(0x85,tempu[5]);
write7279(0x80,1); break;
case 2:write7279(0x87,tempu[6]);
write7279(0x86,tempu[7]+0x80);
write7279(0x85,tempu[8]);
write7279(0x80,2) ; break;
case 3:write7279(0x85,temp[0]);
write7279(0x86,temp[1]+0x80);
write7279(0x87,temp[2]);
write7279(0x80,3); break;
}
}
void comp(void)
{
int shinei,sheding,wencha;
shinei=tempu[0]+tempu[1]*10+tempu[2]*100;
sheding=temp[2]+temp[1]*10+temp[0]*100;
/* if(shinei>sheding)
{
wencha=shinei-sheding;
if(wencha>30)
n=1; //降溫
else if(wencha>20)
n=2; // if(wencha>10)
else n=3;
// else n=0;
} */
if(shinei<sheding)
{
wencha=sheding-shinei;
write7279(0x81,wencha/100%10);
write7279(0x82,(wencha/10)%10+0x80);
write7279(0x83,(wencha%10));
if(wencha>=30) n=1;
if(wencha>=20&&wencha<30) n=2; //升溫
if(wencha<20&&wencha>5) n=3;
if(wencha<=5)n=10;
}
}
void timer0(void) interrupt 3
{ PWM2=1;//電扇開
TR1 = 0;
TH1 = 0xfc;
TL1 = 0x18;
if(count<n)
{ PWM0 = 1;
PWM1 = 1;
}
else
{ PWM0 = 0;
PWM1 = 0;
}
count++;
if(count==10)
count = 0;
TR1 = 1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -