找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机如何控制电位器输出0-100数字信号?

  [复制链接]
跳转到指定楼层
楼主
ID:1062216 发表于 2023-2-8 13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                adc_value=xpt2046_read_adc_value(0x94);//测量电位器
                Compare=100*adc_value/4096;//将读取的AD值转换为0-100
想令Compare为0-100但实测数据为0-15左右且到15最大以后会再变成0,如何解决?


void main()
{
        Timer0_init();
        while(1)
        {
       
                adc_value=xpt2046_read_adc_value(0x94);//测量电位器
                Compare=100*adc_value/4096;//将读取的AD值转换为0-100
                adc_buf[0]=gsmg_code[Compare/100];
                adc_buf[1]=gsmg_code[Compare/10%10];
                adc_buf[2]=gsmg_code[Compare%10];
                smg_display(adc_buf,1);       
               
        }
}

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

使用道具 举报

沙发
ID:94031 发表于 2023-2-8 14:37 | 只看该作者
把系数4096变小,输出15就会变大,直到最大输出为100.
回复

使用道具 举报

板凳
ID:161164 发表于 2023-2-8 14:44 | 只看该作者
Compare=100*(long)adc_value/4096;//将读取的AD值转换为0-100
回复

使用道具 举报

地板
ID:213173 发表于 2023-2-8 15:29 | 只看该作者
如果按照电位器的滑动触点的旋转角度和输出端阻值变化的关系,可分为线性电位器、指数式电位器和对数式电位器。在外壳上以字母“X”“Z”“D”作为标志。控制电位器输出0-100数字信号要选择线性电位器,读取的ADC结果按楼上板凳公式换算。
回复

使用道具 举报

5#
ID:807591 发表于 2023-2-8 15:54 | 只看该作者
电位器是个输入器件,正常情况下,不可能输出0-100数字信号
回复

使用道具 举报

6#
ID:491577 发表于 2023-2-8 17:29 | 只看该作者
lkc8210 发表于 2023-2-8 14:44
Compare=100*(long)adc_value/4096;//将读取的AD值转换为0-100

100*adc_value会数据溢出,改成:
Compare=100*(long)adc_value/4096;//将读取的AD值转换为0-100
回复

使用道具 举报

7#
ID:883242 发表于 2023-2-8 19:43 | 只看该作者
溢出了呗,你应该把各个变量的定义,以及函数原型贴出来,然后看各种数据类型的范围,你肯定是超范围了。
回复

使用道具 举报

8#
ID:965189 发表于 2023-2-8 21:45 | 只看该作者
比如电位器上端接5V,下端接地,单片机读取电位器中点电压值,取8位ADC,value/2.55.读数就是0-100。
回复

使用道具 举报

9#
ID:996773 发表于 2023-2-9 09:17 | 只看该作者
看到楼主的问题我很担忧,编程需要语言结构严谨细致,楼主的问话可是完全逻辑混乱,什么叫单片机控制电位器输出?电位器里面有旋转电机吗?单片机如何去控制电位器?楼主的问题应该是:单片机如何读取电位器电阻值然后输出数据.......编程是一门逻辑艺术,楼主写下每一条语句和命令自己要想一想,这样写规范吗,逻辑对不对,单片机会控制电位器吗.........授人以鱼不如授人以渔,祝愿楼主早日成为大师
回复

使用道具 举报

10#
ID:1034262 发表于 2023-2-9 10:14 | 只看该作者
数字电位才可以输出。
回复

使用道具 举报

11#
ID:883242 发表于 2023-2-11 21:37 | 只看该作者
hhh402 发表于 2023-2-8 17:29
100*adc_value会数据溢出,改成:
Compare=100*(long)adc_value/4096;//将读取的AD值转换为0-100

不用那么复杂,adc_value/41即可。
回复

使用道具 举报

12#
ID:1059013 发表于 2023-2-12 10:24 | 只看该作者
10k电位器串2.8k电阻,电位器滑动端子接7位AD转换器(10位AD结果右移3位)即可完美输出0-100
回复

使用道具 举报

13#
ID:1062216 发表于 2023-2-14 14:51 | 只看该作者
hhh402 发表于 2023-2-8 17:29
100*adc_value会数据溢出,改成:
Compare=100*(long)adc_value/4096;//将读取的AD值转换为0-100

感谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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