超聲波模組測距的簡單寫法:
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...