-
/*
功能描述:
按下
按键
k
检测距离,松开锁定结果
按下按键
find
查询历史测量数据
,本程序可查询
5
次历史数据
按下
out
键
退出历史数据查询功能
Test
可不接
*/
#include
#define uchar unsigned char
#define uint
unsigned int
#define duan P1
//
数码管段选接口
sbit w1=P2^0;
//
数码管位选接口
sbit w2=P2^1;
//
数码管位选接口
sbit w3=P2^2;
//
数码管位选接口
sbit w4=P2^3;
//
数码管位选接口
sbit Trig=P0^5;
//<
/p>
测距模块
Trig
接口
< br>
sbit Echo=P3^2;
p>
//
测距模块
echo
接口
sbit test=P3^1;
//
测试灯接口
sbit k=P3^4;
//
测距按键接口
sbit find=P3^5;
//
查询历史数据按键接口
sbit out=P3^6;
//
退出历史查询按键接口
sbit find_light=P2^4;
//
历史数据查询指示灯(绿灯)
sbit whithout_light=P2^5;
//
历史数据查询完毕指示灯(红灯)
sbit warn=P2^6;
bit
succeed_flag;
//
测量成功标志位
uint timeL=0,timeH=0;
//
接收时间数据中间变量
uchar code temp[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint
save[6]={0,0,0,0,0,0};
//
历史数据储存数组
/************************
延时程序
********************************/
void delay(uint z){
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*************************
*
测距模块专用延时
*******************
************/
void delay_20us(){
uchar a
for(a=0;a<100;a++);
}
/*************
****
数码管显示
****************/
void display(uint num){
uchar q,b,s,g;
q=num/1000;
b=num/100%10;
s=num/10%10;
g=num%10;
w1=0;
duan=~temp[q];
delay(2);
//
对传入参数进行分解
//
打开位选
//
段选赋值
w1=1;
//
关闭位选
duan=0xff;
w2=0;
duan=~temp[b];
delay(2);
w2=1;
duan=0xff;
w3=0;
duan=~temp[s];
delay(2);
w3=1;
duan=0xff;
w4=0;
duan=~temp[g];
delay(2);
w4=1;
duan=0xff;
}
/*************************
**************************************/
void main(){
uint d,time=0;
uchar u,s=1;
find_light=1;
whithout_light=1;
P0=0xdf;
test =0;
Trig=0;
EA=1;
//
打开中断总开关
TMOD=0x10;
//<
/p>
定时器
1
工作在方式
1
while(1){
if(k==0){
//
按键按下则测量,松开则锁定
delay(10);
//
延时消抖
if(k==0){
-
-
-
-
-
-
-
-
-
上一篇:(整理)各种轴承英文翻译.
下一篇:51单片机读写内部EEPROM详解