⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 water.c

📁 单片机控制带模数转化的水位控制源程序 TLC1549用于获取水位次
💻 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 + -