高级会员
主题
帖子
积分3030
阅读权限30
注册时间2010-9-1
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2011-3-5 12:00
|
显示全部楼层
#include <reg52.H>
#include "AD.h"
#define uchar unsigned char
#define uint unsigned int
uchar play[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0123456789共阴
uchar a,b,c,d;
// 延时函数
void delay(uchar delay_time)
{
uchar n,m;
for(n=0;n<delay_time;n++)
for(m=0;m<1000;m++)
;
}
//延时函数111
void Delay11(int x)
{
unsigned char i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++)//120
;
}
//获得AD采集结果
uchar get_AD_result(uchar channel)
{
uchar AD_finished = 0; // 存储 A/D 转换标志
ADC_DATA = 0; //预置高八位
ADC_CONTR = channel; // 选择 A/D 当前通道
delay(1); //使输入电压达到稳定
ADC_CONTR |= 0x80; //1000,0000 打开 A/D 转换电源
ADC_CONTR |= 0x08; //0000,1000 令 ADC_START = 1, 启动A/D 转换
AD_finished = 0;
while ( AD_finished == 0 ) // 等待A/D 转换结束
{
AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1测试A/D转换结束否
}
ADC_CONTR &= 0xF7; //1111,0111 令 ADC_START = 0, 关闭A/D 转换
return ADC_DATA; //返回 A/D 转换结果高8位结果
}
//显示函数
void Display()
{
P1=0x01;//0x70;
P2=play[a];
Delay11(4);
//P1=0x00;
P1=0x02;//0xb0;
P2=play[b];
Delay11(4);
//P1=0x00;
P1=0x04;//0xd0;
P2=play[c];
Delay11(4);
//P1=0x00;
P1=0x08;//0xe0;
P2=play[d];
Delay11(4);
//P1=0x00;
}
//主函数入口
void main()
{
uchar RES=0,VIN=0;
P1M0=0x01;
P1M1=0x00;//I/O口处于AD状态(开漏)
while(1)
{
RES=get_AD_result(0xe7); //选择通道 P1.7
VIN=RES/255*1000*5;
a=VIN%10; //个位
b=VIN/10%10;
c=VIN/100%10;
d=VIN/1000;//千位
Display();
//delay(200);
}
} |
|