历史上的今天
返回首页

历史上的今天

今天是:2025年01月10日(星期五)

正在发生

2021年01月10日 | 超声波测距+温度+报警的单片机代码

2021-01-10 来源:51hei

可以测当前距离,当超过阈值距离时,蜂蜜器报警,并且实时显示温度数据

制作出来的实物图如下:
   

单片机源程序如下:


#include

#include

#define uchar unsigned char

#define uint unsigned int

int num=0;

unsigned char table[]={"0123456789"};//显示的数值

//   1602的引脚定义

sbit RW=P2^5;

sbit RS=P2^6;  

sbit E=P2^7;   


//报警引脚定义

sbit feng=P2^4;

sbit led=P1^2;


sbit key1=P1^0;

sbit key2=P1^1;


int numm=0,nnum=0;


void delayms(unsigned int ms)

{

        unsigned char i=100,j;

        for(;ms;ms--)

        {

                while(--i)

                {

                        j=10;

                        while(--j);

                }

        }

}


bit flag;           //温度变量

uint temp;

sbit ds=P1^3;  //温度引脚


//超声波位定义

sbit Trig = P2^1;

sbit Echo = P2^0;

uint time=0;

unsigned long S=0;

bit flagg=0;


void delay2(uchar p)

        {

          uchar l,k;

           for(l=p;l>0;l--)

              for(k=110;k>0;k--);

        }


void delay(uchar z)

{

    while(z--);

}


//温度初始化函数                        

void ds_reste()         

{

        ds=1;

        delay(5);

        ds=0;

        delay(80);

        ds=1;

        delay(14);

        if(ds==0)                 //判断ds总线被拉低

        flag=1;

        else

        flag=0;

        delay(20);

}


//读一位字节

bit ds_read_byte()        

{

         bit dat;

         ds=0;               

         _nop_();

         _nop_();

         ds=1;

         _nop_();

         dat=ds;         

         delay(10);

         return dat;

}


//读一位字节

uchar ds_read()        

{

        uchar i,j,k;

      for(i=0;i<8;i++)

        {

        j=ds_read_byte();

        k=(j<<7)|(k>>1);

        }

         return k;

}


//写入数据

void ds_write(uchar dat)

{

         uchar i;

         for(i=0;i<8;i++)

    {

         ds=0;

         _nop_();

         ds=dat&0x01;

         delay(6);

         ds=1;

         dat=dat>>1;

        }

         delay(6);

}


//读取温度

uint read_temp()         

{

        uchar a,b;

        ds_reste();

        ds_write(0xcc);

        ds_write(0xbe);

        a=ds_read();

        b=ds_read();

        temp=b;

        temp=temp<<8;

        temp=temp|a;

        temp=temp*0.0625*10+0.5;                 

        return temp;

}


//写入命令1602

void write_com(uchar com)           

{

        RS=0;

        RW=0;

        E=0;

        P0=com;           

        delay2(5);

        E=1;

        delay2(5);

        E=0;

}


//写入数据 1602

void write_data(uchar date)        

{

        RS=1;

        RW=0;

        E=0;

        P0=date;               

        delay2(5);

        E=1;

        delay2(5);

        E=0;

}


//1602初始化显示

void init()                                 

{

    RS=0;

        write_com(0x38);

         write_com(0x0c);

         write_com(0x06);

        write_com(0x01);

        write_com(0x80);

}


//温度在1602上显示出来

void display(uint tempp)           

{  

         write_com(0x80+0x0b);                        

         write_data(table[tempp/100]);         

         delay2(0);

  

         write_com(0x80+0x0c);

         write_data(table[tempp%100/10]);           

         delay2(0);        


            write_com(0x80+0x0d);

         write_data('.');                           

         delay2(0);

   

            write_com(0x80+0x0e);

         write_data(table[tempp%100%10]);

         delay2(0);                                                         


         write_com(0x80+0x0f);

         write_data('C');                                    

         delay2(0);


         write_com(0x80+0x09);

         write_data('T');                                    

         delay2(0);


         write_com(0x80+0x0a);

         write_data(':');                                 

         delay2(0);


}


//超声波测距

void Conut(void)

        {  

         time=TH0*256+TL0;

         TH0=0;

         TL0=0;

         S=(time*1.7)/100+1;                //算出来测距值单位是CM

         if((S>1000)||S<1||flagg==1)           //超出测量范围显示“***”

         {         

          flagg=0;

          write_com(0x80+0x40);

          write_data('c');                           

          delay2(0);

         

          write_com(0x80+0x41);

          write_data('j');                           

          delay2(0);         


          write_com(0x80+0x42);

          write_data(':');                           

          delay2(0);



          write_com(0x80+0x43);

          write_data('*');                           

          delay2(0);


          write_com(0x80+0x44);

          write_data('*');                           

          delay2(0);

          write_com(0x80+0x45);

          write_data('*');                           

          delay2(0);


          write_com(0x80+0x46);

          write_data('M');                           

          delay2(0);        //显示M

          write_com(0x80+0x47);

          write_data('M');                           

          delay2(0);        //显示M

推荐阅读

史海拾趣

Hosiden Corporation公司的发展小趣事

作为汽车电子领域的佼佼者,Hosiden在汽车市场的深耕与布局尤为引人注目。公司针对汽车行业的特殊需求,开发了一系列高性能、高可靠性的电子连接器和电缆产品。这些产品不仅满足了汽车制造商对产品质量和性能的高标准要求,还通过提升数据传输速度和降低电磁干扰等方式,为汽车行业的发展提供了有力支持。同时,Hosiden还积极参与汽车行业的标准制定和技术交流活动,为行业的发展贡献了自己的智慧和力量。

Arima Lasers Corp公司的发展小趣事

随着产品线的丰富和技术的成熟,Arima Lasers Corp开始积极寻求市场拓展的机会。公司首先与一些知名的电子设备制造商建立了合作关系,为其提供定制的激光解决方案。这些合作不仅帮助公司扩大了市场份额,也提升了品牌知名度。随后,Arima Lasers Corp进一步拓展了国际市场,与海外企业开展技术交流和贸易往来,推动了公司的全球化发展。

AD Semiconductor公司的发展小趣事

Arima Lasers Corp的初期,是一个典型的初创企业,面临着资金短缺和技术难题的双重压力。然而,公司的研发团队在激光技术方面取得了重大突破,成功开发出一种新型的激光发射器,具有更高的功率和更稳定的性能。这一技术突破不仅吸引了投资者的关注,也为公司在市场上赢得了初步的声誉。随着产品的不断迭代和优化,Arima Lasers Corp逐渐在激光行业中占据了一席之地。

FINECHIPS公司的发展小趣事

FINECHIPS公司自成立以来,始终将技术创新视为企业发展的核心驱动力。公司投入大量资源于研发部门,专注于集成电路(IC)和电子元器件的技术创新。在某一关键时期,FINECHIPS成功研发出一款高性能、低功耗的模拟开关芯片,该芯片凭借其卓越的性能迅速获得市场认可,不仅在国内市场占据一席之地,还成功打入国际市场,为公司带来了显著的品牌影响力和市场份额增长。

Hamlin ( Littelfuse )公司的发展小趣事

FINECHIPS公司始终坚持客户导向的经营理念,深入了解客户需求,提供定制化的产品和服务。在一次与某知名电子产品制造商的合作中,FINECHIPS根据客户的特殊需求,迅速调整产品设计和生产流程,成功开发出了一款符合客户要求的定制化芯片。这次合作不仅加深了双方的合作关系,还为FINECHIPS赢得了更多潜在客户的信任和青睐。

E. Dold & Söhne KG公司的发展小趣事

在电子行业快速发展的背景下,E. Dold & Söhne KG公司始终紧跟科技潮流,致力于技术创新。公司投入大量资源研发新型电子元件和系统,以满足市场对于高性能、高可靠性产品的需求。通过不断的技术创新,E. Dold & Söhne KG公司在行业内树立了良好的口碑,成为众多知名企业的合作伙伴。

问答坊 | AI 解惑

诚骋电子专业兼职翻译人才

招聘兼职翻译、同传译员和外籍英文校对人员等。 我公司是国内知名的翻译公司,可进行十多种语言的相互翻译:汉语、英语、日语、德语、法语、俄语、韩语、意大利语、西班牙语、葡萄牙语、希腊语和荷兰语等。业务范围包括笔译、口译、网站翻译、在线 ...…

查看全部问答>

使用基于图形的物理综合加快FPGA设计时序收敛

传统的综合技术越来越不能满足当今采用 90 纳米及以下工艺节点实现的非常大且复杂的 FPGA 设计的需求了。问题是传统的 FPGA 综合引擎是基于源自 ASIC 的方法,如底层规划、区域内优化 (IPO,In-place Optimization) 以及具有物理意识的综合 (physica ...…

查看全部问答>

使用六西格玛软件JMP进行可靠性分析

  时间:2010-07-05 10:15:35 来源:EEPW 作者: 可靠性是一个在产品的设计、制造和使用的每个环节中都存在的问题。简单地说,所谓可靠性就是产品不易发生故障的程度。众所周知,产品在出厂检验时通常都是合格的,但是随着时间的推移,产 ...…

查看全部问答>

芯片的DATASHEET主要有些什么内容

芯片的DATASHEET主要有些什么内容…

查看全部问答>

wince 下如何实现 俄文文字识别?

wince5.0 下如何实现 俄文文字识别?PB5.0中 local specific support下没有俄文字体,请教! …

查看全部问答>

熟悉fat32的请进--在线等

现在在用K9F2G08X0闪存开发一个U盘。该闪存大小为256M,一共2048个块,每块有64个页。也就是说每块有128K。 但是fat32白皮书中要求每块大小不超过32K。 还有就是该闪存能用fat32文件系统吗?…

查看全部问答>

LM3S8962串口

最近在调试 串口部分,始终没调通,请高手看看怎么回事 #include  \"systemInit.h\"#include  <uart.h> //  UART初始化void uartInit(void){    SysCtlPeriEnable(SYSCTL_PERIPH_UART0);   &nb ...…

查看全部问答>

LED电源和驱动电路主要技术概况

作为一种新的光源,近年来各大公司和研究机构对LED电源和驱动电路的研究方兴未艾。与荧光灯的电子镇流器不同,LED驱动电路的主要功能是将交流电压转换为直流电压,并同时完成与LED的电压和电流的匹配。随着硅集成电路电源电压的直线下降,LED工作电 ...…

查看全部问答>