#define k1 P3_4#define csbout P3_5 //超声波发送 #define csbint P3_7 //超声波接收 #define csbc=0.034 #define bg P3_3
unsigned char csbds,opto,digit,buffer[3],xm1,xm2,xm0,key,jpjs;//显示标识
unsigned char convert[10]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段码 unsigned int s,t,i, xx,j,sj1,sj2,sj3,mqs,sx1; bit cl; void csbcj();
void delay(j); //延时函数 void scanLED(); //显示函数 void timeToBuffer(); //void keyscan(); void k1cl(); void k2cl(); void k3cl(); void k4cl(); void offmsd();
void main() //{
EA=1; // TMOD=0x11; // ET0=1; // ET1=1; // TH0=0x00; TL0=0x00; TH1=0x9E; TL1=0x57; csbds=0; csbint=1; csbout=1; cl=0; opto=0xff; jpjs=0; sj1=45; sj2=200; sj3=400; k4cl();
TR1=1; while(1)
显示转换函数 主函数 开中断
设定时器0为计数,设定时器1定时 定时器0中断允许 定时器1中断允许 {
keyscan(); if(jpjs <1) { csbcj(); if(s> sj3) {
buffer[2]=0x76; buffer[1]=0x76; buffer[0]=0x76; }
else if(s buffer[2]=0x40; buffer[1]=0x40; buffer[0]=0x40; }else timeToBuffer(); }
else timeToBuffer(); //将值转换成LED段码 offmsd();
scanLED(); //显示函数 if(s void scanLED() //显示功能模块 {digit=0x04;
for( i=0; i <3; i++) //3位数显示 {
P3=~digit&opto; //依次显示各位数 P1=~buffer; //显示数据送P1口 delay(20); //延时处理
P1=0xff; //P1口置高电平(关闭) if((P3&0x10)==0) //判断3位是否显示完
key=0;
digit> > =1; //循环右移1位 } }
void timeToBuffer() //转换段码功能模块 {
xm0=s/100; xm1=(s-100*xm0)/10; xm2=s-100*xm0-10*xm1; buffer[2]=convert[xm2]; buffer[1]=convert[xm1]; buffer[0]=convert[xm0]; }
void delay(i) {
while(--i); }
void timer1int (void) interrupt 3 using 2 {
TH1=0x9E; TL1=0x57; csbds++; if(csbds> =40) {
csbds=0; cl=1; } }
void csbcj() {
if(cl==1) {
TR1=0; TH0=0x00; TL0=0x00; i=10; while(i--)
{
csbout=!csbout; }
TR0=1;
i=mqs; //盲区 while(i--) { } i=0; while(csbint) { i++;
if(i> =2450) // csbint=0; } TR0=0; TH1=0x9E; TL1=0x57; t=TH0; t=t*256+TL0; s=t*csbc/2; TR1=1; cl=0; } }
void keyscan() //{ xx=0;
if(k1!=1) // {
delay(400); // if(k1!=1) // { while(!k1) {
delay(30); xx++; }
上限值 健盘处理函数 判断开关是否按下 延时去抖动
判断开关是否按下 if(xx> 2000) { jpjs++; if(jpjs> 4) jpjs=0; } xx=0; switch(jpjs) {
case 1: k1cl();break; case 2: k2cl();break; case 3: k3cl();break; case 4: k4cl();break; } } } }
void k1cl() { sj1=sj1+5; if(sj1> 100) sj1=30; s=sj1; } void k2cl() { sj2=sj2+5; if(sj2> 500) sj2=40; s=sj2; } void k3cl() {
sj3=sj3+10; if(sj3> 500) sj3=100;
s=sj3; } void k4cl() { sx1=sj1-1; sx1=sx1/csbc; mqs=sx1/4.5; }
void offmsd() {
if (buffer[0] == 0x3f) buffer[0] = 0x00; }