打印

430测频为什么数码管显示不出频率

[复制链接]
1392|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinpaidianzi|  楼主 | 2013-5-27 13:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#ifndef TIMERA_H
#define TIMERA_H
void IO_CLR();//初始化IO
void InittimerA();//定时器A初始化
//void KeeptimerA(unsigned char flag);//控制捕获模式运行
unsigned int Getcyc();//返回周期值函数
void delay();//延时函数
#endif



#include  <msp430x14x.h>
#include "timerA.h"
#define uchar unsigned char
#define uint unsigned int
uint cyc;       //信号周期返回值
uint LastCCR0;  //上一次CCR0的值
/*******************************************************************************
定时器A初始化
*******************************************************************************/
void InittimerA()
{
      TACTL = TASSEL_1 + MC_2+TACLR + TAIE;       //时钟ACLK,连续计数模式
      CCTL0 = CCIS_1 + CM_2 + SCS + CAP + CCIE;   //下降沿沿捕获,P2.2为信号输入端
      P2SEL |= BIT2;                 //使用P2.2IO第二功能
}

/*******************************************************************************
定时器A中断函数
*******************************************************************************/
#pragma vector = TIMERA0_VECTOR
__interrupt void timerA0()
{
   cyc = CCR0 - LastCCR0;     //计算周期
   LastCCR0 = CCR0;           //保存CCR0的值
   TACTL = TASSEL_1 + MC_2+TACLR + TAIE;       //时钟ACLK,连续计数模式
   CCTL0 = CCIS_1 + CM_2 + SCS + CAP + CCIE;   //下降沿沿捕获,P2.2为信号输入端
}
/*******************************************************************************
返回周期值函数
*******************************************************************************/
unsigned int Getcyc()
{
    return cyc;
}
/*******************************************************************************
初始化IO
*******************************************************************************/
void IO_CLR()
{
    P1DIR = 0XFF; P1OUT = 0XFF;
    P2DIR = 0X00; P2OUT = 0XFF;
    P3DIR = 0XFF; P3OUT = 0XFF;
    P4DIR = 0XFF; P4OUT = 0XFF;
    P5DIR = 0XFF; P5OUT = 0XFF;
    P6DIR = 0XFF; P6OUT = 0XFF;
}

/*******************************************************************************
延时函数
*******************************************************************************/
void delay()
{
    uchar x,y;
      for(x=110;x>0;x--)
        for(y=100;y>0;y--);
}





#include  <msp430x14x.h>
#include "TIMERAC.H"
#define uchar unsigned char
#define uint unsigned int
#define wei_h (P5OUT |= BIT5)
#define wei_l (P5OUT &= ~BIT5)
#define duan_l   (P6OUT &= ~BIT6)
#define duan_h  (P6OUT |= BIT6)
uchar f[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                      0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar a[8]={0};
uchar wei[]= {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
int temp;
void init_sys();
int main(void)
{
    WDTCTL = WDTHOLD + WDTPW;
    IO_CLR();
    init_sys();
    Getcyc();
    temp = cyc*32768*2;   //计算信号频率计算
        a[0]= temp / 10000000;
        a[1]= temp / 1000000%10;
        a[2]= temp / 100000 % 10;
        a[3]= temp / 10000 % 10;
        a[4]= temp / 1000 % 10;
        a[5]= temp / 100 % 10;
        a[6]= temp / 10 % 10;
        a[7]= temp  % 10;
    uchar i;
    for(i=0;i<7;i++)
    {   
        P4OUT = f[a];
        duan_h;
        duan_l;
        P4OUT = 0xff;
        P4OUT = wei;
        wei_h;
        wei_l;
        delay();      
    }
    while(1);
}

/*******************************************************************************
初始化系统时钟
*******************************************************************************/
void init_sys()
{
    uchar i;
    BCSCTL1 &= ~XT2OFF;         //打开XT2高频晶体振荡器
    do
    {
        IFG1 &= ~OFIFG;             //清除晶振失败标志
        for(i = 0; i < 0xff; i++);    //等待8MHz晶体起振
    }
    while(IFG1 & OFIFG);                 //MCLK和SMCLK选择高频晶振
    BCSCTL2 = SELM_2 + SELS;       //主系统时钟和子系统时钟都选择8M
     InittimerA();                 //初始化定时器A
     //KeeptimerA(100);              //打开捕获模式
     _EINT();
}

相关帖子

沙发
jinpaidianzi|  楼主 | 2013-5-27 13:58 | 只看该作者
大家帮忙看看吧,不知怎么回事

使用特权

评论回复
板凳
teabottle| | 2013-5-27 14:03 | 只看该作者
为什么在定时器中断里还要初始化定时器呢

使用特权

评论回复
地板
vivilzb1985| | 2013-5-27 23:17 | 只看该作者
P4OUT = f[a];
        duan_h;
        duan_l;
        P4OUT = 0xff;
        P4OUT = wei;
        wei_h;
        wei_l;
感觉还是你这段程序的问题的吧

使用特权

评论回复
5
hczsea| | 2013-5-28 10:18 | 只看该作者
楼主的程序貌似只显示一次吧,Getcyc();开始的程序是不是应该移到while(1)里啊?

使用特权

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

本版积分规则

115

主题

1489

帖子

1

粉丝