找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC8单片机的AD电压数码管显示转换不出来

[复制链接]
跳转到指定楼层
楼主
ID:265485 发表于 2021-4-4 14:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/********************************************************************
                         AD转换初始化程序
*********************************************************************/
void InitADC()
{
   P1ASF = 0x80;          //设置P1.7口AD转换,必须加
   P1M0=0X80;
   P1M1=0X80;        //设置P1.7口为开漏模式,使用AD功能
    ADC_RES = 0;                   //AD数据寄存器清空
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打开AD电源,转换周期210
    _nop_();                        //延时一个机器周期
    _nop_();
        _nop_();                        //延时一个机器周期
}
/********************************************************************
                         AD转换控制程序
*********************************************************************/
uchar ADCRead(uchar px)          //转换输出的数据 (PX为通道口)
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//开始转换
    _nop_();                        //延时一个机器周期
    _nop_();                                                //延时一个机器周期
    _nop_();                                                //延时一个机器周期
    _nop_();                                                //延时一个机器周期
    while (!(ADC_CONTR & ADC_FLAG));//等待转换结束
    ADC_CONTR &= ~ADC_FLAG;         //关闭AD转换
    return ADC_RES;                //返回数据
}

if(ba==1){dat=((ADCRead(7)*51)/255);dat1=dat*2;ba=0;} //51是单片机的工作电压,单片机的工作电压是多少这个就是多少
//          if(ba==1){dat=ADCRead(7);dat1=dat*100/249;ba=0;}
          if((y==0)&&(z==0)){zs=1;led(dat1);} //zs标志位控制小数点
          if(y==1){zs=0;led(s1);}
          if(y==2){zs=0;led(s2);}
          if(y==3){zs=1;z=0;led(s);}
          if(dat1>s){out=0;}else{out=1;}
          KeyRead(); //按键扫描
          key_1();
          key_2();
          if(k==1)
          {
             Sector_Erase(0);
                 Byte_Program(0x0001,s1);  //写入扇区
                 Byte_Program(0x0002,(s2/10));  //写入扇区
                 k=0;
          }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:265485 发表于 2021-4-4 14:33 | 只看该作者
为什么转换不出来ADC数值呢 是哪里没有打开吗请问有没有神
回复

使用道具 举报

板凳
ID:265485 发表于 2021-4-4 15:56 | 只看该作者
请问一下是哪里设置得有问题吗为什么 转换不出来呢
回复

使用道具 举报

地板
ID:469589 发表于 2021-4-4 17:40 | 只看该作者
没看见你关于DTA1核DATA的数据格式定义,是浮点数吗,如果是定点的,应该做量程转化是扩大成16位数据,然后再运算,否则只能是零
回复

使用道具 举报

5#
ID:469589 发表于 2021-4-4 17:50 | 只看该作者
{float dat=ADCRead(7);    float  dat1=dat*100/249;  ba=0;}
回复

使用道具 举报

6#
ID:814525 发表于 2021-4-4 19:56 | 只看该作者
看你的相关ADC程式,是STC15系列用法。如果使用的是STC8,ADC相关寄存器和STC15不同,参考资料进行修改并调用STC8头文件。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:213173 发表于 2021-4-4 20:36 | 只看该作者
wanli2018 发表于 2021-4-4 14:33
为什么转换不出来ADC数值呢 是哪里没有打开吗请问有没有神

STC8没有P1ASF寄存器
使用模拟输入要设置端口高阻模式不是开漏模式。
STC8有官方示例,可以参考。
回复

使用道具 举报

8#
ID:430492 发表于 2022-4-13 16:34 | 只看该作者
   P1M0=0X80;
   P1M1=0X80;        //设置P1.7口为开漏模式,使用AD功能
这样的写法其实不太规范,建议改为:
   P1M0 &=0X7f;        //0x01111111;
   P1M1 |=0X80;        //0x10000000,设置P1.7口为高阻模式,使用AD功能
这样的好处就是除了要设定位外,其余位不受影响。
回复

使用道具 举报

9#
ID:975054 发表于 2022-4-23 00:15 | 只看该作者
P1ASF = 0x80;          //设置P1.7口AD转换,必须加
   P1M0=0X80;
   P1M1=0X80;        //设置P1.7口为开漏模式,使用AD功能

一开头就错的太多了.....
按总工程师的意见办就好!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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