#include
#include "LCD12864.h"
uchar flag[2]={0};
int t=0,t1=0,t2=0;
ulong i;
uint distance=0;
uchar over_flag=0;//溢出标志
uint jl[4]={0};
/***************************关闭所有IO口*************************/
void Close_IO()
{
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;
}
/***************************时钟初始化*************************/
void Clk_Init()
{
BCSCTL1&=~XT2OFF;//打开XT振荡器
BCSCTL2|=SELM_2+SELS;//MCLK 8M and SMCLK 8M
do
{
IFG1 &= ~OFIFG;//清除振荡错误标志
for(i = 0; i < 0xff; i++) _NOP();//延时等待
}
while ((IFG1 & OFIFG) != 0);//如果标志为1继续循环等待
IFG1&=~OFIFG;
}
/****************************************************/
void Tmolde()
{
P5OUT|=BIT2;//trig9c
delay_us(15);
P5OUT&=~BIT2;
delay_ms(100);
}
void xianshi(uint l)
{ jl[3] = l/1000;
l = l%1000;
jl[2] = l/100;
l = l%100;
jl[1] = l/10;
jl[0] = l%10;
Write_Cmd(0x80);//第一行第一字节地址
Display("智能盲人辅助系统");
Write_Cmd(0x88);//第三行第二字节地址
Display("距离:");
Write_Cmd(0x8A);//第三行第二字节地址
//delay_ms(2000);//等待2秒
//Write_Cmd(0X01);//清屏
Write_Data(jl[3]+0x30);
Write_Data(jl[2]+0x30);
Write_Data(jl[1]+0x30);
Write_Data(jl[0]+0x30);
Display("mm");
}
/************************主函数****************************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
Close_IO();
Clk_Init(); //时钟初始化,外部8M晶振 3
Ini_Lcd_IO();
delay_ms(50);
Ini_Lcd();
P5DIR&=~BIT1;
P5SEL|=BIT1; // 将6.0定义为外围模块功能
TACTL=TASSEL_2+TACLR+ID_3+MC_1; //SMCLK,清除TAR,八分频,连续计数模式
TACCTL1=CCIS_1;//捕获源为P5.0 P5.1
TACCTL1|=SCS+CAP+CCIE;//捕获模式,同步捕获,工作在捕获模式,中断打开
TACCTL1=CM_3;
TACCR0=6000;
_EINT();//开启总中断
while(1){
Tmolde();
if(flag[0]==1&&flag[1]==1){
flag[0]=0;
flag[1]=0;
if(t2>t1)
t=t2-t1;
else
{
t=6000-t1+t2;
over_flag=0;
TACTL=TACLR;
}
}
distance=t*(340/2000);
/*Write_Cmd(0x91);
Write_Data(distance+0x30);*/
xianshi(distance);
}
}
/*************中断服务函数**********/
#pragma vector = TIMERA1_VECTOR
__interrupt void TIMERA1()
{
if(TACCTL1&CM_1){
t1=TACCR1;
flag[0]=1;
P3OUT&=~BIT6;}
if(TACCTL1&CM_2){
t2=TACCR1;
flag[1]=1;
P3OUT&=~BIT7;
t1++;}
TACCTL1&=~CCIFG;//清楚标志位
}
有些头文件里timer的溢出中断和比较捕获中断函数的入口名称是分开的,注意检查一下