STC89系列單片機多路超聲波測距報警器
可按鍵分別設置幾路的報警距離,聲光報警。程序是四路的,我屏蔽了一路,喜歡的可以自己去DIY
不多說了,自己看圖,下面是部分代碼
這個論壇OLED資源非常少,現在1602/12864已經不好玩了,體積大,引腳多,OLED 屏幕非常好玩,可以自己做字庫。
關注我,每周都會發布作品。消息不回復的加我,論壇不是一直在線的,歡迎大家學習討論
QQ:1137035271
IMG_3325.JPG (1.8 MB, 下載次數: 44)
下載附件
2018-12-30 17:53 上傳
IMG_3328.JPG (1.65 MB, 下載次數: 51)
下載附件
2018-12-30 17:53 上傳
#include "REG51.h" //頭文件
#include "oled.h" //OLED的頭文件
#include "bmp.h" //顯示圖片的頭文件
#define u8 unsigned char
#define u16 unsigned int
sbit Trig1 = P1 ^ 3; // 1
sbit Ecno1 = P1 ^ 0; //
sbit Trig2 = P1 ^ 4; // 2
sbit Ecno2 = P1 ^ 1; //
sbit Trig3 = P1 ^ 5; // 3
sbit Ecno3 = P1 ^ 2; //
sbit Trig4 = P1 ^ 6; // 4
sbit Ecno4 = P1 ^ 7; //超聲波模塊管腳定義
//sbit OLED_CS =P1^4; //片選
//sbit OLED_RST =P2^5;//復位
//sbit OLED_DC =P2^4;//數據/命令控制
//sbit OLED_SCL =P2^7;//時鐘 D0(SCLK
//sbit OLED_SDIN =P2^6;//D1(MOSI) 數據
u16 time1=0;
u16 time2=0;
u16 time3=0;
u16 time4=0;
long S1=0;
long S2=0;
long S3=0;
long S4=0; //計算緩存變量
bit flag =0; //溢出標志位
sbit SS1=P3^3; //進入設置模式
sbit SS2=P3^4; //報警距離加
sbit SS3=P3^5; //距離減
sbit SS4=P3^6;
//sbit
//sbit
unsigned long BJS=50; //默認報警距離30CM
unsigned long BJS2=50; //默認報警距離30CM
unsigned long BJS3=50; //默認報警距離30CM
unsigned long BJS4=50; //默認報警距離30CM
char Mode=0; //模式 0正常模式 1調整
void delay(u16 x) //延時函數
{
u16 i,j;
for(i= x;i>0;i--)
for(j=110;j>0;j--);
}
void Int_Init()
{
TMOD=0x01;
TH0=0x00;
TL0=0x00;
TR0=1;
ET0=1;
EA=1;
}
void Key_Mode() //按鍵掃描/模式
{
if(SS1==0) //按鍵按下
{
delay(10); //延時去抖
if(SS1==0) //判斷按鍵是否按下
{
OLED_Clear(); //清屏
}
Mode++; //模式加
if(Mode==2) //模式等于二
{
Mode=0; //模式歸零/正常測量模式
// OLED_Clear(); //清屏
}
while(SS1==0); //松手檢測
// OLED_ShowNum(60,4,BJS,3,16);
}
}
void Conut1(void) //第一路測距
{
time1=TH0*256+TL0; //儲存定時計數器的值
TH0=0x00;
TL0=0x00; //清零
S1=time1*1.7/100; //計算距離
if(flag==1) //標志位置一/超出測量
{
flag=0; //標志位歸零
OLED_ShowString(20,0,"---"); //第一行顯示三杠,表示超量程
// OLED_ShowNum(60,0,S1,3,16);
// OLED_ShowString(75,0,"exceed");
}
else
{
OLED_ShowString(0,0,"A:"); //通道A
OLED_ShowString(50,0,"CM"); //單位
OLED_ShowNum(20,0,S1,3,16); //顯示距離
}
|