请教大神们怎么改,两个是超声波测距和控制灯泡亮度,但两个程序到一起灯泡亮度就无法实现了,请问怎么加以改正
#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit P2_0=P2^4;sbit key3=P3^0;sbit key4=P3^1;sbit key1=P3^2;sbit key2=P3^3;uchar zkb,i;void delay(uint z){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}void init() { TMOD=0X01; TH0=(65536-100)/256; TL0=(65536-100)%256; EA=1; ET0=1; TR0=1;}void keyscan() { if(key3==0) { delay(10); if(key3==0) { zkb=11; while(!key3); } } if(key4==0) { delay(10); if(key4==0) { zkb=0; while(!key4); } } if(key1==0) { delay(10); if(key1==0) { if(zkb<10) { zkb++; } while(!key1); } } if(key2==0) { delay(10); if(key2==0) { if(zkb>0) { zkb--; } while(!key2); } } }void main(){ zkb=2; init(); while(1) { keyscan(); }}void time0(void) interrupt 1 { TH0=(65536-100)/256; TL0=(65536-100)%256; ++i; if(i==10) { i=0; } if(zkb>i) { P2_0=1; } else P2_0=0;}
/*Echo接P20,Trig接P21*/#include<reg51.h>#include<intrins.h >typedef unsigned char uchar;typedef unsigned int uint;sbit beep = P2^3;//蜂鸣器sbit we=P2^7;sbit du=P2^6;sbit Re=P2^0; //接收信号sbit Se=P2^1; //发射信号uchar code SMGwe[]={0xfe,0xfd,0xfb};uchar code SMGdu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; uchar wat[4]={0,0,0,0};uint flag=0,t=0,k=0,time;unsigned long S=0;/*====================================函数 : delay(uint z)参数 :z 延时毫秒设定,取值范围0-65535返回值 :无描述 :12T/Fosc11.0592M毫秒级延时====================================*/void delay(uint z){ uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } /*显示函数,显示三位(米. 秒 毫秒)*/void display(){ du=0; if(k==0) P0=SMGdu[wat[0]]|0x80; //第一位显示加上小数点 else P0=SMGdu[wat[k]]; du=1; du=0; we=0; P0=SMGwe[k]; we=1; we=0; if(++k>=3) //三位循环显示,定时器1中断执行显示函数 k=0; }void timer0() interrupt 1{ flag=1; //定时器0时间溢出}void timer1() interrupt 3{ TH1=0xf8 ; //2ms TL1=0xcb; display(); t++; if(t>=400) //发送间隔800ms { t=0; Se=1; //信号发射持续10微秒以上 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); Se=0; //提供一个10微秒以上的脉冲触发信号 }}/*计算距离*/void count(){ time=TH0*256+TL0; //计算周期 TH0=0;//定时器0定时时间清零 TL0=0; S=(float)(time*1.085)*0.017; //计算距离(时间*速度) if(S>=700||flag==1) { flag=0; wat[0]=10; wat[1]=10; wat[2]=10; } else { wat[0]=S%1000/100; wat[1]=S%100/10; wat[2]=S%10; }}void nmd(){ if(S<50) {beep = ~beep;delay(20);}// 蜂鸣器发出滴滴声} void main(){ TMOD=0x11; //打开定时器1,2 16位工作模式 TR1=1; TH0=0; TL0=0; TH1=0xf8 ; //2ms TL1=0xcb; ET1=1; ET0=1; EA=1; while(1) { while(!Re); //接收到信号后开始执行 TR0=1; //定时器0开始计数 while(Re); //信号接收停止后结束 TR0=0; //定时器0结束计数 count(); //距离计算 delay(20); nmd(); }}
|