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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

怎么用lcd1602設定一個值 就是倒車雷達那樣 設置一個危險距離 還能用按鍵調整的

[復制鏈接]
跳轉到指定樓層
樓主
就是倒車雷達那樣 設置一個危險距離 還能用按鍵調整的
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:165046 發表于 2017-3-12 20:01 | 只看該作者
這個關鍵要看你選擇什么樣的測距傳感器了,比如選擇紅外發送、接收模塊,然后通過軟件調節靈敏度!
回復

使用道具 舉報

板凳
ID:151348 發表于 2017-3-12 22:17 | 只看該作者
把以前的程序改了改,你看看能不能用
#include<reg52.h>
#include <intrins.h>
sbit RS=P2^0;
sbit RW=P2^1;
sbit E =P2^2;
sbit BF=P0^7;
sbit k1=P2^3;
sbit k2=P2^4;
sbit beep = P2^5;
unsigned char code digit[ ]={"0123456789"}; //定義字符數組顯示數字

/*****************************************************
函數功能:延時若干毫秒
入口參數:n
***************************************************/
void delay(unsigned char n)
{
   unsigned char i;
        for(i=0;i<n;i++)
          ;
}
/*****************************************************
函數功能:判斷液晶模塊的忙碌狀態
返回值:result。result=1,忙碌;result=0,不忙
***************************************************/
unsigned char BusyTest(void)
  {
    bit result;
         RS=0;       //根據規定,RS為低電平,RW為高電平時,可以讀狀態
    RW=1;
    E=1;        //E=1,才允許讀寫
    _nop_();   //空操作
    _nop_();
    _nop_();
    _nop_();   //空操作四個機器周期,給硬件反應時間       
    result=BF;  //將忙碌標志電平賦給result
    E=0;         //將E恢復低電平
   return result;
  }
/*****************************************************
函數功能:將模式設置指令或顯示地址寫入液晶模塊
入口參數:dictate
***************************************************/
void Write_LCD_command (unsigned char dictate)
{   
    while(BusyTest()==1); //如果忙就等待
         RS=0;                  //根據規定,RS和R/W同時為低電平時,可以寫入指令
         RW=0;   
         E=0;                   //E置低電平(根據表8-6,寫指令時,E為高脈沖,
                          // 就是讓E從0到1發生正跳變,所以應先置"0"
         _nop_();
         _nop_();             //空操作兩個機器周期,給硬件反應時間
         P0=dictate;            //將數據送入P0口,即寫入指令或地址
         _nop_();
         _nop_();
         _nop_();
         _nop_();               //空操作四個機器周期,給硬件反應時間
         E=1;                   //E置高電平
         _nop_();
         _nop_();
         _nop_();
         _nop_();               //空操作四個機器周期,給硬件反應時間
          E=0;                  //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
/*****************************************************
函數功能:將數據(字符的標準ASCII碼)寫入液晶模塊
入口參數:y(為字符常量)
***************************************************/
void Write_LCD_data(unsigned char value)
{
    while(BusyTest()==1);  
          RS=1;           //RS為高電平,RW為低電平時,可以寫入數據
          RW=0;
          E=0;            //E置低電平(根據表8-6,寫指令時,E為高脈沖,
                       // 就是讓E從0到1發生正跳變,所以應先置"0"
          P0=value;           //將數據送入P0口,即將數據寫入液晶模塊
          _nop_();
          _nop_();
          _nop_();
     _nop_();       //空操作四個機器周期,給硬件反應時間
          E=1;          //E置高電平
          _nop_();
          _nop_();
          _nop_();
         _nop_();        //空操作四個機器周期,給硬件反應時間
         E=0;            //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
/*****************************************************
函數功能:對LCD的顯示模式進行初始化設置
***************************************************/
void LcdInitiate(void)
{
    delay(15);             //延時15ms,首次寫指令時應給LCD一段較長的反應時間
    Write_LCD_command(0x38);  //顯示模式設置:16×2顯示,5×7點陣,8位數據接口
        delay(5);               //延時5ms ,給硬件一點反應時間
    Write_LCD_command(0x38);
        delay(5);
        Write_LCD_command(0x38); //連續三次,確保初始化成功
        delay(5);
        Write_LCD_command(0x0c);  //顯示模式設置:顯示開,無光標,光標不閃爍
        delay(5);
        Write_LCD_command(0x06);  //顯示模式設置:光標右移,字符不移
        delay(5);
        Write_LCD_command(0x01);  //清屏幕指令,將以前的顯示內容清除
        delay(5);
}


/***********************************************************
           顯示數字                 
*************************************************************/
void display(unsigned char add,unsigned int x)
{
    unsigned char i,j,m;
    i=x/100;
    j=x/10%10;
        m=x%10;
        Write_LCD_command(add);
        Write_LCD_command(add);
        Write_LCD_data(digit[i]);
        Write_LCD_data(digit[j]);
        Write_LCD_data(digit[m]);
}

/***********************************************************
           顯示字符               
*************************************************************/
void displayWorningChars(unsigned char add)
{
        Write_LCD_command(add);
        Write_LCD_command(add);
        Write_LCD_data('D');
        Write_LCD_data('e');
        Write_LCD_data('n');
        Write_LCD_data('g');
        Write_LCD_data('e');
        Write_LCD_data('r');
        Write_LCD_data('!');
        Write_LCD_data('!');
        Write_LCD_data('!');
}
void erase(unsigned char add)
{
        Write_LCD_command(add);
        Write_LCD_command(add);
        Write_LCD_data(' ');
        Write_LCD_data(' ');
        Write_LCD_data(' ');
        Write_LCD_data(' ');
        Write_LCD_data(' ');
        Write_LCD_data(' ');
        Write_LCD_data(' ');
        Write_LCD_data(' ');
        Write_LCD_data(' ');
}
void displayChars(unsigned char add)
{
        Write_LCD_command(add);
        Write_LCD_command(add);
        Write_LCD_data('s');
        Write_LCD_data('e');
        Write_LCD_data('t');
        Write_LCD_data(':');
}

void main()
{
  unsigned int set_distance=2,num=1;
  unsigned char denger_flag=0;
  beep =0;
  LcdInitiate();
  displayChars(0x80);
  display(0x84,num);

        while(1)
      {
                if (!k1)
                {
                        delay(1);
                        if(!k1)
                        {
                                while(!k1);
                                if(num<1) num=1;
                                num--;
                                display(0x84,num);
                                if(num>set_distance)
                                {
                                        denger_flag=1;
                                }
                                else
                                {
                                        denger_flag=0;
                                        erase(0xc0);
                                }
                        }
                }
                if (!k2)
                {
                        delay(1);
                        if(!k2)
                        {
                                while(!k2);
                                num++;
                                display(0x84,num);
                                if(num>set_distance)
                                {
                                        denger_flag=1;
                                }
                                else
                                {
                                        denger_flag=0;
                                        erase(0xc0);
                                }
                        }
                }
                if(denger_flag==1)
                {       
                        Write_LCD_command(0xc6);
                        Write_LCD_data(' ');
                        Write_LCD_data(' ');
                        Write_LCD_data(' ');
                        displayWorningChars(0xc0);
                        beep =1;
                }
       }
}

tp.png (29.03 KB, 下載次數: 72)

tp.png

LCD1602 按鍵設置.zip

33.19 KB, 下載次數: 12

回復

使用道具 舉報

地板
ID:150257 發表于 2017-3-13 20:19 | 只看該作者

#include<reg51.h>
#include<intrins.h>       
#include"lcd.h"

sbit Trig = P2^1;
sbit Echo = P2^0;
sbit beep = P1^5;

unsigned char PuZh[]=" 00-00-00 ";
unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};

static unsigned char DisNum = 0; //ÏÔê¾óÃÖ¸Õë                                  
       unsigned int  time=0;
           unsigned long S=0;
           bit      flag =0;
           unsigned char disbuff[4]           ={ 0,0,0,0,};
/*******************************************************************************
* oˉ êy Ãû         : main
* oˉêy1|Äü                   : Ö÷oˉêy
* êä    èë         : ÎT
* êä    3ö         : ÎT
*******************************************************************************/
void Conut(void)
        {
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
       
         S=(time*1.7)/100;     //Ëã3öà′êÇCM
         if((S>=700)||flag==1) //3¬3ö2aá¿·¶Î§ÏÔ꾡°-¡±
         {         
          flag=0;
         
          DisplayOneChar(0, 1, ASCII[11]);
          DisplayOneChar(1, 1, ASCII[10]);        //ÏÔê¾μã
          DisplayOneChar(2, 1, ASCII[11]);
          DisplayOneChar(3, 1, ASCII[11]);
          DisplayOneChar(4, 1, ASCII[12]);        //ÏÔê¾M
         }
         else
         {
          disbuff[0]=S%1000/100;
          disbuff[1]=S%1000%100/10;
          disbuff[2]=S%1000%10 %10;
          DisplayOneChar(0, 1, ASCII[disbuff[0]]);
          DisplayOneChar(1, 1, ASCII[10]);        //ÏÔê¾μã
          DisplayOneChar(2, 1, ASCII[disbuff[1]]);
          DisplayOneChar(3, 1, ASCII[disbuff[2]]);
          DisplayOneChar(4, 1, ASCII[12]);        //ÏÔê¾M
         }
        }

       
void zd0() interrupt 1                  //T0ÖD¶ÏóÃà′¼ÆêyÆ÷òç3ö,3¬1y2a¾à·¶Î§
  {
    flag=1;                                                         //ÖD¶Ïòç3ö±êÖ¾
  }

void  StartModule()                          //Æô¶ˉÄ£¿é
  {
          Trig=1;                                             //Æô¶ˉò»′ÎÄ£¿é
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          Trig=0;
  }



void delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}

void Delay10Us_24M(unsigned int n)
{
unsigned int i=0;
char j=0;
for(i=0;i<n;i++)
  for(j=0;j<2;j++);
}
void fengmingqi()
{
   uint i,j,y;

           
               
               for(i=0;i<2000;i++)
               {beep=~beep;for(j=0;j<24;j++);}
               for(y=0;y<2000;y++)
               {beep=~beep;for(j=0;j<25;j++);}
      for(i=0;i<2000;i++)
               {beep=~beep;for(j=0;j<26;j++);}
    for(i=0;i<2000;i++)
               {beep=~beep;for(j=0;j<27;j++);}
            
         
                                                         
                               
         
}

void main(void)
{

         TMOD=0x01;                   //éèT0Îa·½ê½1£¬GATE=1£»
         TH0=0;
         TL0=0;         
         ET0=1;             //ÔêDíT0ÖD¶Ï
         EA=1;                           //¿aÆô×üÖD¶Ï       
  
        InitLcd1602();
        LcdShowStr(0,0,PuZh);
       
        while(1)
        {
                 StartModule();
             while(!Echo);                //μ±RXÎaáãê±μè′y
             TR0=1;                            //¿aÆô¼Æêy
             while(Echo);                        //μ±RXÎa1¼Æêy2¢μè′y

    TR0=0;                                //1رռÆêy
         Conut();                        //¼ÆËã
                         delayms(80);
                if(S<=50)
                {
                fengmingqi();
                }
                else
                        beep=1;
               
              
        }
       
       
                       
}
回復

使用道具 舉報

5#
ID:150257 發表于 2017-3-13 20:19 | 只看該作者
虛榮心像惡鬼 發表于 2017-3-13 20:19
#include
#include       
#include"lcd.h"

我用的是超聲波模塊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲福利一区二区 | 成人精品一区二区三区 | www.久草.com| 亚洲成人网在线 | 日本免费黄色一级片 | 国产一二三区在线 | 中文字幕视频在线 | 国产999精品久久久久久 | 久久国产亚洲 | 亚洲一区中文字幕 | 91精品国产一区二区三区动漫 | 第四色影音先锋 | 久久夜视频 | 激情六月丁香婷婷 | 国产www在线 | 99av成人精品国语自产拍 | 午夜一级黄色片 | 精品欧美一区二区三区久久久 | 国产成人精品午夜 | 在线观看视频一区二区三区 | 免费一区 | 福利视频一区二区 | 中文字幕欧美在线观看 | 成人免费视频7777777 | 亚洲啪啪| 日韩有码一区 | 亚洲一级毛片 | 99精品免费 | 999久久久久久久久6666 | 一级片在线视频 | 久久com| www.久| 中文日本在线 | 久久国产综合 | 中文字幕一区二区三区日韩精品 | 国产精品自产拍 | 亚洲午夜视频 | 日本三级在线 | 亚洲精品99 | 亚洲精品视频免费观看 | 成年免费在线观看 |