• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

基于PCF8591实现AD转换并在3位数码管上显示输出值

470772643@qq.com 2017-08-05 浏览量:624
收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 先说说怎么调试吧 不知道你有没有仿真器 

    如果有的话可以在keilC51里面debug 看看是显示模块有误还是ADC模块有误 

    如果没仿真器的话(51的应该很少有)可以用proteus和keilC51联调debug 找出哪个模块有问题


    另外 我想问问为什么要 “GND与P1.2相连,并使P1.2=0;VCC与P1.3相连,并使P1.3=1​”

    而不是 接单片机的VCC GND 单片机的IO口输入输出是有限的 你那样连接可能会导致单片机工作异常或者ADC模块异常


    你在设计作品时有没考虑过用使用中断

    太多的阻塞延迟delay 特别是毫秒级的 会影响单片机工作的实时性 

    数码管的显示改为用中断来控制会更好

    • 发布于 2017-08-05
    • 举报
    • 评论 4
    • 0
    • 0
8769cc5bd61fb0d7 回复了 _落雪千寒灬:嗯你的解答很有帮助,可以麻烦你再具体说下使用中断来控制数码管的思路吗 回复
8769cc5bd61fb0d7 回复了 _落雪千寒灬:void main() { uchar a,A1,A2,A3,sec,num; init(); TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=1; while(1) { ad_zhuan(); delayms(100); sec=read_ad(); A1=sec/100; A2=sec%100/10; A3=sec%10; if(num==20) { num=0; //for(a=10;a>0;a--) //{ display(A1,A2,A3); } } } void T0_time() interrupt 1 { uchar num; TH0=(65536-45872)/256; TL0=(65536-45872)%256; num++; } 回复
8769cc5bd61fb0d7 回复了 _落雪千寒灬:我写成这样行不通 回复
8769cc5bd61fb0d7 回复了 _落雪千寒灬:定义全局变量后就可以了,谢谢你 回复

其他答案 数量:9
  • 想着在数码管上的数值是根据电位器的变化在0~255范围变化

    其中模块SCL与单片机P1.0相连,SDA与P1.1相连,GND与P1.2相连,并使P1.2=0;VCC与P1.3相连,并使P1.3=1;


    • 发布于2017-08-05
    • 举报
    • 评论 1
    • 0
    • 0
_落雪千寒灬 回复了 8769cc5bd61fb0d7 :"GND与P1.2相连,并使P1.2=0;VCC与P1.3相连,并使P1.3=1"老老实实接单片机的VCC GND 回复

  • “GND与P1.2相连,并使P1.2=0;VCC与P1.3相连,并使P1.3=1​”

    老老实实接单片机的VCC GND

    • 发布于2017-08-05
    • 举报
    • 评论 0
    • 0
    • 0

8769cc5bd61fb0d7 回复了 Sourcelink :可以具体说下如何检查吗? 回复

  • 感觉像是那个delay 100ms的问题,先把A1,A2,A3赋一个定量值不变,
    delayms(100);保留,A1=1,A2=2,A3=3,试下,确定是读值错误的问题还是显示的问题。
    因为中间延时了100ms,从人眼的感官上来看,数码管是会闪烁的。
    • 发布于2017-08-05
    • 举报
    • 评论 1
    • 0
    • 0
8769cc5bd61fb0d7 回复了 赤心木zqw :嗯嗯你说的是对的 回复

  • 数码管数字一直变应该是你那个刷新频率太快了。你不妨用proteus先仿真一下数码管部分,看看有没有问题。这个AD采集看起来是正确的
    • 发布于2017-08-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个问题很常见,我也遇到过,ADC芯片的后面几位如果过采样不够精确的话是会出现浮动的,另外数码管的显示也是不稳定的,只要小数点后一位的数据没有太大跳动,一般不用在意。

    • 发布于2017-08-05
    • 举报
    • 评论 2
    • 0
    • 0
8769cc5bd61fb0d7 回复了 donatello :可是我的情况是3个数码管的数字是一样的,而且一直在跳变 回复
8769cc5bd61fb0d7 回复了 donatello :问题解决了 谢谢 回复

  • 其中模块SCL与单片机P1.0相连,SDA与P1.1相连,GND与P1.2相连,并使P1.2=0;VCC与P1.3相连,并使P1.3=1

    模塊請接單片機的VCC和GND喔,需共地

    目前看來電路問題比較大

    以上

    • 发布于2017-08-06
    • 举报
    • 评论 1
    • 0
    • 0
8769cc5bd61fb0d7 回复了 MOP :嗯嗯你说的对,问题解决了 谢谢 回复

相关问题

问题达人换一批

基于PCF8591实现AD转换并在3位数码管上显示输出值