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

📄 adc0808.c

📁 基于51单片机adc0808模数转换源码加仿真
💻 C
字号:
#include <at89x51.h>
char code str[] = "welcome! Designer:SHN \n\r";
unsigned char x[]={'0','1','2','3','4','5','6','7','8','9','.','\n','V'};
unsigned char y=0,z=0,w=0,m=0;
float re1,result=0,q;

int ner=0;
//unsigned int tem=0;
sbit sda=P1^5;
sbit scl=P1^4;
sbit add_a=P1^0;
sbit add_b=P1^1;
sbit add_c=P1^2;
sbit ale=P1^3;
sbit open=P3^6;
sbit oe=P3^4;
sbit eoc=P3^5;
sbit clock=P3^3;
void delay_50us(unsigned int t)
{
	 unsigned char j;
	 for(;t>0;t--)
	 for(j=19;j>0;j--);
}
/*
bit errorbit;
unsigned char dat[3]={0x30,0x20,0x10};
unsigned char receive[3]={0x00,0x00,0x00};
void start(void)
{
	 sda=1;				//SCL
	 delay_50us(20);
	 scl=1;
	 delay_50us(20);
	 sda=0;
	 delay_50us(20);
	 scl=0;
	 delay_50us(20);
}
void stop(void)
{
	 sda=0;
	 delay_50us(20);
	 scl=1;
	 delay_50us(20);
	 sda=1;
	 delay_50us(20);
}
void test_report(void)
{
	 sda=1;
	 delay_50us(20);
	 scl=1;
	 delay_50us(20);
	 errorbit=0;
	 if (sda==0) errorbit=0;
	 scl=0;
	 delay_50us(20);
}
void no_report(void)
{
	 scl=0;
	 delay_50us(20);
	 sda=1;
	 delay_50us(20);
	 scl=1;
	 delay_50us(20);
	 scl=0;
	 delay_50us(20);
}
void write_8bit(unsigned char input)
{
	unsigned char i;
	for (i=0;i<8;i++)
	{
		if ((input&0x80)!=0x00) sda=1;
		else sda=0;
		delay_50us(20);
		scl=1;
		delay_50us(20);
		scl=0;
		delay_50us(20);
		input=input<<1;
	 }
}
unsigned char read_8bit(void)
{
	 unsigned char i,temp=0x00;
	 for (i=0;i<8;i++)
	 {
		 temp=temp<<1;
		 scl=1;
		 delay_50us(20);
		 if (sda==1) temp=temp|0x01;
		 scl=0;
		 delay_50us(20);
	 }
	 return (temp);
}	 	
void send(unsigned char *pp,unsigned char address)
{
	 do
	 {
	 	start();
	 	write_8bit(0xa0);
	 	test_report();
	 	write_8bit(address);
	 	test_report();
	 	write_8bit(*pp);
	 	test_report();
	 	delay_50us(20);
	 	address++;
	 	pp++;
	 	stop();
	 }while(*pp!='\0');
}
unsigned char read(unsigned char address)
{
	 	unsigned temp1=0x00;
	 	start();
	 	write_8bit(0xa0);
	 	test_report();
	 	write_8bit(address);
	 	test_report();
	 	start();
	 	write_8bit(0xa1);
	 	test_report();
	 	temp1=read_8bit();
	 	no_report();
	 	delay_50us(20);
	 	stop();
	 	return (temp1);
}*/
void timer0_stop(void) interrupt 1 using 1
{
	 clock=~clock;
}
void read_ad0808(void)
{
	 
	 ale=1;
	 open=1;
	 ale=0;
	 open=0;
	 
	 while(!eoc);

}
void send_str()
{
	unsigned char i = 0;
	while(str[i] != '\0')
	{
		SBUF = str[i];
		while(!TI);				
		TI = 0;					
		i++;					
	}	
}
void send_char(unsigned char *p)

{
		SBUF = *p;
		while(!TI);					
		TI = 0;												
}
void main(void)
{
	 TH1 = 0xF3;				// 波特率9600
	 		TL1 = 0xF3;
	 SCON = 0x50;			// 设定串行口工作方式  
	 		PCON = 0x00;			// 波特率不倍增

	 open=0;
	 oe=0; 
	 ale=0;
	 add_a=0;
	 add_b=0;
	 add_c=0;
	 TMOD=0x12;
	 TH0=255;
	 TL0=255;
	 ET0=1;
	 EA=1;
	 TR0=1;

	 
	 do
	 {
		
		read_ad0808();
		if (eoc==1)
		{
			oe=1;
			q=P2;
			oe=0;
			P3_7=0;
			P0=q;
			ner=150;			
	 		TR0=0;
	 		TMOD = 0x20;			// 定时器1工作于8位自动重载模式, 用于产生波特率
			
			result=q/256*5*100;

			y=result/100;
			z=(result-y*100)/10;
			w=result-y*100-z*10;
			TR1 = 1;
		
			send_char(&x[y]);			// 回传接收到的数据
			send_char(&x[10]);
			send_char(&x[z]);
			send_char(&x[w]);
			send_char(&x[12]);
			send_char(&x[11]);

			TR1=0;
			TR0=1;
			delay_50us(200);
		}
		
		/*if (P3_7==0)
		{
			send(&y,0x00);
			while(!P3_7);
		} */
	 }while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -