📄 timeratest.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 + -