請教大神們怎么改,兩個是超聲波測距和控制燈泡亮度,但兩個程序到一起燈泡亮度就無法實現了,請問怎么加以改正
#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(); }}
|