|
這是超聲波測距裝置,附件里面包含接線圖 ,程序源代碼,用oled顯示
單片機(jī)源程序如下:
- /****************************************Copyright (c)****************************************************
- **
- **
- **
- **--------------File Info---------------------------------------------------------------------------------
- ** File name:
- ** Last modified Date:
- ** Last Version:
- ** Descriptions:
- **--------------------------------------------------------------------------------------------------------
- ** Created by: FiYu
- ** Created date: 2017-02-20
- ** Version: 1.0
- ** Descriptions: HC-SR04超聲波測距實(shí)驗(yàn)
- **--------------------------------------------------------------------------------------------------------
- ** Modified by:
- ** Modified date:
- ** Version:
- ** Descriptions:
- ** Rechecked by:
- **********************************************************************************************************/
- /****-----請閱讀ReadMe.txt進(jìn)行實(shí)驗(yàn)-----***********/
- #include "OLED.h"
- /**********************
- 引腳別名定義
- ***********************/
- sbit ECHO=P0^2;
- sbit TRIG=P0^3;
- #define Distance_MAX 700 //HC-SR04模塊可檢測的最大距離
- unsigned int i;
-
- unsigned int time=0; //測距用時間
- unsigned long S=0; //測距用距離
- bit flag =0; //測距用超出范圍標(biāo)識符
- /**************************************
- 功能描述:計(jì)算距離并在LCD1602屏上顯示
- 入口參數(shù):無
- 返回值:無
- ***************************************/
- void Conut(void)
- {
- time=TH0*256+TL0;
- TH0=0;
- TL0=0;
-
- //顯示漢字
- for(i=0; i<5; i++)
- {
- LCD_P16x16Ch((i+1)*16,0,i);
-
- }
- LCD_P8x16Str(0*16,4,"dance= CM");
- S=(time*1.7)/100; //算出來是CM
- if((S>=Distance_MAX)||flag==1) //超出測量范圍顯示“-”
- {
- flag=0;
- LCD_P8x16Str(0*16,4,"dance=xxxCM");
-
- }
- else
- {
- OLED_ShowChar(6*8,4,S/100%10+'0');
- OLED_ShowChar(7*8,4,S/10%10+'0');
- OLED_ShowChar(8*8,4,S%10+'0');
-
- }
- }
- /**************************************
- 功能描述:計(jì)數(shù)器0初始化函數(shù)
- 入口參數(shù):無
- 返回值:無
- ***************************************/
- void Timer0Init(void)
- {
- AUXR &= 0x7F; //計(jì)數(shù)器0為12T模式
- TMOD &= 0xFD; //計(jì)數(shù)器0為16位不可重裝載模式,TL0,TH0全用
- TMOD |= 0x01; //計(jì)數(shù)器0為16位不可重裝載模式,TL0,TH0全用
- TH0=0;
- TL0=0;
- ET0=1; //允許T0中斷
- }
- /**************************************
- 功能描述:計(jì)數(shù)器0中斷服務(wù)函數(shù)
- 入口參數(shù):無
- 返回值:無
- ***************************************/
- void timer0_int (void) interrupt 1
- {
- flag=1; //中斷溢出標(biāo)志
- }
-
- /**************************************
- 功能描述:啟動HC-SR04模塊
- 入口參數(shù):unsigned char X, unsigned char Y, unsigned char DData
- 返回值:無
- ***************************************/
- void StartModule() //啟動模塊
- {
- TRIG=1; //啟動一次模塊
- delay_ms(5);
- TRIG=0;
- }
- /***************************************************************************
- * 描 述 : 主函數(shù)
- * 入 參 : 無
- * 返回值 : 無
- **************************************************************************/
- int main(void)
- {
-
- /////////////////////////////////////////////////
- //注意: STC15W4K32S4系列的芯片,上電后所有與PWM相關(guān)的IO口均為
- // 高阻態(tài),需將這些口設(shè)置為準(zhǔn)雙向口或強(qiáng)推挽模式方可正常使用
- //相關(guān)IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
- // P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
- /////////////////////////////////////////////////
- P0M1 = 0; P0M0 = 0; //設(shè)置P0.0~P0.7為準(zhǔn)雙向口
- P1M1 = 0; P1M0 = 0; //設(shè)置P1.0~P1.7為準(zhǔn)雙向口
- P2M1 = 0; P2M0 = 0xff; //設(shè)置P2.0~P2.7為推挽輸出
- P3M1 = 0; P3M0 = 0; //設(shè)置P3.0~P3.7為準(zhǔn)雙向口
- P4M1 = 0; P4M0 = 0; //設(shè)置P4.0~P4.7為準(zhǔn)雙向口
- P5M1 = 0; P5M0 = 0; //設(shè)置P5.0~P5.7為準(zhǔn)雙向口
- delay_ms(500); //上電延時
- OLED_Init(); //對OLED屏初始化
- OLED_Fill(0x00); //清屏
- while(1)
- {
- Timer0Init();
- EA=1; //開啟總中斷
-
- while(1)
-
- { StartModule();
- while(!ECHO); //當(dāng)ECHO為零時等待
- TR0=1; //開啟計(jì)數(shù)
- while(ECHO); //當(dāng)ECHO為1計(jì)數(shù)并等待
- TR0=0; //關(guān)閉計(jì)數(shù)
- Conut(); //計(jì)算
- delay_ms(80); //80ms延時
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
超聲波測距 - oled顯示.zip
(1.01 MB, 下載次數(shù): 126)
2018-8-28 11:42 上傳
點(diǎn)擊文件名下載附件
15單片機(jī)
|
|