/*{HZ即单位s的倒数}本晶振为12MHZ,因此外部的时钟频率为12MHZ,所以内部的时钟频率为(12MHZ)/12=1MH
即HZ,而机械频率为1/(1MHZ),即每完成一次计算(即定时器的值加一)用时0.s,
即1us(微秒).*/
/***********************************************************************************/
//具有模式选择.
#include#define UC unsigned char
#define UI unsigned int
void delay(UI);//延时9.56us程序
sbit beep = P1^3;//用于声音报警
sbit Lv = P1^7;//用于光报警
sbit Hong = P1^6;
sbit QD = P3^7;//K8 //P3^7口(K8)为确定键,
sbit GX = P3^1;//K7//P3^3口(K2)为修改键,
sbit SX = P3^6;//K6//P3^2(K3)为测量键.
sbit BX = P3^0;//K5//个(K7),十(K6),百(K5),三位修改键
sbit a = P1^2;//百位//数码管位选
sbit b = P1^1;//十位
sbit c = P1^0;//个位
sbit trig = P1^4;//方波发射端
sbit echo = P1^5;//超声波接收端
void IntConfiguration();//用来"设置中断"的函数,P3^3口(K2)为修改键,P3^2(K3)为测量键.
void TimeConfiguration();//用来"设置定时器"的函数
sbit K1 = P3^4;//动态
sbit K4 = P3^5;//静态//用于进行模式切换(K1、K4键)
void xiaxian();//修改函数,用来修改下限
void shangxian();//修改函数,用来修改上限
UI min[3]={0,5,0};//报警极限,拆分为"百十个"三位
UI max[3]={3,0,0};//MIN,MAX 用来存储最大和最小值
void MINxianshi(UI);//最小范围和最大范围的显示
void MAXxianshi(UI);
UC code CharacterCode[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//数码管数字字符(P2口)
/********************************主函数*********************************************/
void main()
{
TimeConfiguration();//设置定时器0
IntConfiguration();//设置中断允许,K4键为修改键,K8键为确定键
while(1)
{
MINxianshi(40);//1.s
MAXxianshi(40);//1.s
}
}
/*******************************超声波测距函数********************************************/
void zhongduan_0() interrupt 0//测量中断函数(外部中断0)
{
UI moshi = 0;
UI juli = 0;
UI time = 0;
UI MAX, MIN;
UI TT = 0;//用于第一次测量时给P1^5口置一,以便正确读取数值
UI t1, t2, t3;
UI GE = 0, SHI = 0, BAI = 0;//先定义三个变量,用来显示测量的距离.
a = 0;
b = 0;
c = 0;
P2 =~ 0x00;//防止最后显示的那个数码管一直亮
MAX = max[0]*100 + max[1]*10 + max[2];//