1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標(biāo)題:
MSP430超聲波測(cè)距+LCD1602/LCD12864
[打印本頁(yè)]
作者:
lzhong
時(shí)間:
2017-5-18 20:42
標(biāo)題:
MSP430超聲波測(cè)距+LCD1602/LCD12864
很久以前測(cè)試過(guò)的超聲波測(cè)距,用MSP430F149+超聲波測(cè)距+LCD1602/LCD12864顯示
0.png
(65.25 KB, 下載次數(shù): 73)
下載附件
2017-5-18 22:54 上傳
12864液晶顯示代碼:
#include <msp430x14x.h>
#define RISE 1
#define FALL 0
#define DataIn P4DIR=0x00 //數(shù)據(jù)口方向設(shè)置為輸入
#define DataOut P4DIR=0xff //數(shù)據(jù)口方向設(shè)置為輸出
#define MCU_Data P4IN
#define LCD_Data P4OUT
#define CMDOut P6DIR|=0xfc //P6口的低23456位設(shè)置為輸出
#define RS_H P6OUT|=BIT2 //P6.2
#define RS_L P6OUT&=~BIT2 //P6.2
#define RW_H P6OUT|=BIT3 //P6.3
#define RW_L P6OUT&=~BIT3 //P6.3
#define EN_H P6OUT|=BIT4 //P6.4
#define EN_L P6OUT&=~BIT4 //P6.4
#define PSB_RST_H P6OUT|=BIT5+BIT6 //P6.5 P6.6為高
unsigned int TA_Overflow_Cnt;//TA溢出次數(shù)存放變量
unsigned long int Period;//脈寬存放結(jié)果變量
unsigned long int S;
unsigned int distance;
unsigned int RiseCapVal;//上升沿時(shí)刻捕獲值存放變量
unsigned char Edge=1;//當(dāng)前觸發(fā)沿
const unsigned char hang1[]={"<<超聲波測(cè)距儀>>"};
const unsigned char hang2[]={"距離:"};
const unsigned char hang3[]={"米"};
unsigned char disbuff[4]={"0.00"};
void Write_Cmd(unsigned char cmd);
void Write_Data(unsigned char dat);
void Init_Lcd(void);
void Disp_HZ(unsigned char addr,const unsigned char * pt,unsigned char num);
void init_clk();
void init_timerA();
void init_IO();
void display_juli();
/*******************************************
函數(shù)名稱(chēng):Delay_1ms
功 能:延時(shí)約1ms的時(shí)間
********************************************/
void Delay_1ms(void)
{
unsigned char i;
for(i=150;i>0;i--) _NOP();
}
/*******************************************
函數(shù)名稱(chēng):Delay_Nms
功 能:延時(shí)N個(gè)1ms的時(shí)間
參 數(shù):n--延時(shí)長(zhǎng)度
********************************************/
void Delay_Nms(unsigned int n)
{
unsigned int i;
for(i=n;i>0;i--) Delay_1ms();
}
/*******************************************
函數(shù)名稱(chēng):Write_Cmd
功 能:向液晶中寫(xiě)控制命令
參 數(shù):cmd--控制命令
********************************************/
void Write_Cmd(unsigned char cmd)
{
unsigned char lcdtemp=0;
RS_L;
RW_H;
DataIn;
do //判忙
{
EN_H;
_NOP();
lcdtemp = MCU_Data;
EN_L;
}
while(lcdtemp & 0x80);
DataOut;
RW_L;
LCD_Data = cmd;
EN_H;
_NOP();
EN_L;
}
/*******************************************
函數(shù)名稱(chēng):Write_Data
功 能:向液晶中寫(xiě)顯示數(shù)據(jù)
參 數(shù):dat--顯示數(shù)據(jù)
********************************************/
void Write_Data(unsigned char dat)
{
unsigned char lcdtemp = 0;
RS_L;
RW_H;
DataIn;
do //判忙
{
EN_H;
_NOP();
lcdtemp = MCU_Data;
EN_L;
}
while(lcdtemp & 0x80);
DataOut;
RS_H;
RW_L;
LCD_Data = dat;
EN_H;
_NOP();
EN_L;
}
/*******************************************
函數(shù)名稱(chēng):Ini_Lcd
功 能:初始化液晶模塊
********************************************/
void Init_Lcd(void)
{
CMDOut; //液晶控制端口設(shè)置為輸出
PSB_RST_H; //設(shè)置并行顯示方式;
Delay_Nms(500);
Write_Cmd(0x30); //基本指令集
Delay_1ms();
Write_Cmd(0x02); // 地址歸位
Delay_1ms();
Write_Cmd(0x0c); //整體顯示打開(kāi),游標(biāo)關(guān)閉
Delay_1ms();
Write_Cmd(0x01); //清除顯示
Delay_1ms();
Write_Cmd(0x06); //游標(biāo)右移
Delay_1ms();
Write_Cmd(0x80); //設(shè)定顯示的起始地址
// Write_Cmd(0x01);
Disp_HZ(0x80,hang1,8);
Disp_HZ(0x91,hang2,3);
Disp_HZ(0x96,hang3,1);
}
/*******************************************
函數(shù)名稱(chēng):Disp_HZ
功 能:控制液晶顯示漢字
參 數(shù):addr--顯示位置的首地址
pt--指向顯示數(shù)據(jù)的指針
num--顯示字符個(gè)數(shù)
********************************************/
void Disp_HZ(unsigned char addr,const unsigned char * pt,unsigned char num)
{
unsigned char i;
Write_Cmd(addr);
for(i = 0;i < (num*2);i++)
Write_Data(*(pt++));
}
//初始化系統(tǒng)時(shí)鐘函數(shù)
void init_clk()
{
unsigned char i;
BCSCTL1&=~XT2OFF;//打開(kāi)XT振蕩器
BCSCTL2|=SELM_2+SELS;//MCLK 8M and SMCLK 8M
do
{
IFG1 &= ~OFIFG;//清除振蕩錯(cuò)誤標(biāo)志
for(i=0;i<0xff;i++) _NOP();//延時(shí)等待
}
while((IFG1 & OFIFG) != 0);//如果標(biāo)志為1繼續(xù)循環(huán)等待
IFG1&=~OFIFG;
}
//初始化定時(shí)器A函數(shù)
void init_timerA()
{
TACTL |= TASSEL_2+MC_2+TAIE+TACLR+ ID_3;//SMCLK,連續(xù)計(jì)數(shù),中斷允許,計(jì)數(shù)器清零
TACCTL1 |= CAP+CM_1+CCIS_0+SCS+CCIE;//捕獲模式,上升沿捕獲,CCI1A輸入,同步捕獲,中斷允許
}
//初始化端口函數(shù)
void init_IO()
{
P1DIR |= BIT1;//P1.1輸出
P1DIR &=~ BIT2;//P1.2輸入
P1SEL |= BIT2;//P1.2第二功能,捕獲輸入
//P2DIR |= 0xff; //設(shè)置P2口方向?yàn)檩敵?br />
P4DIR |= 0xff;
P6DIR |= 0xfc;
P1OUT &=~BIT1;
Delay_Nms(1000);
}
void display_juli()
{
if(S/100)
{
disbuff[0]=S/100+'0';
disbuff[2]=S/10%10+'0';
disbuff[3]=S%10+'0';
}
else if(S/10)
{
disbuff[2]=S/10+'0';
disbuff[3]=S%10+'0';
disbuff[0]='0';
}
else
{
disbuff[3]=S%10+'0';
disbuff[0]='0';
disbuff[2]='0';
}
}
void main()
{
WDTCTL = WDTPW + WDTHOLD;//停狗
init_IO();
Init_Lcd();
init_timerA();
TACCTL1 |= CAP+CM_1+CCIS_0+SCS+CCIE;//改為上升沿捕獲
_EINT();
while(1)
{
P1OUT |= BIT1;
Delay_Nms(10);
P1OUT &=~BIT1;
Delay_Nms(80);
//P2OUT = 0x00;
P6OUT &= ~BIT1;
display_juli();
Disp_HZ(0x94,disbuff,2);
if(S<10)
{
//P2OUT = 0xff;
P6DIR |= BIT1;
P6OUT |= BIT1;
}
}
}
//定時(shí)器A服務(wù)程序
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch(TAIV)
{
case 2 :if(Edge==RISE)
{
RiseCapVal = TACCR1;
TACCTL1 |= CAP+CM_2+CCIS_0+SCS+CCIE;//改為下降沿捕獲
//TACCTL1 |= CAP+CM_1+CCIS_0+SCS+CCIE;//改為上升沿捕獲
Edge = FALL;//下降沿捕獲標(biāo)志
}
else
{
_DINT();
Period = TACCR1-RiseCapVal;
S=(Period*17)/100;
TACCR1 = 0;
TACCTL1|= CAP+CM_1+CCIS_0+SCS+CCIE;//改為上升沿捕獲
Edge = RISE;//上升沿捕獲標(biāo)志
_EINT();
}
break;
case 4 : break;
case 10: TA_Overflow_Cnt++;break;
}
}
復(fù)制代碼
1602液晶顯示代碼:
//////////////////////////////////////////////////////////////////
/******************基于MSP430f149的超聲波測(cè)距儀******************/
//////////////////////////////////////////////////////////////////
#include "msp430f149.h"
#define uint unsigned int
#define uchar unsigned char
#define DataIn P4DIR=0x00 //數(shù)據(jù)口方向設(shè)置為輸入
#define DataOut P4DIR=0xff //數(shù)據(jù)口方向設(shè)置為輸出
#define MCU_Data P4IN
#define LCD_Data P4OUT
#define CMDOut P6DIR|=0x1c //P6口的低234位設(shè)置為輸出
#define RS_H P6OUT|=BIT2 //P6.2
#define RS_L P6OUT&=~BIT2 //P6.2
#define RW_H P6OUT|=BIT3 //P6.3
#define RW_L P6OUT&=~BIT3 //P6.3
#define EN_H P6OUT|=BIT4 //P6.4
#define EN_L P6OUT&=~BIT4 //P6.4
unsigned char xs1[]={"Distance:"};
unsigned char xs2[]={"Test error"};
/*******************************************
函數(shù)名稱(chēng):Delay_1ms
功 能:延時(shí)約1ms的時(shí)間
********************************************/
void Delay_1ms(void)
{
unsigned char i;
for(i=150;i>0;i--) _NOP();
}
/*******************************************
函數(shù)名稱(chēng):Delay_Nms
功 能:延時(shí)N個(gè)1ms的時(shí)間
參 數(shù):n--延時(shí)長(zhǎng)度
********************************************/
void Delay_Nms(unsigned int n)
{
unsigned int i;
for(i=n;i>0;i--) Delay_1ms();
}
/********************************************
函數(shù)名稱(chēng):xml
功 能:向1602液晶寫(xiě)入命令
參 數(shù):無(wú)參數(shù)
********************************************/
void xml(uchar cmd)
{
RS_L;
RW_L;
EN_H;
Delay_1ms();
LCD_Data = cmd;
EN_L;
Delay_1ms();
}
/********************************************
函數(shù)名稱(chēng):xsj
功 能:向1602液晶中寫(xiě)入數(shù)據(jù)
參 數(shù):無(wú)參數(shù)
********************************************/
void xsj(uchar dat)
{
RS_H;
RW_L;
EN_H;
Delay_1ms();
LCD_Data = dat;
EN_L;
Delay_1ms();
}
/********************************************
函數(shù)名稱(chēng):csh
功 能:初始化1602液晶
參 數(shù):無(wú)參數(shù)
********************************************/
void csh()
{
Delay_Nms(500);
xml(0x38); //基本指令集
Delay_1ms();
xml(0x01); // 地址歸位
Delay_1ms();
xml(0x0c); //整體顯示打開(kāi),游標(biāo)關(guān)閉
Delay_1ms();
xml(0x06); //游標(biāo)右移
Delay_1ms();
xml(0x80); //設(shè)定顯示的起始地址
}
/********************************************
函數(shù)名稱(chēng):xs
功 能:1602液晶顯示函數(shù)
參 數(shù):無(wú)參數(shù)
********************************************/
void xs()
{
uchar i;
xml(0x80);
for(i=0;i<16;i++)
{
xsj(xs1[i]);
}
xml(0x90);
for(i=0;i<16;i++)
{
xsj(xs2[i]);
}
}
/*********************************************
函數(shù)名稱(chēng):main
功 能:主函數(shù)
參 數(shù):無(wú)參數(shù)
*********************************************/
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;//關(guān)閉看門(mén)狗
csh();
while(1)
{
xs();
}
}
復(fù)制代碼
以上2個(gè)代碼下載,如有錯(cuò)誤請(qǐng)指教:
MSP430 超聲波.rar
(43.44 KB, 下載次數(shù): 79)
2017-5-18 20:42 上傳
點(diǎn)擊文件名下載附件
作者:
Edmundshi
時(shí)間:
2018-4-11 21:46
樓主,我沒(méi)有看到有超聲波模塊的代碼哦
作者:
theshy
時(shí)間:
2018-12-1 14:42
.。。。資料不齊全
作者:
xinyu1650
時(shí)間:
2022-4-4 14:46
沒(méi)有超聲部分的代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1