完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#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; TACCTL1&=((~CM_1)|CM_2); TACCTL1&=~CCIFG;} if(TACCTL1&CM_2) { t2=TACCR1; flag[1]=1; P3OUT&=~BIT7; TACCTL1&=((~CM_2)|CM_1); TACCTL1&=~CCIFG; } } |
|
相关推荐
4个回答
|
|
|
|
|
|
看下规格书和文档吧,或者直接下例程核实一下。!!
|
|
|
|
这种问题需要自己去查,可以在线仿真来查啊!!!
|
|
|
|
仿不了真~唉~430就这么不流行~我要吐血了!怎么改都捕获不了~ |
|
|
|
只有小组成员才能发言,加入小组>>
3039个成员聚集在这个小组
加入小组2941 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3622 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2352 浏览 1 评论
4817 浏览 1 评论
2579 浏览 1 评论
1339浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3622浏览 2评论
2941浏览 1评论
1528浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-5 10:33 , Processed in 1.399176 second(s), Total 87, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号