久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機超聲波測距程序 穩定版

[復制鏈接]
跳轉到指定樓層
樓主
ID:75263 發表于 2015-3-24 23:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這個電腦USB接口害人不淺,供電能力也太弱了,終于找到問題所在了,USB接口供電不足,導致驅動超聲波模塊的時候電壓不穩,芯片程序就容易跑飛,害的我折騰了這么久。這次的程序在上一次的基礎上增加了一些東西,例如看門狗。探測的最遠距離我設置的是三米,因為在沒有考慮溫度的情況下,三米內還是比較準確的,當探測距離超過三米時,數碼管會顯示999.9,好了,程序來了。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

unsigned char code wei[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};  //位碼
unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};          //不帶小數點 段碼
unsigned char code duan1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//帶小數點段碼
unsigned char display[8];
sbit MOSIO=P2^2;
sbit R_CL=P2^3;
sbit S_CL=P2^4;          
sbit TRIG=P1^0;
sbit ECHO=P1^1;
sfr WDT_CONTR=0xe1;
bit flag;

float s;                                                               
int n;
int m;
int y;
int k=0;
void send595();//數據輸入
void out595(void);//數據輸出
void fashechaoshengbo();
void jisuan();

void delay();
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

unsigned char code wei[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};  //位碼
unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};          //不帶小數點 段碼
unsigned char code duan1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//帶小數點段碼
unsigned char display[8];
sbit MOSIO=P2^2;
sbit R_CL=P2^3;
sbit S_CL=P2^4;          
sbit TRIG=P1^0;
sbit ECHO=P1^1;
sfr WDT_CONTR=0xe1;
bit flag;

float s;                                                               
int n;
int m;
int y;
int k=0;
void send595();//數據輸入
void out595(void);//數據輸出
void fashechaoshengbo();
void jisuan();

void delay();





void main()
{ WDT_CONTR=0x33;          //看門狗

ECHO=0;
TRIG=0;
TMOD=0x11;         //設置計時器
TH0=0;          //裝定時器0初值
TL0=0;
EA=1;          //開總中斷
TH1=(65535-5000)/256;
TL1=(65535-5000)%256;
ET0=1;//開定T0中斷
TR1=1;        //啟動定時器0
ET1=1;          //開T1中斷


while(1)
{

while(!ECHO);
TR0=1;
while(ECHO);
TR0=0;
jisuan();
WDT_CONTR=0x33;                 //喂狗

}

}


void send595()           //數據輸入
{
unsigned char a,b,c;
if(a==0)
  {a++;
  c=wei[m];
  for(b=0;b<8;b++)
  {       
  MOSIO=c&0x80;          
  c<<=1;
  S_CL=0;
  S_CL=1;}
  }
if(a==1)
   {
   a--;
   if(m==1)
   {c=duan1[display[m]];}

   else {c=duan[display[m]];}
for(b=0;b<8;b++)
  {
    MOSIO=c&0x80;
        c<<=1;
        S_CL=0;
        S_CL=1;}

   }
   m++;
if(m==y)
   m=0;


}
void out595(void)                        //數據輸出
{
R_CL=0;
delay();
R_CL=1;
}
          

void fashechaoshengbo()
{
TRIG=1;//發射
delay();
TRIG=0;

}



void jisuan()
{long r;
r=TH0*256+TL0;
TH0=0;
TL0=0;
r=r*1.09;
s=0.017*r;

if(s>400||flag==1)
{
s=999.9;
flag=0;
}
n=s*10;
display[3]=n/1000;
display[2]=(n%1000)/100;
display[1]=((n%1000)%100)/10;
display[0]=((n%1000)%100)%10;
if(s<10)y=2;
if(s>10&&s<100)y=3;
if(s>100&&s<1000)y=4;
}
void T1_time()interrupt 3
{  
TH1=(65535-5000)/256;
TL0=(65535-5000)%256;
send595();
out595();
k++;
if(k==30)             //150ms發射一次
{
k=0;
fashechaoshengbo();
}
}
void T0_time()interrupt 1
{
flag=1;            //T0中斷溢出標志位
}


void delay()
{int i;
for(i=0;i<10;i++);
}





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

使用道具 舉報

沙發
ID:75263 發表于 2015-3-24 23:15 | 只看該作者
        超聲波測距(不穩定版)
搗鼓了一天多,總算是弄出來了一些東西,別人曬老婆孩子,我曬代碼,,是不是有點屌絲啊~~~這次寫出來的超聲波測距并數碼管顯示程序還不太穩定,容易亂碼,但是短時間內運行還是可以的,50cm以內測距比較準確,不廢話了,上代碼!
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code wei[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};  //位碼
unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};         //不帶小數點 段碼
unsigned char code duan1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//帶小數點段碼
unsigned char display[4];
sbit MOSIO=P2^2;
sbit R_CL=P2^3;
sbit S_CL=P2^4;          
sbit TRIG=P1^0;
sbit ECHO=P1^1;
bit flag;

long s;       
int n;
int m;
int y;
int k=0;
void send595();//數據輸入
void out595(void);//數據輸出
void fashechaoshengbo();
void jisuan();

void delay();





void main()
{
//ECHO=0;
TRIG=0;
TMOD=0x11;
TH0=0;         //裝定時器1初值
TL0=0;
EA=1;         //開總中斷
TH1=(65535-9174)/256;
TL1=(65535-9174)%256;
ET0=1;//開定T0中斷
TR1=1;        //啟動定時器0
ET1=1;         //開T1中斷


while(1)
{



while(!ECHO);
TR0=1;  //啟動定時器1
while(ECHO);
TR0=0;
jisuan();



}

}


void send595()          //數據輸入
{
unsigned char a,b,c;
if(a==0)
  {a++;
  c=wei[m];
  for(b=0;b<8;b++)
  {       
  MOSIO=c&0x80;         
  c<<=1;
  S_CL=0;
  S_CL=1;}
  }
if(a==1)
   {
   a--;
   if(m==1)
   {c=duan1[display[m]];}

   else {c=duan[display[m]];}
for(b=0;b<8;b++)
  {
    MOSIO=c&0x80;
c<<=1;
S_CL=0;
S_CL=1;}

   }
   m++;
if(m==y)
   m=0;
  
  
}
void out595(void)        //數據輸出
{
R_CL=0;
delay();
R_CL=1;
}

void fashechaoshengbo()
{
TRIG=1;        //發送高電平
delay();
TRIG=0;
}


void jisuan()
{ long r;
r=TH0*256+TL0;
TH0=0;
TL0=0;
r=r*1.09;
s=0.017*r;
n=s*10;
if((s>400)||flag==1)
{
s=999.9;
flag=0;
}
display[3]=n/1000;
display[2]=(n%1000)/100;
display[1]=((n%1000)%100)/10;
display[0]=((n%1000)%100)%10;
if(s<10)y=2;
if(s>10&&s<100)y=3;
if(s>100&&s<1000)y=4;
}

void T1_time() interrupt 3
{
TH1=(65535-9174)/256;
TL1=(65535-9174)%256;
k++;
send595();
out595();

if(k==80)
{
fashechaoshengbo();
k=0;
}
}         
void T0_time() interrupt 1
{
flag=1;
}


void delay()
{int i;
for(i=0;i<10;i++);
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久久冷 | 久久久91精品国产一区二区三区 | 国产玖玖 | 国产亚洲人成a在线v网站 | 99国产精品99久久久久久 | 色视频一区二区 | 99热这里都是精品 | 91精品国产美女在线观看 | 国产成人精品网站 | 久草网址 | 男人天堂99 | 看av电影| 免费看国产一级特黄aaaa大片 | 羞羞的视频在线看 | 在线视频日韩 | 久久大陆| 台湾a级理论片在线观看 | 一级欧美视频 | 亚洲精品一区二三区不卡 | 一本一道久久a久久精品综合蜜臀 | 一区二区三区国产好 | 国产精品污www一区二区三区 | 久久久久久一区 | 亚洲精品国产第一综合99久久 | 国产精品久久久久久久久久免费看 | 理论片免费在线观看 | 伊人影院99| 中文字幕不卡 | 黑人精品 | 一级毛片视频 | 亚洲日本欧美日韩高观看 | 天天看天天爽 | 国产蜜臀| 最近中文字幕免费 | 日韩欧美一区二区三区免费观看 | 日韩日韩日韩日韩日韩日韩日韩 | 中文字幕日韩欧美一区二区三区 | 美女131mm久久爽爽免费 | 亚洲视频免费观看 | 日韩影院在线观看 | 亚洲欧美激情精品一区二区 |