3485|3

5

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

adc采样数码管显示 真拿它没辙、、只好请教各位了 [复制链接]

#include
#include "math.h"
#define   Num_of_Results  32
typedef unsigned char uchar;
typedef unsigned int uint;
static uint results[Num_of_Results];      //保存ADC转换结果的数组
float Trans_val(uint Hex_Val);
float m;
int Dispbuf[2];
int cnt;
//数码管7位段码;0--f
uchar scandata[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
                    0x7c,0x39,0x5e,0x79,0x71};
/****************主函数******************/
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;                     //关闭看门狗
TACTL=TASSEL1+TACLR;       //选择SMCLK,清除TAR
CCTL0=CCIE;                //CCR0中断允许
CCR0=400;      //增计数模式
TACTL|=MC0;         

P6SEL|=0x01;//p6.0做为模拟信号输入端口
P6DIR&=~BIT0;
ADC12MCTL0|=INCH_0;
//ADC12CTL0 &=REF2_5V;         //  选择内部 1.5V 参考电压
ADC12CTL0 = ADC12ON + SHT0_15 + MSC;             //打开ADC,设置采样时间
ADC12CTL1=SHP+CONSEQ_2;//使用采样定时
ADC12IE|=0x01;
ADC12CTL0|=ENC;                           //使能转换
ADC12CTL0|=ADC12SC;                       //开始转换

//初始化端口
P4DIR=0xff;                //P4段选,P5位选,都设为输出
P5DIR=0xff;
P4OUT=0x00;                //开始输出置反,不亮
P5OUT|=0x03;
_EINT();
while(1)
{
_BIS_SR(LMP0_bits + GIE);
Dispbuf[0]=(int)(m);
Dispbuf[1]=(int) (m*10-Dispbuf[0]*10);
  }
}
/****************中断服务函数*********************
用途;多次平均计算P60口的模拟电压数值************/
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
static uint index=0;
results[index++]=ADC12MEM0;        //移动结果
if(index==Num_of_Results)
{
uchar i;
unsigned long sum=0;
index=0;
for(i=0;i {
sum+=results;
}
sum>>=5;                          //除以32
m=Trans_val(sum);
//m=Trans_val;
_BIC_SR_IRQ(LPM0_bits);
}
}
/*********************转换数据函数****************
功能;将16进制转换数据变换成三位10进制真实的模拟电压数据*****/
float Trans_val(uint Hex_val)
{
unsigned long caltmp;
float curr_volt1;
uint curr_volt;
caltmp=Hex_val;
caltmp=(caltmp<<5)+Hex_val;            //caltmp=Hex_val*33
caltmp=(caltmp<<3)+(caltmp<<1);        //caltmp=caltmp*10
curr_volt=caltmp>>12;                  //curr_volt= caltmp/2^n
curr_volt1=curr_volt*0.01;
return curr_volt1;
}
/*********************数码管显示***************/
//定时器中断
#pragma vector=TIMERA0_VECTOR//定时器0中断服务
__interrupt void timer_a0(void)
{

P5OUT=0xff;
P4OUT=scandata[Dispbuf[cnt]];           //输出段选信号
P5OUT&=~(1<<(cnt));                   //输出位选信号
cnt++;
if(cnt==2) cnt=0;                       //0到2之间
}
此帖出自单片机论坛

最新回复

说说遇到什么困难了,这样只贴程序,不知问啥  详情 回复 发表于 2009-6-11 15:57
点赞 关注
 

回复
举报

2131

帖子

0

TA的资源

至上芯片

沙发
 
你把你目前的问题说一下!看看是不是硬件问题!
此帖出自单片机论坛
 
个人签名处处留心皆学问!
 

回复

196

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
这样的程序430里面的例程应该有,拿过来修改一下就可以了
此帖出自单片机论坛
 
 
 

回复

537

帖子

0

TA的资源

五彩晶圆(初级)

4
 
说说遇到什么困难了,这样只贴程序,不知问啥
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表