搜索
bottom↓
回复: 2

[求助]碰到两个问题,希望大家能够帮忙看看

[复制链接]

出0入0汤圆

发表于 2010-8-23 16:18:06 | 显示全部楼层 |阅读模式
我用PIC16F690内部的ADC对VCC进行一个模数转换,把转换的结果即电量显示到PORTC口的5个LED,现在碰到2个问题,希望大家能够帮忙看看

1.ADC转换结果送过去总是感觉转换结果有误

2.LED闪灯问题,我想用一个函数实现我想让RCx闪灯就让RCx闪灯、想让他闪几次就闪几次,想让哪个LED闪这个我能用一个switch case语句实现,但是想让他闪几次就不闪实现不了,他一直在闪,我是用一个for循环弄的

贴上源程序,希望大家有时间帮忙看看吧

#include<pic.h>
#define uchar unsigned char
#define uint  unsigned int
__CONFIG(INTIO & WDTDIS & PWRTEN & BORDIS & UNPROTECT);
void init();
void init_adc();
void delay_ms(uint);
void BlinkLed(uchar sled);//ok
void BlinkLedNum(uchar x,uchar z);
uint get_ad();
const uchar table[]={0x7f,0x3f,0x1f,0x0f,0x07};//这里是实验ADC转换结果用的
void main()
{
uint lednum;
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
  
  PORTC =table[a1];
  delay_ms(1000);

  BlinkLedNum(3,3);//这句话是测试闪灯函数的
}
}
void BlinkLed(uchar sled)//闪烁RC3~RC7中的某一位
{
switch(sled)
{
  case 3: RC3=!RC3;
    delay_ms(300);
    break;
  case 4: RC4=!RC4;
    delay_ms(300);
    break;
  case 5: RC5=!RC5;
    delay_ms(300);
    break;
  case 6: RC6=!RC6;
    delay_ms(300);
    break;
  case 7: RC7=!RC7;
    delay_ms(300);
    break;
  default:break;
}
}
void BlinkLedNum(uchar xnum,uchar z)
{
//uchar x;
//for(x=xnum;x>0;x--)
do
{
  BlinkLed(z);
  xnum--;
}while(xnum==0);
}
void init_adc()
{
ANSEL = 0x40;//enable AN6
ANSELH = 0x04;//enable AN10
ADCON0 = 0xa9;//结果右对齐,基准为VDD,通道选择AN10
ADCON1 = 0x20;//ADC时钟选择Fosc/32
delay_ms(20);
}
uint get_ad()
{
uint adval;
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;//
//adval=advalf*1000;//
//advalf=advalf*124.7/14.7;//
advalf = advalf*1000;//
float advalf= (uint)adval;
return (adval);
}
void init()
{
OSCCON = 0x71;//振荡器控制寄存器配置为内部8MHz
TRISC = 0x04;//00000100RC2为模拟输入
PORTC = 0xf8;//11111000
TRISA = 0x00;//00000000
TRISB = 0x10;//RB4为模拟输入
PORTB = 0xff;//11111111
}
void delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
  for(j=152;j>0;j--);
}

出0入0汤圆

发表于 2010-8-23 20:51:18 | 显示全部楼层
void BlinkLedNum(uchar xnum,uchar z)
{
//uchar x;
//for(x=xnum;x>0;x--)
do
{
  BlinkLed(z);
  xnum--;
}while(xnum==0);
}
感觉写的不合适

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-9 08:42

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

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