📄 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 + -