#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit cs=P1^0;
sbit clk=P1^3;
sbit DI=P1^4;
sbit DO=P1^5;
sbit CS1=P2^0;
sbit CS2=P2^1;
sbit CS3=P2^2;
sbit CS4=P2^3;
uchar adval,volt;
uchar temp;
uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(uint ms)
{
uchar j;
while(ms--)
{
for(j=0;j<120;j++);
}
}
void ADC_start()
{
cs=1;
_nop_();
clk=0;
_nop_();
cs=0;
_nop_();
DI=1;
_nop_();
clk=1;
_nop_();
DI=0;
_nop_();
clk=0;
_nop_();
}
void ADC_read(uint CH)
{
uchar i;
ADC_start();
if(CH==0)
{
clk=0;
DI=1;
_nop_();
_nop_();
clk=1;
_nop_();
_nop_();
clk=0;
_nop_();
DI=0;
_nop_();
_nop_();
clk=1;
_nop_();
_nop_();
}
else
{
clk=0;
DI=1;
_nop_();
_nop_();
clk=1;
_nop_();
_nop_();
clk=1;
_nop_();
_nop_();
DI=1;
_nop_();
_nop_();
clk=1;
_nop_();
_nop_();
}
clk=1;
_nop_();
clk=0;
for(i=0;i<8;i++)
{
DI=1;
if(DO)
{
temp=(temp|0x01);
}
else
{
temp=(temp&0xfe);
}
clk=0;
_nop_();
clk=1;
temp=temp<<1;
}
adval=temp;
}
void volt_result()
{
volt=adval*1.96;
}
void disp_volt(uint date)
{
CS1=1;CS2=0;CS3=0;CS4=0;
P0=~((~tab[date/100])|0x80);
delay(1);
P0=0xff;
CS1=0;CS2=1;CS3=0;CS4=0;
P0=tab[date%100/10];
delay(1);
P0=0xff;
CS1=0;CS2=0;CS3=1;CS4=0;
P0=tab[date%10];
delay(1);
P0=0xff;
CS1=0;CS2=0;CS3=0;CS4=1;
P0=tab[date%100];
delay(1);
P0=0xff;
}
void main(void)
{
P2=0xff;
P0=0xff;
while(1)
{
ADC_read(0);
delay(1);
volt_result();
disp_volt(volt);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)