历史上的今天
今天是: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
上一篇:基于51单片机信号发生器的设计
史海拾趣
|
招聘兼职翻译、同传译员和外籍英文校对人员等。 我公司是国内知名的翻译公司,可进行十多种语言的相互翻译:汉语、英语、日语、德语、法语、俄语、韩语、意大利语、西班牙语、葡萄牙语、希腊语和荷兰语等。业务范围包括笔译、口译、网站翻译、在线 ...… 查看全部问答> |
|
传统的综合技术越来越不能满足当今采用 90 纳米及以下工艺节点实现的非常大且复杂的 FPGA 设计的需求了。问题是传统的 FPGA 综合引擎是基于源自 ASIC 的方法,如底层规划、区域内优化 (IPO,In-place Optimization) 以及具有物理意识的综合 (physica ...… 查看全部问答> |
|
时间:2010-07-05 10:15:35 来源:EEPW 作者: 可靠性是一个在产品的设计、制造和使用的每个环节中都存在的问题。简单地说,所谓可靠性就是产品不易发生故障的程度。众所周知,产品在出厂检验时通常都是合格的,但是随着时间的推移,产 ...… 查看全部问答> |
|
现在在用K9F2G08X0闪存开发一个U盘。该闪存大小为256M,一共2048个块,每块有64个页。也就是说每块有128K。 但是fat32白皮书中要求每块大小不超过32K。 还有就是该闪存能用fat32文件系统吗?… 查看全部问答> |
|
最近在调试 串口部分,始终没调通,请高手看看怎么回事 #include \"systemInit.h\"#include <uart.h> // UART初始化void uartInit(void){ SysCtlPeriEnable(SYSCTL_PERIPH_UART0); &nb ...… 查看全部问答> |
|
作为一种新的光源,近年来各大公司和研究机构对LED电源和驱动电路的研究方兴未艾。与荧光灯的电子镇流器不同,LED驱动电路的主要功能是将交流电压转换为直流电压,并同时完成与LED的电压和电流的匹配。随着硅集成电路电源电压的直线下降,LED工作电 ...… 查看全部问答> |




