历史上的今天
今天是: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; }
下一篇:基于单片机控制的出租车计价器
史海拾趣
|
本文分析了不断变化的汽车盗窃手段,以及相应的汽车防盗技术的发展,重点介绍了TI最新的汽车防盗解决方案—DST+收发器的加密技术及系统组成,并阐述了与之兼容的新一代射频识别(RFID)技术方案—三维天线模拟前端芯片实现无匙进入的工作原理。 由 ...… 查看全部问答> |
|
如题!谢谢大侠们…… 经过几天的努力,我的无线通信的硬件模块已经调试通过了!谢谢大家的帮助! [ 本帖最后由 zhangzhe0124 于 2009-5-19 10:06 编辑 ]… 查看全部问答> |
|
功率测量模块的设计与实现 (功率测量模块的硬件设计与实现) 要求:以单片机为核心设计一可测量8路功率(1Kw以内)的模块。在该模块中将测量结果用LCD显示,并通过串行接口传送到上位计算机中。请查阅 ...… 查看全部问答> |
|
我按照如下的方法想做一个开机自运行我的应用程序(MyApp.exe),可怎么也不成功.开机后LCD没有显示(黑屏),我查了下WINDOWS目录,其目录下根本没有MyApp.exe.也就是说我的应用程序(MyApp.exe)没有打包进nk. 1. 假定Windows CE.NET目标工程 ...… 查看全部问答> |
|
开发板处理器是PXA270的,现在想在板子上装一个CF无线网卡(NETGEAR MA701),因为板子是自己做的,所以需要修改一下pcmcia的接口驱动。 我是在drivers/pcmcia/pxa2xx_mainstone.c基础上修改的。 现在问题: 1.CF卡在开放板启动起来以后,CF卡上 ...… 查看全部问答> |
|
请教问题: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的中断程序怎么也进不去,最后解决是重新翻看了TI的SCI模块手册,发现自己有一个使能位没有做,导致无法识别。 在此记下,也许有人会跟我一样傻 RXFFIENA Receive FIFO interrupt enable0 RX FIFO interrupt based on RXFF ...… 查看全部问答> |
|
今年过年就是不停的玩智能手机,自己手上的iPhone 3G,Google的Nexus和三星的P1010,感觉确实不错,并且开通了微博,包括新浪和腾讯的,不仅仅获取了更多的信息,也推广了公司的信息,尤其是经常用它看看书,把零碎的时间都用起来了。回公司发现 ...… 查看全部问答> |




