欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2509|回復: 2
打印 上一主題 下一主題
收起左側

單片機超聲波測距和控制燈泡亮度程序如何合并在一起就不行了,求幫助

[復制鏈接]
跳轉到指定樓層
樓主
ID:852789 發表于 2020-12-4 18:14 來自觸屏版 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
100黑幣
請教大神們怎么改,兩個是超聲波測距和控制燈泡亮度,但兩個程序到一起燈泡亮度就無法實現了,請問怎么加以改正

#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();        }}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:328014 發表于 2020-12-4 22:47 | 只看該作者
單片機程序合并教程:http://www.raoushi.com/bbs/dpj-157117-1.html
回復

使用道具 舉報

板凳
ID:782582 發表于 2021-1-11 21:39 | 只看該作者
給你個思路,測距和亮度調節的函數分別放在兩個.C文件,先知道每個函數的功能,然后根據你的需要在主函數中調用,只要有動態測量的話肯定是在while(1)循環里編寫的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表