⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timeratest.c

📁 使用msp430f448测量脉冲宽度
💻 C
字号:
#include <msp430x44x.h>
#include "PortInit.c"
#include "lcd.c"
#include "Init.c"

unsigned int start;
unsigned int end;
unsigned int timex;
float  time;
unsigned long int sum;
unsigned char overflow;
unsigned char flag = 0;
unsigned char counter = 0;
unsigned int a[100];
const uchar Number[10][16]=
{

{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},/*"0",0*/

{0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00},/*"1",1*/

{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00},/*"2",2*/

{0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00},/*"3",3*/

{0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00},/*"4",4*/

{0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00},/*"5",5*/

{0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00},/*"6",6*/

{0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00},/*"7",7*/

{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00},/*"8",8*/

{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00},/*"9",9*/
};

const uchar dian[16]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00};/*".",0*/

const uchar fuhao[3][16]=
{
  
{0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x4E,0x48,0x50,0x68,0x48,0x44,0xEE,0x00,0x00},/*"k",0*/

{0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00},/*"H",1*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x44,0x08,0x10,0x10,0x22,0x7E,0x00,0x00},/*"z",2*/
};

void main(void)
{
     uchar i;
     uchar b[5]={0,0,0,0,0};
     uint k;
     WDTCTL=WDTPW+WDTHOLD; //关闭看门?狗定时器
     SCFI0 |= FN_4;
     SCFQCTL = 121;
     FLL_CTL0 = DCOPLUS + OSCCAP1;
  

//----timer设置----//
     PortInit();
     LCDInit();
     Init();
     
     LCDClear();
     
     P6DIR = 0XFF;
     P6OUT = 0X0f;
     

     
     Display(Number[1],0,10,56,1,16);
     
     

     TACTL = TASSEL1 + TACLR + TAIE + MC1;     //时钟为ACLK,连续增计数,清零
     CCTL1 = CM0 + SCS + CAP + CCIE;          //上升沿捕获, 同步捕获,CCI1A为信号源,
     _EINT();
     
     while(1)
     {

         if(flag==100)
         {
            flag = 0;
            for(i=0;i<100;i++)
              sum = a[i] + sum;
            time = sum/100.0;
            time = time/8.0;
            time = time *1000;
            time = 100000000.0/time;
            if(time >8800)
              time += 200;
            else if((time<8800)&&(time>5000))
              time += 100;
            sum = 0;
            
            k = 10000;
            for(i=0;i<5;i++)
            {      
               b[i] = (uint)time / k;
               time = (uint)time % k;
               k=k/10;
            }
            LCDClear();
            for(i=0;i<3;i++)
           {      
                 Display(Number[b[i]],0,(i+10),56,1,16);             
           }  
            Display(dian,0,13,56,1,16); 
            for(i=3;i<5;i++)
           {      
                 Display(Number[b[i]],0,(i+11),56,1,16);             
           }  
           for(i=0;i<3;i++)
           {      
                 Display(fuhao[i],0,(i+16),56,1,16);             
           }  
           TimeDelay(5000);
           P1SEL |= BIT2;
           _EINT();
         }
         else 
         {
             _NOP();
         }
     }
}


#pragma vector = TIMERA1_VECTOR
__interrupt void TimerA1(void)
{     
        switch(TAIV)
         {
           case 2:           
                 if(counter==0)
                 {         
                          TACTL |= TACLR;
                          start = TAR;
                          overflow = 0;    //溢出计数复位 
                          counter = 1;
                          break;
                 }
                  if(counter == 1)
                  {
                          end = TAR;
                          flag++;
                          a[flag-1] = end - start ;
                          
                          if(flag==100)
                             {
                                P1SEL &= ~BIT2;
                             }
                          counter = 0;
                          break;
                  } 
              case 10: //定时器溢出中断
                      overflow++; //溢出计数加1
                      break; 
              default:
                   break;
         }
       
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -