• 大小: 473KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: 其他
  • 标签:

资源简介

利用单片机AT89C52与ADC0809设计一个8路数字电压表,能够测量0-5V之间的8路输入电压值,并能在四位数码管上显示。

资源截图

代码片段和文件信息

#include 
#include     //延时函数用
#define ad_con P2       //A/D控制口
#define addata P0         //A/D数据记入读入口
#define Disdata P1        //显示数据段码输出口
#define uchar unsigned char  
#define uint unsigned int
sbit ALE=P2^3;            //锁存地址控制位
sbit START=P2^4;             //启动一次转换位
sbit OE=P2^5;                //0809输出数据 控制位
sbit EOC=P3^7;                 //转换结束标志位
sbit DISX=Disdata^7;           //LED小数点
sbit A=P2^7;
sbit BO=P3^5;
sbit CO=P3^6;
//
//
uchar code dis_7[11]={0xC00xF90xA40xB00x990x920x820xF80x800x900xff};
/*共阳7段LED段码表0.1.2.3.4.5.6.7.8.9.不亮*/
uchar code scan_con[4]={0xfe0xfd0xfb0xf7};                     //4位列扫描控制字
//11111110
//11111101
//11111011
//11110111
uchar data ad_data[8]={0x000x000x000x000x000x000x000x00};  //定义8个数据内存单元
uint data dis[5]={0x000x000x000x000x00};                      //定义4个显示数据单元和1个数据存储单元
//
//
/**********1ms延时子函数***********/
delaylms(uint t)    //t=1
{
uint ij;
for(i=0;i for(j=0;j<120;j++)
;
}
//
//
/************显示扫描子函数***************/
scan()
{
uchar kn;
int h;
dis[3]=0x01;               //通道初值为1
for(n=0;n<8;n++)          //每次显示8个数据
{
dis[2]=ad_data[n]/51;  //测得值转换为3位BCD码,最大为5.00V
dis[4]=ad_data[n]%51;  //余数暂存
dis[4]=dis[4]*10;      //计算小数第一位
dis[1]=dis[4]/51;      
dis[4]=dis[4]%51;
dis[4]=dis[4]*10;      //计算小数第二位
dis[0]=dis[4]/51; 
if(dis[2]>=4&&dis[1]>6&&dis[0]>=0)
A=1;  
else 
A=0;
for(h=0;h<500;h++)         //每个通道显示时间控制约为一秒
{
for(k=0;k<4;k++)         //4位LED扫描控制
{
Disdata=dis_7[dis[k]];
if(k==2)
{
DISX=0;
}
P3=scan_con[k];   //P3.O-P3.3控制四个数码管的输出 即控制输出电平的高低
delaylms(1);
P3=0xff;
}   
}
dis[3]++;                 //通道值加1
}
}
//
//
/*************通道选择函数*********************/
tongdao(uint n)
{
uint mi;
dis[3]=n+1;
dis[2]=ad_data[n]/51;  //测得值转换为3位BCD码,最大为5.00V
dis[4]=ad_data[n]%51;  //余数暂存
dis[4]=dis[4]*10;      //计算小数第一位
dis[1]=dis[4]/51;      
dis[4]=dis[4]%51;
dis[4]=dis[4]*10;      //计算小数第二位
dis[0]=dis[4]/51; 
if(dis[2]>=4&&dis[1]>6&&dis[0]>=0)
A=1;  
else 
A=0;
for(m=0;m<500;m++)        //每个通道显示时间控制约为一秒
{
for(i=0;i<4;i++)         //4位LED扫描控制
{
Disdata=dis_7[dis[i]];
if(i==2)
{
DISX=0;
}
P3=scan_con[i];   //P3.O-P3.3控制四个数码管的输出 即控制输出电平的高低
delaylms(1);
P3=0xff;
}   
}
}
/*************0809转换子函数*******************/
test()
{  
uchar m;
uchar s=0x00;
ad_con=s;
for(m=0;m<8;m++)
{
ALE=1;
_nop_();
_nop_();
ALE=0;    //转换通道地址锁存
START=1;
_nop_();
_nop_();
START=0; //开始转换命令
_nop_();
_nop_();
_nop_();
_nop_(); //延时4US
while(EOC==0);                    //等待转换结束
OE=1;
ad

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      91136  2008-12-29 09:40  8路数字电压表\13 组       实验报告.doc

     文件    1024000  2008-12-29 09:43  8路数字电压表\Design1.Bkp

     文件     385024  2008-12-29 09:43  8路数字电压表\Design1.ddb

     文件    8452096  2008-12-29 09:42  8路数字电压表\shuzidianbiao.Bkp

     文件    1138688  2008-12-29 09:42  8路数字电压表\shuzidianbiao.ddb

     文件       3917  2007-07-24 13:57  8路数字电压表\test21.c

     目录          0  2008-12-29 09:43  8路数字电压表

----------- ---------  ---------- -----  ----

             11094861                    7


评论

共有 条评论