?? 超聲波測距.txt
字號:
/*超聲波測距.
*/
#include <AT89X51.H>
#include <intrins.h>
const char LED[]= //定義LED數碼管顯示數字.常量(不帶點)
{0x84, 0xF6, 0x4C, 0x64, 0x36, 0x25, 0x05, 0xF4, 0x04, 0x24};
const char LED_P[]= //定義LED數碼管顯示數字.常量(帶點)
{0x80, 0xF2, 0x48, 0x60, 0x32, 0x21, 0x01, 0xF0, 0x00, 0x20};
char Bai,Shi,Ge;//數碼管顯示位
unsigned long int JuLi;//距離
unsigned char Gao,Di;//存儲計時器高位,低位
void ChuShiHua();//初始化
void FaShe();//發射聲波
void Shou();//接收外部中斷程序
void XianShi();//掃描掃描程序(計時器中斷)
void Deng();//空等待
//主程序------------------------------------------------------
main()
{
ChuShiHua();
while (1)
{
FaShe();
Deng();
}
}
//初始化------------------------------------------------------
void ChuShiHua()
{
IE = 0x88; //開T1中斷
TMOD = 0x01; //定時器1模式0,定時器0模式1
PX0 = 1; //INT0高優先級
PT1 = 0; //T1 低級中斷
IT0 = 0; //INT0電平觸發0
TR1 = 1; //啟動定時器1
}
//空等待------------------------------------------------------
void Deng()
{
unsigned int i,j;
for (i = 0; i < 100; i++)
for (j = 0; j < 100; j++);
}
//發射方波----------------------------------------------------
void FaShe()
{
unsigned int counter;
IE = 0; //關中斷
TH0 = 0;
TL0 = 0; //計數器清零
TR0 = 1; //啟動計算器;
for (counter = 0;counter < 16; )
{
P1 = P1 ^ 0x80;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
counter++;
}
P1_7 = 1;
for (counter = 0;counter < 300; counter++) _nop_();//2.1315
IE = 0x89; //開中斷
}
//收,外部中斷程序---------------------------------------------
void Shou() interrupt 0 //外部中斷INT0
{
IE = 0x00; //關中斷
JuLi = 0;
TR0 = 0;
Gao = TH0;
Di = TL0;
JuLi = JuLi | Gao;
JuLi = JuLi << 8;
JuLi = JuLi | Di;
JuLi = JuLi - 44;
JuLi = JuLi * 85;
JuLi = JuLi/10000;
Bai = JuLi / 100;
Shi = (JuLi - (Bai*100))/10;
Ge = JuLi%10;
IE = 0x88; //關int0中斷,開顯示中斷
}
//顯示中斷程序------------------------------------------------
void XianShi() interrupt 3 //定時器中斷1
{
static char xian_shi_wei = 0; //顯示位
TH1 = TL1 = 0;
if (xian_shi_wei >= 3)
xian_shi_wei = 0;
P0 = 0xFF; //全關了
switch (xian_shi_wei) //開下一個
{
case 0:
P0_2 = 0;
P2 = LED_P[Bai];
break;
case 1:
P0_1 = 0;
P2 = LED[Shi];
break;
case 2:
P0_0 = 0;
P2 = LED[Ge];
break;
}
xian_shi_wei++;
}
//------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -