找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4340|回复: 2
收起左侧

单片机ADC0809模数转换实验

[复制链接]
ID:789645 发表于 2020-6-25 17:59 | 显示全部楼层 |阅读模式
修改记录: 由LED显示模数转换的结果,改变成由四位数码管显示电压值  
-------------------------------------------------------------------------   
* 功能描述: 采集电位器的模拟电压值,转换成数字量
* 通过四位共阳数码管显示
-------------------------------------------------------------------------
* 接线说明:数码管段码P10~P17--SA~SH,数码管位选P20~P23--C0~C3
*          ADC0809:0809DB0~DB7--P00~P07 , 0809CS--P27,0809EOC--P30
*                   0809WR--P36,0809RD--P37,0809A,B,C通道选择--GND  
*                   0809CLK--ALE(注:在核心板上),0809IN0--POT(电位器输出)                                       
*************************************************************************/
#include<reg52.h>
#include<absacc.h>

#define uchar unsigned char
#define uint unsigned int
//char code SST516[3] _at_ 0x003b;

unsigned char code segbit[]={0xc0,0xf9,0xa4,0xb0,        // 0, 1, 2, 3
                                                                 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
unsigned char code combit[]={0xf1,0xf2,0xf4,0xf8};




#define ADC0809 XBYTE[0x7fff]    /* 定义ADC0809 端口地址 */
#define Smg_Seg P1
#define Smg_Com P2
sbit EOC=P3^0;


void TimeInitial();
void Delay(unsigned int i);


void Delay(unsigned int i)
{
  unsigned int j;
  for(;i>0;i--)
  {
  for(j=0;j<125;j++)
  {;}
  }
}


void main()
{
        uchar  temp,loopdat1;
        uint   voldata;
        uchar dispbuf[4];
        while(1)
        {
                ADC0809=0x0f;               
                do
                {;}
                while(~EOC);  //转换是否完成               
                //delayms(1);
                temp = ADC0809; //读出转换结果
                voldata = temp*1.0/255*500;
                dispbuf[3] = voldata%10;
                dispbuf[2] = voldata/10%10;
                dispbuf[1] = voldata/100%10;
                dispbuf[0] = voldata/1000;
                for(loopdat1=0;loopdat1<4;loopdat1++)
                {
                       
                        Smg_Seg = segbit[dispbuf[loopdat1]];
                        if( loopdat1 == 1 )
                        {
                                Smg_Seg &= 0x7f;
                        }
                        Smg_Com = combit[loopdat1];
                        Delay(4);
                        Smg_Com = 0xf0;
                }
        }
}
仿真.jpg

ADC0809模数转换实验.zip

89.79 KB, 下载次数: 32, 下载积分: 黑币 -5

回复

使用道具 举报

ID:797146 发表于 2020-7-10 14:06 | 显示全部楼层
我想请教一下,我用ADC0809采集交流信号并用DAC0832还原交流信号,但是只能还原10HZ之下的,需要怎么改进呢
回复

使用道具 举报

ID:611568 发表于 2020-8-5 19:25 | 显示全部楼层
学习一下,纠结好久了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表