📄 water.c
字号:
//WDTRST地址是0A6H)中先写入01EH,再写入0E1H
//Mov 0A6H,#01EH ;先送1E Mov 0A6H,#0E1H ;后送E1
//溢出时为8191(1FFFH)
#include <at89x52.h>
#include <intrins.h>
#define WDAdre 0xa0
#define RDDADR 0xa1
code unsigned char table[13]={0x05,0x3F,0x51,0x13,0x2B,0x83,0x81,0x1F,0x01,0x03,0xff,0xC5,0xE5};
code unsigned char pointtable[11]={0x04,0x3E,0x50,0x12,0x2A,0x82,0x80,0x1E,0x0,0x02,0xff};
static unsigned char ShowNum[4];
sbit DIN = P3^3;
sbit SCLK = P3^5;
sbit CS = P3^4;
sbit SCL = P1^2;
sbit SDA = P1^1;
sbit LED = P3^7;
sbit Sound = P0^7;
sbit ADCCLK = P3^6; //ad_ADCCLK
sbit ADCCS = P3^1; //ad_ADCCS
sbit ADCData = P3^0; //ad_ADCData
unsigned char TimeDelay=1;
const bit ON=0,OFF=1;
void delay(unsigned char us) //delay time
{
while(us--);
}
unsigned int TLC1549(void)
{
unsigned int u=0;
unsigned char i;
ADCCLK=0;
ADCCS=1;
_nop_();
ADCCS=0;
for(i=0;i<10;i++) //read data
{
ADCCLK=1;
u=(u<<1)|ADCData;
ADCCLK=0;
_nop_();
}
ADCCLK=1;
_nop_();
ADCCLK=0;
delay(25); //delay 25us
ADCCS=1;
return(u); //return ad data
}
/*void WatchDog(void)
{
WDTRST=0x01E;
WDTRST=0x0E1;
} */
void DelayMs(unsigned int DT)
{
unsigned int i=0;
for(;i<=DT; i++);
}
void Beep(unsigned int SoundFreq,unsigned char DelayTime)
{
unsigned int i,j;
for(j=0;j<=DelayTime;j++)
{
Sound=0;
for(i=0;i<=SoundFreq;i++);
Sound=1;
}
Sound=1;
}
void send_dat(unsigned char DAT)
{
unsigned char i;
for(i=0;i<8;i++)
{
DIN=DAT&0x80;
DAT=DAT<<1;
SCLK=1;
SCLK=0;
}
}
void Start()
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
void Stop()
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
void NoAck()
{
SDA=1;
SCL=1;
SCL=0;
}
bit TestAck()
{
bit ErrorBit;
SDA=1;SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
Write8Bit(unsigned char input)
{
unsigned char temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
void WT24C02(unsigned char ch,unsigned char address)
{
Start();
Write8Bit(WDAdre);
TestAck();
Write8Bit(address);
TestAck();
Write8Bit(ch);
TestAck();
Stop();
DelayMs(10);
}
unsigned char Read8Bit()
{
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte|((unsigned char)(SDA));
SCL=0;
}
return(rbyte);
}
unsigned char RD24C02(unsigned char address)
{
unsigned char ch;
Start();
Write8Bit(WDAdre);
TestAck();
Write8Bit(address);
TestAck();
Start();
Write8Bit(RDDADR);
TestAck();
ch=Read8Bit();
NoAck();
Stop();
return(ch);
}
void DisplayLed(signed int Num1)
{
unsigned char h, dat;
unsigned int Temp1=0,Temp2=0,Temp3=0;
CS=0;
ShowNum[0]=Num1/1000;
Temp1=ShowNum[0]*1000;
ShowNum[1]=(Num1-Temp1)/100;
Temp2=ShowNum[1]*100;
ShowNum[2]=(Num1-Temp1-Temp2)/10;
Temp3=ShowNum[2]*10;
ShowNum[3]=Num1-Temp1-Temp2-Temp3;
if(ShowNum[0]==0)ShowNum[0]=10;
if(ShowNum[0]==10&ShowNum[1]==0)ShowNum[1]=10;
if(ShowNum[1]==10&ShowNum[2]==0)ShowNum[2]=10;
for(h=0;h<4;h++)
{
dat=table[ShowNum[h]];
send_dat(dat);
}
CS=1;
}
void main()
{
unsigned char StoreData;
unsigned int OldData=0;
unsigned int DataArrary[5];
unsigned char DataIndex=0;
LED=ON;
DelayMs(10000);
LED=OFF;
StoreData=RD24C02(0);
StoreData++;
WT24C02(StoreData,0);
Beep(40,200);
//WDTRST=0x01E;
//WDTRST=0x0E1;
while(1)
{
//WatchDog();
DelayMs(200);
if(P3_0==0)
{
WT24C02(0,0);
Beep(100,100);
}
StoreData=TLC1549();
DataIndex++;
DataArrary[DataIndex]=StoreData;
if (DataIndex>=4)
{
DataIndex=0;
StoreData=(DataArrary[0]+DataArrary[1]+DataArrary[2]+DataArrary[3]+DataArrary[4])/5;
if (StoreData!=OldData)
{
DisplayLed(StoreData);
OldData=StoreData;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -