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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4967|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的汽車紅外測距程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:126590 發(fā)表于 2016-6-13 23:05 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
#include<STC12.h>
#define uchar unsigned char
#define uint unsigned int
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60
uchar code table[]="0123456789";
uchar code table1[]="D1=";
uchar code table3[]="D2=";
uchar code table2[]="set:";
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^5;
sbit wela=P2^3;
sbit key1=P2^1;
sbit key2=P2^0;
sbit key3=P1^6;
sbit key4=P1^7;
//sfr ADC_CONTR = 0xBC;
//sfr ADC_RES = 0xBD;
sfr ADC_LOW2 = 0xBE;
sfr PLASF = 0x9D;
int distance_danger=30;
int a=0;
int c=0;
int e=0;
int bai,shi,ge;
int AD_result=0;
int AD_result2=0;
int count=0;
int beep_count=0;
int aa=0;
int distance=0,distance2=0;
uchar num;
void delay(uint z)                         //延時
{
   uint x,y;
   for(x=z;x>0;x--)
      for(y=110;y>0;y--);
}
void write_com(uchar com)           //液晶寫命令
{
   lcdrs=0;
   P0=com;
   delay(5);
   lcden=1;
   delay(5);
   lcden=0;
}
void write_data(uchar date)                  //液晶寫數(shù)據(jù)
{
   lcdrs=1;
   P0=date;
   delay(5);
   lcden=1;
   delay(5);
   lcden=0;
}
void init()                                   //1602液晶初始化
{
//    dula=0;
        wela=0;
        lcden=0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
}
void keyone()
{
        if(key1==0&&a==0)
        {
                distance_danger++;
                a=1;
        }
        else if(key1==1)
        {
                a=0;
        }
}
void keytwo()
{
        if(key2==0&&c==0)
        {
                distance_danger--;
                c=1;
        }
        else if(key2==1)
        {
                c=0;
        }
}
void xianshi(int number, int adress)           //數(shù)值位運(yùn)算與顯示
{                 
        write_com(0x80+adress);//84
        if (number>999||number<=0)
        {       
                bai=0;
                shi=0;
                ge=0;
                write_data(table[bai]);
                delay(5);
                write_data(table[shi]);
                delay(5);
                write_data(table[ge]);
                delay(5);
        }
        else if (number>99)
        {
                bai=number/100;
                shi=number%100/10;
                ge=number%100%10;
                write_data(table[bai]);
                delay(5);
                write_data(table[shi]);
                delay(5);
                write_data(table[ge]);
                delay(5);
        }
        else if (number>9)
        {
                bai=0;
                shi=number/10;
                ge=number%10;
                write_data(table[bai]);
                delay(5);
                write_data(table[shi]);
                delay(5);
                write_data(table[ge]);
                delay(5);
        }
        else
        {
                bai=0;
                shi=0;
                ge=number;
                write_data(table[bai]);
                delay(5);
                write_data(table[shi]);
                delay(5);
                write_data(table[ge]);
                delay(5);
        }
}
void InitADC()                 //ad轉(zhuǎn)換初始化
{
        PLASF = 0xff;
        ADC_RES = 0;
        //ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
        delay(2);
}
int AD_cal(int AD)
{
        float y;
        if(AD>=98&&AD<140)
        {
                y=-0.0045*AD*AD+0.715*AD+3.1;       
        }
        else//if(AD>=71&&AD<=98)
        {
                y=0.0344*AD*AD-6.554*AD+341.9;
        }
        if(y>50)
        {
        y=50;
        }
       
        return y;
}
int AD_caculate(char ch)     //         讀取ad
{
        int result=0;
        ADC_CONTR &= !ADC_FLAG;
        result=ADC_RES;
        //ch = 0;
        ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
        return result;
}
int pinjun(char ch)   //20ad轉(zhuǎn)換的平均值
{
        int i;
        float sum1=0;
        int he[30];
        for(i=0;i<20;i++)
        {
                he=AD_caculate(ch);
                sum1+=he;
        }
        sum1=sum1/20;
        return AD_caculate(ch);
} /**/
void beep_time(int x)        //蜂鳴器
{
        beep_count++;
        if(beep_count>x)
        {
                beep_count=0;
                dula=~dula;
                wela=~wela;
        }
}         
void beep_warning(int xg,int yg)
{
        if(yg<=distance_danger)
        {
                beep_time(yg*3);
//                deng=1;
        }
        else if(xg<=distance_danger)
        {
            beep_time(xg*3);
                //yin=~yin;
//                deng=1;
        }
        else
        {
       // P2=0x00;
                dula=0;//yin=1;deng=0;
                wela=1;       
        }
}          
void main()
{
init();
    write_com(0x80);
        write_data(1);       
   
        init();
        InitADC();
        //IE = 0xa0;
        delay(5);
        write_com(0x80+0x40);                                   //顯示"D1="
        for(aa=0;aa<3;aa++)
        {
                write_data(table1[aa]);       
                delay(5);  
        }
        delay(5);
        write_com(0x80+0x48);                                   //顯示"D2="
        for(aa=0;aa<3;aa++)
        {
                write_data(table3[aa]);       
                delay(5);  
        }
        write_com(0x80);                                                //顯示"set="
        for(aa=0;aa<4;aa++)
        {
                write_data(table2[aa]);
                delay(5);          
        }
        //a=0;
        c=0;
        e=0;
         //P2=0x00;
         dula=0;
//        yin=1;
//        deng=0;
        while(1)
        {
        //       
                //dula=0;
                count++;
                keyone();
                keytwo();
//                keytwo();
//                keythree();
                AD_result=pinjun(0);
                AD_result2=pinjun(1);
                distance=AD_cal(AD_result);//
                distance2=AD_cal(AD_result2);
                beep_warning(distance,distance2);
                if(count>10)
                {       
                        delay(5);
                        xianshi(distance_danger,0x04);
                        delay(5);
                        xianshi(distance,0x43);
                        delay(5);
                        xianshi(distance2,0x4b);
                        count=0;
                }
        }
/*
    init();
        write_com(0x80);
        for(num=0;num<11;num++)
        {
            write_data(table[num]);
                delay(5);
        }
        write_com(0x80+0x40);
        for(num=0;num<13;num++)
    {
            write_data(table1[num]);
                delay(5);
        }
        while(1)
        {
          beep=1;
          delay(500);
          beep=0;
          delay(500);
        } */
}

汽車紅外測距程序.docx

13.78 KB, 下載次數(shù): 29, 下載積分: 黑幣 -5

51單片機(jī)控制紅外傳感器測距,通過LC1602顯示

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲va欧美va天堂v国产综合 | 91久久精品国产91久久 | 欧美成人免费在线视频 | 国产一区二区三区久久久久久久久 | 国产精品久久久久久久久久久免费看 | 日韩电影中文字幕 | 国产ts人妖系列高潮 | 国产成人免费一区二区60岁 | 欧美日韩成人在线 | 国产精品成人在线播放 | 亚洲最大福利网 | 成人精品一区二区三区中文字幕 | av一级毛片 | 日韩免费在线观看视频 | 国产高清精品一区二区三区 | 一区二区三区观看视频 | 亚洲网站在线观看 | 日韩午夜在线播放 | 一区在线免费视频 | h视频在线观看免费 | 日本不卡一区 | 亚洲视频中文字幕 | 天天操天天射天天 | 国产免费av在线 | 国产欧美日韩精品一区二区三区 | 国产精品日韩欧美一区二区三区 | 国产精品一区二区三区免费观看 | 自拍偷拍中文字幕 | 国产a级毛片 | 亚洲一区欧美一区 | 色狠狠一区 | 久久不卡 | 亚洲精品一区二区三区四区高清 | 日本免费在线 | 亚洲午夜精品在线观看 | 国产一区久久 | 国产四虎 | 久久99精品久久久 | 国产精品国产a级 | 久久精品一区二区三区四区 | 一级免费在线视频 |