历史上的今天
返回首页

历史上的今天

今天是:2024年12月09日(星期一)

正在发生

2020年12月09日 | 基于51单片机超声波测距防近视台灯程序

2020-12-09 来源:51hei

程序代码 

仿真图

单片机源程序如下:

#include

#include


/*********************宏定义************************/

#define uchar unsigned char

#define uint unsigned int


/************位定义*****************************/

sbit Trig=P3^7; //超声波模块触发位

sbit LEDRED=P1^0;

sbit LEDGREEN=P1^2;

sbit speaker=P1^7;

sbit person=P1^6;

sbit TLED= P1^5;

/************全局变量声明***********************/

uint H,T;  //定义全局变量,H--距离,T--时间


/***********共阴数码管段码表********************/

uchar a_code[]={                                          //共阴数码管编码0~9

0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,

/*0x77,0x7c,0x39,0x5e,0x79,

0x71*/};


/***************延时函数************************/

void delay(uint z)                                   //*1ms延时函数

{

        uint x,y;

        for(x=z;x>0;x--)

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

}


/*************超声波模块启动函数**************/

void start()

{

        

        Trig=1; //拉高触发信号,启动超声波模块发射超声波

        _nop_();  //延时10us

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        Trig=0;  //拉低触发信号

}



/*****************数码管显示函数*****************/

void  display(unsigned int a,unsigned int b,unsigned int c,unsigned int d)

{

    P2=0xfe;

    P0=a_code[a];

    delay(5);

    P2=0xfd;

    P0=a_code[b];

    delay(5);

        P2=0xfb;

    P0=a_code[c];

    delay(5);

        P2=0xf7;

    P0=a_code[d];

    delay(5);


}



/*****************主函数*************************/

void main()

{

          Trig=0;

         LEDRED=1;

         LEDGREEN=1;

         speaker=0;

     EA=1;

TMOD=0x19;//定时器0工作模式:

               /*GATE=1(由外部中断0引脚及TR0共同启动定时器0)

               C/T=0(定时模式)

                                M1M0=01(16位定时)*/

        TH1=64580/256;

        TL1=65480%256;

        ET1=1;

        TR0=1;        //启动定时器0

        EX0=1;        //开外部中断0

        IT0=1;        //外部中断0设置为下降沿触发方式

        while(1)

{

start();   //调用超声波模块启动函数

display(H/1000,H%1000/100,H%1000%100/10,H%10); //调用数码管显示函数

if(person==1)  

         {

                TLED=1;

                if(H<=25)

                {

                        LEDRED=0;

                        LEDGREEN=1;

                        TR1=1;

                }

                else

                {

                        LEDRED=1;

                        LEDGREEN=0;

                        TR1=0;

                }

        }

        else

        {

                TLED=0;

                LEDRED=1;

                LEDGREEN=1;

                TR1=0;

        }

}

}


/***************外部中断0函数************************

回响输出端高电平宽度测量(上升沿到来时启动定时器0开始计时,

下降沿到来进入外部中断,关闭定时器0,停止计时,计算距离

********************************************************/

void int0() interrupt 0         

{

         TR0=0;                //关闭定时器0

        EX0=0;                //关闭外部中断0

        T=(TH0*256+TL0);//计算超声波传输时间,CPU采用12M时钟,则计算的单位为us

         TH0=0;                        //定时器清0

         TL0=0;

         H=T*0.017;         //计算距离,单位cm(注意:不能用H=(T*17)/1000,这样变成取整了)

         H=H+2;

        TR0=1;                //开启定时器0

        EX0=1;                //开启外部中断0        

}

void time1() interrupt 3

{

        TR1=0;

        TH1=65480/256;

        TL1=65480%256;

        speaker=~speaker;

        TR1=1;

}


推荐阅读

史海拾趣

DATEL Inc公司的发展小趣事

DATEL Inc.公司成立于1970年,总部位于美国马萨诸塞州。公司成立的初衷是解决当时数据采集领域的痛点,如数据准确性低、采集效率低下等问题。创始人带领一支由工程师组成的团队,开始研发第一代数据采集产品。他们日夜兼程,不断试验、调整,最终成功推出了一款体积小、功耗低、易于开发的数据采集器,这款产品迅速在市场中获得了认可。

Displaytech公司的发展小趣事

Displaytech一直致力于技术创新和产品升级。在多年的发展过程中,公司不断推出新的LCD产品,包括触摸屏TFT、单色图形LCD和字符显示模块等。同时,公司还加强了表面贴装能力、PCB组装服务、工具和注塑成型等业务的拓展,进一步提升了整体竞争力。

AKM [Asahi Kasei Microsystems]公司的发展小趣事

2008年,Displaytech推出了HDP Power,这是一项创新的电力解决方案,旨在支持公司客户的电力需求。这一举措不仅体现了Displaytech对客户需求的深刻洞察,也展示了公司在电源领域的技术实力。

硕颉(BITEK)公司的发展小趣事

硕颉科技高度重视知识产权保护,积极申请专利。截至2015年10月,公司已取得台湾63件、美国52件、中国大陆24件、日本4件及韩国10件等共153件专利。这些专利的取得,不仅为公司的技术创新提供了法律保障,也进一步巩固了公司在行业内的竞争地位。

Fuji Electric Co Ltd公司的发展小趣事

硕颉科技股份有限公司成立于1999年11月,总部设在台北市。自成立以来,公司一直专注于积体电路的设计、研发与销售,致力于为客户提供高质量的电子产品解决方案。在创立初期,硕颉便以其创新的技术和严谨的研发态度,迅速在电子行业崭露头角。公司资本额为新台币三亿三仟万元,为公司的稳健发展提供了坚实的资金基础。

Advanced Energy公司的发展小趣事

在发展过程中,AE公司不断突破技术瓶颈,实现了多项重要技术的创新。这些技术突破不仅提升了公司产品的性能和质量,也推动了整个电子行业的发展。随着技术的不断进步,AE公司开始将业务拓展至全球市场。通过与各国客户的合作与交流,AE公司不断了解市场需求,优化产品设计,为全球客户提供更加优质的电源解决方案。

问答坊 | AI 解惑

用于汽车防盗器的低功耗无匙进入加密收发器技术

本文分析了不断变化的汽车盗窃手段,以及相应的汽车防盗技术的发展,重点介绍了TI最新的汽车防盗解决方案—DST+收发器的加密技术及系统组成,并阐述了与之兼容的新一代射频识别(RFID)技术方案—三维天线模拟前端芯片实现无匙进入的工作原理。 由 ...…

查看全部问答>

怎样利用MCS51单片机和PTR8000实现无线传输和发送

如题!谢谢大侠们…… 经过几天的努力,我的无线通信的硬件模块已经调试通过了!谢谢大家的帮助! [ 本帖最后由 zhangzhe0124 于 2009-5-19 10:06 编辑 ]…

查看全部问答>

功率测量模块的设计与实现

功率测量模块的设计与实现           (功率测量模块的硬件设计与实现) 要求:以单片机为核心设计一可测量8路功率(1Kw以内)的模块。在该模块中将测量结果用LCD显示,并通过串行接口传送到上位计算机中。请查阅 ...…

查看全部问答>

WinCE的Notification怎么搞啊?

RT. 好像CE 6里面有那个API,请问该怎么弄啊?…

查看全部问答>

WINCE开机自动运行应用程序问题

我按照如下的方法想做一个开机自运行我的应用程序(MyApp.exe),可怎么也不成功.开机后LCD没有显示(黑屏),我查了下WINDOWS目录,其目录下根本没有MyApp.exe.也就是说我的应用程序(MyApp.exe)没有打包进nk.   1. 假定Windows CE.NET目标工程 ...…

查看全部问答>

PXA270关于CF host口的驱动

开发板处理器是PXA270的,现在想在板子上装一个CF无线网卡(NETGEAR MA701),因为板子是自己做的,所以需要修改一下pcmcia的接口驱动。 我是在drivers/pcmcia/pxa2xx_mainstone.c基础上修改的。 现在问题: 1.CF卡在开放板启动起来以后,CF卡上 ...…

查看全部问答>

i2c读写操作时序

i2c协议中提到有三种可能的传输方式 1 主机(发送器)发送到从机(接收器),传输的方向不会改变   S-->Slave Address-->R/W-->A-->Data-->NA-->P 2 在第一个字节后,主机立即读从机。在第一次响应时,主机(发送器)变成主机(接收器), ...…

查看全部问答>

请教问题:error: linking files for incompatible targets ??

本帖最后由 dontium 于 2015-1-23 12:43 编辑 我自己建了个工程,单个文件编译可以通过,但是链接后就出现: [Linking...] \\"d:\\\\ti\\\\c5500\\\\cgtools\\\\bin\\\\cl55\\" -@\\"Debug.lkf\\" >>   error: linking fi ...…

查看全部问答>

SCI中断老是进不去

今天做了一上午发现SCI的中断程序怎么也进不去,最后解决是重新翻看了TI的SCI模块手册,发现自己有一个使能位没有做,导致无法识别。 在此记下,也许有人会跟我一样傻 RXFFIENA Receive FIFO interrupt enable0 RX FIFO interrupt based on RXFF ...…

查看全部问答>

开工第一件事情就是管理层统一更换为智能手机

今年过年就是不停的玩智能手机,自己手上的iPhone 3G,Google的Nexus和三星的P1010,感觉确实不错,并且开通了微博,包括新浪和腾讯的,不仅仅获取了更多的信息,也推广了公司的信息,尤其是经常用它看看书,把零碎的时间都用起来了。回公司发现 ...…

查看全部问答>