第1个回答 2013-07-12
#include <reg52.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED=P1^4;
sbit cs=P2^0;
sbit rd=P3^7;
sbit wr=P3^6;
sbit dacs=P3^2; //AD控制
sbit D27=P2^7; //数码管锁存器控制引脚
sbit D26=P2^6;
sbit key=P3^4;
uchar b,s,g,num;
float voltage;
uint disdata;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f}; //整数字符
uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,<br/>0x87,0xff,0xef}; //带小数点数字编码
void display(uchar b,uchar s,uchar g);
void delay(uint z);
void start();
void initial();
void main()
{
LED=1;
cs=0; //AD片选给低电平
dacs=1;
initial();
start();
delay(5);
rd=0;
delay(5);
num=P1;
delay(5);
rd=1;
delay(1);
voltage = 5.00*num/256; //实际电压
disdata=(uint)(voltage*100);
delay(1);
b=disdata/100;
s=disdata%100/10;
g=disdata%10;
display(b,s,g);
}
void start()
{
wr=1;
wr=0;
wr=1;
}
void initial()
{
disdata=0;
num=0;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--) ;
}
void display(uchar b,uchar s,uchar g) //显示数字个十百位
{
D27=1;
P0=0xfd;
D27=0;
P0=0x00;
D26=1;
P0=table1[b];
D26=0;
P0=0x00;
delay(1);
D27=1;
P0=0xfb;
D27=0;
P0=0x00;
D26=1;
P0=table[s];
D26=0;
P0=0x00;
delay(1);
D27=1;
P0=0xf7;
D27=0;
P0=0x00;
D26=1;
P0=table[g];
D26=0;
P0=0x00;
delay(1);
}