打印

数码管通过A/D转换显示程序问题

[复制链接]
4161|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jianghuoo00|  楼主 | 2011-10-19 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jianghuoo00 于 2011-10-20 16:18 编辑

想用数码管通过A/D转换显示。单片机RA0(即AN0)连接一个电位器,通过调节电位器数码管显示不同电压。RB0--RB7接数码管段码,RC0--RC3接数码管位码。
可是结果显示有问题,没有达到目的,请教各位指点指点。是配置问题还是其他。

#include<p33FJ32MC204.h>
#define uchar unsigned char
#define uint unsigned int
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
                        0x87,0xff,0xef};              
void init();
uint get_ad();  
void delay(uint x);
void disp(uchar num1,uchar num2,uchar num3,uchar num4);
void main()
{
uint lednum;
uchar a1,a2,a3,a4;
init();
while(1)
{
  lednum=get_ad();
  a1=lednum/1000;
  a2=lednum%1000/100;
  a3=lednum%100/10;
  a4=lednum%10;
  disp(a1,a2,a3,a4);
}

}
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
  for(b=110;b>0;b--);
}
void init()                          //初始化,配置
{
TRISA=1;
PORTA=0;
TRISB=0;
PORTB=0;
TRISC=0;
PORTC=0;
AD1CON1bits.ADON=0;                //开始关闭ADC模块
AD1CON1=0x00e0;               //在空闲模式下模块继续工作,10位工作模式,整数,由内部计数器结束采样并启动转换
AD1CON2=0;      
AD1CON3=0x8408;
AD1CHS0=0;
AD1CHS123=0;
AD1CSSL=0x0001;
AD1PCFGL=1;      //AN0输入
AD1CON1bits.ADON=1;    //启动ADC转换
}
uint get_ad()                               //AD采样,获取AD值
{
uint adval;
float advalf;
AD1CON1bits.SAMP  = 1;     //开始采样,采样结束后自动开始转换
while(!AD1CON1bits.DONE);     //ADC是否转换完成
adval=AD1PCFGL;
advalf=adval/1023.0*5.0;      
adval=advalf*1000;                //保留小数位
return(adval);
}
void disp(uchar num1,uchar num2,uchar num3,uchar num4)
{
LATB=table1[num1];//显示第一个数码管,有小数点的
PORTC=0x0e;
delay(2);
LATB=table[num2];//显示第二个数码管
PORTC=0x0d;
delay(2);
LATB=table[num3];//显示第三个数码管
PORTC=0x0b;
delay(2);
LATB=table[num4];//显示第四个数码管
PORTC=0x07;
delay(2);
}

模数转换器 (ADC).pdf

969.41 KB

沙发
kvdong| | 2011-10-19 15:18 | 只看该作者
有什么问题?结果是什么,说清楚点。
否则别人怎么帮你呢

使用特权

评论回复
板凳
jianghuoo00|  楼主 | 2011-10-19 15:51 | 只看该作者
2# kvdong
目的让显示电压值,滑动电位器改变其值。现在显示有点乱的数码,显示不完全的字码2.8.2.2,而且调节电位器没有反应。

使用特权

评论回复
地板
kvdong| | 2011-10-19 16:33 | 只看该作者
建议先屏蔽A/D转换程序,给你的lednum赋固定值试试,看显示程序是否正确。比如lednum=1234;看你的数码管是否正确显示1 2 3 4

使用特权

评论回复
5
jianghuoo00|  楼主 | 2011-10-20 15:47 | 只看该作者
4# kvdong
你好,又试了下,用仿真出现问题数字不完全是由于延时时间短。显示不清晰,现在可以了。不过调节电位器没有反应,是不是配置哪里不太对

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

98

帖子

1

粉丝