CT107D(藍橋杯)開發板超聲波模組

2021-09-13 22:04:32 字數 1525 閱讀 8380

超聲波模組測距的簡單寫法:

1 :簡單原理;通過p10引腳傳送8個40khz的脈衝之後開始定時器1開始計時;當p11埠收到訊號的時候停止計時;因為聲音在空氣傳播的速度為340m/s,又因為微控制器乙個機器週期(就是定時器計一次時間)大概是1us;所以每us的距離大概為340*10^3cm/10^6;因為聲音經過反射才使p11埠接收到訊號;所以結果要除以2;得到是0.017cm/us;因為聲音在空氣中的傳播速度會受溫度的影響,所以要更高精度的話需要進行溫度補償;這個我也沒了解現在就先不寫了以後再做補充;

2:定時器0:定時器0的作用是為固定的時間間隔進行超聲波測量;因為如果兩次間隔時間太短會影響測量的;定時器1:定時器暫存器tmod 的復位值為0x00;所以定時器1工作在計時 方式0(16位自動重灌)而且 tcon的復位值也是0x00;即th1==tl1=0;所以定時1不用配置也能用;因為我的**沒有配置定時器1;所以我囉嗦的寫了這一條;當然自己可以配置定時器1的完全不影響使用的;

3:大佬的我感覺寫的挺詳細的優秀部落格: 

4:自己的遇到的問題沒有解決:就是在如果沒有物體接近;那麼我寫的**是要定時器溢位就是走到65535的時候才會結束while()迴圈;   while((rx == 1) && (tf1 ==0 ));   //檢測p11是否有低電平,或者定時器1溢位結束while();rx是p11接收端;

具體**如下:

#include#include#define uchar unsigned char

#define uint unsigned int

unsigned char code t_display=;

unsigned char code t_com=;

unsigned char ds[8];//數碼管顯示陣列

uchar yi,er,san,si,wu,liu,qi,ba;

sbit tx = p1^0; //發射引腳

sbit rx = p1^1; //接收引腳

bit t_flag;

void allinit();

void delayms(uint ms);

void delay10us()

void timer0init(void) //1毫秒@11.0592mhz

void send()

}void main()

else

th1=0;

tl1=0;

th1 = 0;

tl1 = 0;//關閉計時

ds[0] = t_display[distance/100];

ds[1] = t_display[distance/10%10];

ds[2] = t_display[distance%10];

} }

}void time0() interrupt 1

t_time++;

if(t_time == 200)

}/***************************/

void allinit()

藍橋杯CT107D比賽開發板參賽筆記(一)

藍橋杯大賽的專用實驗板是國信長天公司的ct107d微控制器板子,這個板子用起來太多不順手,相信使用過的同學也深有體會。不人性的一面體現在板子擴充套件的四片74hc573鎖存器,這對新手來說打擊可不小。好,首先來看看這坑人的573鎖存器。上圖。四片573由上到下分別連線8位led,數碼管段選,數碼管位...

CT107D(藍橋杯)開發板液晶模組的使用

二 液晶的寫命令和寫資料的方法 dat 要寫入的數 當rs 0 的時候寫入的是命令當rs 1 的時候寫入的是資料 void lcd com uchar dat 寫命令void lcd write uchar dat 寫資料 三 lcd1602一些對應的指令及初始化 功能 設定資料匯流排位數 顯示的行...

CT107D藍橋杯EEPROM使用(8)

今天我給大家講一下eeprom的使用,該記憶體採用的是iic通訊,所有我們要有乙個iic驅動程式,或者自己寫乙個,我前面寫過乙個,我這裡就不寫了。那麼下面我寫乙個開機計數的程式吧,這裡需要顯示出來。這裡我選擇數碼管顯示,數碼管驅動前面也有,我就直接用了 unsigned char read eepr...