搜索
bottom↓
回复: 7

PIC16F690 ADC的转换问题 请大家帮忙看看 内附MPLAB工程和proteus仿真文件

[复制链接]

出0入0汤圆

发表于 2010-8-24 16:09:52 | 显示全部楼层 |阅读模式
在proteus仿真里面,下方的电压表显示的值是我要AD转换的电压值,我的程序是想实现1V亮一个LED,LED最下方为最低电量也就是1V,以此类推,0~1V点亮RC7,1~2V点亮RC7 RC6,2~3V点亮RC7 RC6 RC5,3~4V点亮RC7 RC6 RC5 RC4,4~5V点亮RC7 RC6 RC5 RC4 RC3
但是我现在仿真的结果是3~5V时5个LED全亮,然后每降1V灭一个LED,应该是我的条件判断语句有问题,可能我描述的有些乱,仿真看一下就清楚了,希望大家有时间帮忙看看,谢谢
proteus版本是V7.2 SP6,MPLAB版本是V8.53

出0入0汤圆

 楼主| 发表于 2010-8-24 16:23:02 | 显示全部楼层
我用代理上网无法上传附件,晚上让朋友帮忙上传吧

出0入0汤圆

 楼主| 发表于 2010-8-25 09:22:46 | 显示全部楼层
问题解决了,是我自己太疏忽了

出0入0汤圆

发表于 2010-8-25 22:08:28 | 显示全部楼层
软件版本都很老  该换新的了

出0入0汤圆

 楼主| 发表于 2010-8-26 16:02:57 | 显示全部楼层
proteus确实老了些,MPLAB现在又出新版本了?

出0入0汤圆

发表于 2010-11-10 14:58:14 | 显示全部楼层
能不能把你的AD转换程序贴出来呀??

出0入0汤圆

发表于 2012-10-10 12:05:24 | 显示全部楼层
我把他的代碼貼上來。呵呵...

#include<pic.h>//包含头文件
#define uchar unsigned char//宏定义
#define uint  unsigned int//宏定义
__CONFIG(INTIO & WDTDIS & PWRTEN & BORDIS & UNPROTECT);
//内置振荡器、引脚为IO功能,关闭看门狗,开电压,关,不保护EEPROM
void init();//系统初始化
void init_adc();//ADC初始化
void delay_ms(uint);//延时xms
uint get_ad();//启动AD转换
//const uchar table[]={0x7f,0x3f,0x1f,0x0f,0x07};
void main()//主函数
{
        uint lednum;//ADC结果暂存
        const uchar dlxs[]={0x7f,0x3f,0x1f,0x0f,0x07};
        //20%:0~203,40%:204~408,60%:409~613,80%:614~818,100%:819~1023
        //uchar a1,a2,a3,a4;
        init();
        init_adc();
        while(1)
        {
                lednum = get_ad();
                //a1=lednum/1000;//2
                //a2=lednum%1000/100;//5
                //a3=lednum%100/10;//0
                //a4=lednum%10;//0
               
                if(lednum>1023)
                {
                        lednum=1023;
                }
                else if(818<lednum && lednum<1024)//>3.9V
                {
                        PORTC = dlxs[5];//PORTC=0b00000111
                }
                else if(613<lednum && lednum<819)//>2.99V
                {
                        PORTC = dlxs[4];//PORTC=0b00001111
                }
                else if(408<lednum && lednum<614)//>1.99V
                {
                        PORTC = dlxs[3];//PORTC=0b00011111
                }
                else if(203<lednum && lednum<409)//>0.99V
                {
                        PORTC = dlxs[2];//PORTC=0b00111111
                }
                else if(0<lednum && lednum<204)//>0
                {
                        PORTC = dlxs[1];//PORTC=0b01111111,lednum<204
                }
                else
                {
                        PORTC = 0xff;
                }

                /*if(lednum>511)
                {
                        PORTC = 0x0f;
                }
                else if(lednum==511)
                {
                        PORTC = 0x1f;
                }
                else
                {
                        PORTC = 0x3f;
                }*/
        }
}
void init_adc()//初始化ADC
{
        ADCON0 = 0xa9;//结果右对齐,基准为VDD,通道选择AN10
        ADCON1 = 0x20;//ADC时钟选择Fosc/32
        ADIE = 0;//禁止ADC中断
        delay_ms(1);
}
uint get_ad()//AD转换
{
        uint adval;//0x000~0x3ff,1024
        //float advalf;
        GODONE = 1;
        while(GODONE);
        adval = ADRESH;//00000000 00000011
        adval = adval << 8 | ADRESL;//00000011 00000000|11111111=00000011 11111111
        //advalf=adval/1023.0*5.0;//==2.5目前advalf为分压后的模拟电压值
        //adval=advalf*1000;//
        //advalf=advalf*124.7/14.7;//目前advalf为分压前的模拟电压值
        //advalf = advalf*1000;//2500
        //float advalf= (uint)adval;
        return (adval);
}
void init()//系统初始化
{
        OSCCON = 0x71;//振荡器控制寄存器配置为内部8MHz
        TRISA = 0x34;//00110100RA2/RA4/RA5为悬空脚
        PORTA = 0xcb;//11001011
        TRISB = 0x50;//01010000RB4为模拟输入(采样电压)RB6为悬空脚
        PORTB = 0xaf;//10101111
        TRISC = 0x07;//00000111RC2为模拟输入(按键中断),RC1/RC0为悬空脚
        PORTC = 0xf8;//11111000
        ANSEL = 0x40;//enable AN6(RC2)
        ANSELH = 0x04;//enable AN10(RB4)
}
void delay_ms(uint xms)//延时xms
{
        uint i,j;
        for(i=xms;i>0;i--)//8MHz晶振下,xms等于几就延时几ms
                for(j=152;j>0;j--);
}

出0入0汤圆

发表于 2014-10-24 21:29:28 | 显示全部楼层
等待高人回答哈哈
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 14:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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