久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3665|回復: 1
打印 上一主題 下一主題
收起左側

msp430g2231超聲波測距數碼管顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:111475 發表于 2016-3-30 19:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
        暑假里,閑著蛋疼。就做了個小程序,利用hsc_04超聲波模塊做了個測距離的程序。程序之前發過。這里我再發一次。介紹下我的小小超聲波測距模塊。

      我從網上買的幾塊錢一個的超聲波測距模塊。用74hc164串口的方式顯示數碼管。用的是msp430g2331,編譯環境是iar for 5.5.msp430g2331的p1的8的io口全部占用,還有兩個特殊定義io口沒有用。代碼編譯有幾百bit,還是很吊的吧。

這些程序都由本人親自調試編寫,可以成功運行。

//主函數
#include"config.h"
int main( void )
{
   extern_16m();   //msp430g2231最大1Mhz速度,我按最大速度運行
    init_TA();         //定時器設置,設置40ms中斷一次,即一個數碼管40ms顯示一次
   hc164_init();    //串轉并模塊74hc164引腳定義
   hc_sr04();       //超聲波測距模塊io口定義
   __bis_SR_register(GIE);   //開啟總中斷
   while(1)
   {

   }
}
//config.h
#include"io430.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define CLK0  P1OUT&=~BIT6
#define CLK1   P1OUT|=BIT6
#define hc_sr040  P1OUT&=~BIT4
#define hc_sr041   P1OUT|=BIT4
#define CPU_F ((double)1000000)   //外部高頻晶振16MHZ
//#define CPU_F ((double)32768)   //外部低頻晶振32.768KHZ
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

unsigned char const code_hex[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39,0x79,0x0e,0x3e};//0,1,2,3,4,5,6,7,8,9,c,e,j,u
uchar t;
uchar hc_sr04_cishu,hc_sr04_flag;
uchar xianshi_flag;
float hc_sr04_time;
uint xishu;
uchar dis_play[4]={10,11,12,13};   //默認數碼管顯示測距4個字母,如果超聲波有返回,就顯示距離。
void extern_16m()
{
  WDTCTL = WDTPW + WDTHOLD;
    if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF)
        {
                while(1);                // If calibration constants erased, trap CPU!!
        }
DCOCTL |= DCO0 + DCO1+DCO2;                                                                   //SMCLK選擇LFXT1CLK
// BCSCTL2 |= SELM_0;//MCLK采用1M的內部DCO   
// BCSCTL2 |= DIVS_0;//SMCLK采用內部的時鐘


}

void hc164_init()
{
  P1DIR |=BIT6+BIT7+BIT0+BIT1+BIT2+BIT3;                            // P1.0 output

}

void hc_sr04()
{
  P1DIR |=BIT4;
  P1DIR &=~BIT5;
  P1IE |=0x20;            //上升沿觸發
  P1IES |=0x00;   
  hc_sr04_flag=3;//默認準備發射狀態  

}

//74hc164發送端口程序
void sendbyte(uchar byte)
{            
uchar c,num;   
num=byte;
for(c=0;c<8;c++)        
{     
P1OUT&=~0x80;
CLK0;   
P1OUT|=num&0x80; //(0x80即十進制的128, 二進制的10000000 按位發送
CLK1;         
num<<=1;   
}
}

//發送數字到數碼管
void send_char(uchar weizhi,uchar byte)
{

  P1OUT |= 0x0f;   
  uchar c,send_byte;
  send_byte=code_hex[byte];
  if((weizhi==0)&&(xianshi_flag==0))
   send_byte|=0x80;
  if((weizhi==1)&&(xianshi_flag==1))
   send_byte|=0x80;
  sendbyte(send_byte);
  c=weizhi&0x03;
  P1OUT&=~(1<<c);
}



void init_TA()
{

  TACCR0 = 5000;                            //4ms中斷一次
  TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode,8分頻,
  TACCTL0 = CCIE;                           // TACCR0 interrupt enabled
}


void shumaguan()
{
   ++t;
if(t>=4)
   t=0;
  send_char(t,dis_play[t]);
}

#pragma vector=TIMER0_A0_VECTOR  
__interrupt void TIMERA0_ISR() // the interrupt source is CC0
{
shumaguan();
  hc_sr04_cishu++;
  if(( hc_sr04_flag==3)&&(hc_sr04_cishu==100))//500ms測距一次
  {
     hc_sr041;
     P1IE |=0x20;
     delay_us(10);
     hc_sr040;     
  }

  if(hc_sr04_flag==2)
{
   float juli;
   uint juli1;
   juli=(float)(hc_sr04_time/5.8139);
   juli1=(uint)(juli);
   if(juli1<10000)
   {
     xianshi_flag=0;
     dis_play[0]=(juli1/1000);
     dis_play[1]=(juli1%1000/100);
     dis_play[2]=(juli1%1000%100/10);
     dis_play[3]=(juli1%10);
   }
   else
   {
     xianshi_flag=1;
     dis_play[0]=(juli1/10000);
     dis_play[1]=(juli1%10000/1000);
     dis_play[2]=(juli1%10000%1000/100);
     dis_play[3]=(juli1%10000%1000%100/10);
   }
   hc_sr04_flag=3;
   hc_sr04_cishu=0;

}
}

#pragma vector =PORT1_VECTOR
__interrupt void Port_1(void)
{
switch(P1IES&0x20)
{
   case 0:TAR=0;P1IES=0x20;hc_sr04_flag=1;hc_sr04_cishu=0;break;
case 0x20:hc_sr04_time=5000*hc_sr04_cishu+TAR;P1IES=0;hc_sr04_flag=2;P1IE &=~0x20;break;
}
P1IFG=0;

}

數碼管超聲波測距.zip

164.57 KB, 下載次數: 13, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:117823 發表于 2016-6-4 02:04 來自手機 | 只看該作者
這個是我做的。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕一区二区三区乱码图片 | 国产偷自视频区视频 | 亚洲一区二区三区在线播放 | 日韩毛片免费看 | 精品欧美一区二区在线观看欧美熟 | 午夜免费视频 | 99精品视频一区二区三区 | 亚洲h视频| 欧美aaaaaaaa| 一区二区视频在线 | 成人伊人 | 天天操夜夜骑 | 欧美五月婷婷 | 做a视频在线观看 | 成人精品鲁一区一区二区 | 日本a视频 | 免费在线精品视频 | 国产91在线 | 亚洲 | 国产福利91精品一区二区三区 | 精品伊人久久 | 国产一区二区三区四区五区3d | 久久久久久久久久久爱 | 日韩免费高清视频 | 中文字幕高清 | 96国产精品久久久久aⅴ四区 | 黄色91在线 | 国产精品黄色 | 精品日韩一区二区 | 亚洲福利 | 亚洲网站在线播放 | 国产成人高清 | 婷婷福利视频导航 | 视频一区二区三区四区五区 | 91久久精品一区二区二区 | 国产一区91精品张津瑜 | 亚洲精品乱码久久久久久久久久 | 中文字幕在线观看视频网站 | 亚洲国产免费 | 91久久久久久久久 | 免费成人高清在线视频 | 国产精品视频免费看 |