找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1694|回复: 4
打印 上一主题 下一主题
收起左侧

单片机怎么用一个AD实现2个模数转换呀?

[复制链接]
跳转到指定楼层
楼主
ID:538083 发表于 2019-5-14 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include"XPT2046.h"        

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 disp1[4];
u8 disp2[4];
u8 code smgduan1[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 code smgduan2[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void delay(u16 i)
{
        while(i--);        
}

void datapros1()
{
        u16 temp1;
        static u8 i;
        if(i==50)
        {
                i=0;
                temp1 = Read_AD_Data(0xa4);                //   AIN0 电位器
        }
        i++;
        disp1[0]=smgduan1[temp1/1000];//千位
        disp1[1]=smgduan1[temp1%1000/100];//百位
        disp1[2]=smgduan1[temp1%1000%100/10];//个位
        disp1[3]=smgduan1[temp1%1000%100%10];               
}

void datapros2()
{
        u16 temp2;
        static u8 i;
        if(i==50)
        {
                i=0;
                temp2= Read_AD_Data(0x94);//  guangmin
        }
        i++;
        disp2[0]=smgduan2[temp2/1000];//千位
        disp2[1]=smgduan2[temp2%1000/100];//百位
        disp2[2]=smgduan2[temp2%1000%100/10];//个位
        disp2[3]=smgduan2[temp2%1000%100%10];               
}


void DigDisplay1()
{
        u8 i;
        for(i=0;i<4;i++)
        {
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//显示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//显示第3位        
                }
                P0=0X0F;
                P0=disp1[3-i];//发送数据
                delay(100); //间隔一段时间扫描        
                P0=0x00;//消隐
        }               
}

void DigDisplay2()
{
        u8 i;
        for(i=0;i<4;i++)
        {
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=1; break;//显示第4位
                        case(1):
                                LSA=1;LSB=0;LSC=1; break;//显示第5位
                        case(2):
                                LSA=0;LSB=1;LSC=1; break;//显示第6位
                        case(3):
                                LSA=1;LSB=1;LSC=1; break;//显示第7位        
                }
                P0=0XF0;
                P0=disp2[3-i];//发送数据
                delay(100); //间隔一段时间扫描        
                P0=0x00;//消隐
        }               
}




void main()
{        
        while(1)
        {
                datapros1();         //数据处理函数

                datapros2();
                DigDisplay1();//数码管显示函数        
    DigDisplay2();               
        }               
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:452821 发表于 2019-5-14 20:19 | 只看该作者
你用的XPT2046本身就是四线12位的AD转换器啊,而且你这不是用了两路吗?
回复

使用道具 举报

板凳
ID:425825 发表于 2019-5-14 22:51 | 只看该作者
XPT2046 可以采集四路模拟信号
回复

使用道具 举报

地板
ID:538083 发表于 2019-5-15 17:22 | 只看该作者
尹子归来 发表于 2019-5-14 20:19
你用的XPT2046本身就是四线12位的AD转换器啊,而且你这不是用了两路吗?


但是他的显示不对呀,对光敏的采集对但对电压的不对
回复

使用道具 举报

5#
ID:538083 发表于 2019-5-15 17:23 | 只看该作者
来51学习 发表于 2019-5-14 22:51
XPT2046 可以采集四路模拟信号

但是他的显示不对呀,对光敏的采集对但对电压的不对
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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