STC89系列单片机多路超声波测距报警器
可按键分别设置几路的报警距离,声光报警。程序是四路的,我屏蔽了一路,喜欢的可以自己去DIY
不多说了,自己看图,下面是部分代码
这个论坛OLED资源非常少,现在1602/12864已经不好玩了,体积大,引脚多,OLED 屏幕非常好玩,可以自己做字库。
关注我,每周都会发布作品。消息不回复的加我,论坛不是一直在线的,欢迎大家学习讨论
QQ:1137035271
#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); //显示距离
}
|