电子开发 | 基础入门 | 电路原理图 | 梯形图实例 | PLC基础   《如果喜欢本站,请按 Ctrl+D 手动收藏!感谢您的支持》一起学习一起进步,电子开发王欢迎您!.

电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册

★电路公式手册,最新版《电子电路公式计算器》,电路公式查询手册 电路公式计算器【电子从业人员必备手册】
☆十天学会单片机实例100 c语言 chm格式。资料内容详细,覆盖例子多,内容广【电子从业人员必备手册】
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 单片机 >> 正文

超声波测距+温度+报警的单片机代码_51单片机超声波测距C语言程序

作者:佚名    文章来源:本站原创    点击数:1277    更新时间:2023/8/6

可以测当前距离,当超过阈值距离时,蜂蜜器报警,并且实时显示温度数据,51单片机超声波测距C语言程序

制作出来的实物图如下:

源代码资料下载 : www.dzkfw.com.cn/Soft/mcu/92.html

 
单片机超声波测距 

单片机超声波测距 

单片机超声波测距实验 
51单片机超声波测距C语言程序部分代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#include<reg52.h>
#include <intrins.h>
#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);
}
</intrins.h></reg52.h>

全部代码到页面下载 www.dzkfw.com.cn/Soft/mcu/92.html
Tags:超声波测距,51单片机,单片机,温度  
责任编辑:admin
  • 上一篇文章:
  • 下一篇文章: 没有了
  • 相关文章列表
    基于51单片机的SHT11温湿度测量仪设计(源码+仿真+文档)
    基于51单片机的恒温控制器系统 protues+keil c
    51单片机数码管显示程序, 共阴数码管显示程序 数码管原理(显示
    七段数码管显示原理研究_数码管显示0~9对应的段码
    单片机C语言编程入门教程  流水灯程序示例
    51单片机学习笔记直流电机驱动(PWM)C语言程序
    MCU-51单片机直流电机驱动(PWM)51单片机驱动直流电机
    基于51单片机—多功能秒表,多功能计时器C语言程序
    STC89C52单片机数字电流表电压表源码与电路图  51单片机电流电压
    自学stm32单片机四个步骤,实用又高效!
    先学51还是先学STM32?STM32和51单片机的区别
    单片机最小系统介绍及电路设计 STM32单片机最小系统
    什么是PIC单片机
    51单片机和STM32单片机的结构有什么不同
    51单片机、AVR单片机和PIC单片机的IO口操作
    关于51单片机IO引脚的驱动能力与上拉电阻
    为什么51单片机的晶振一般使用11.0592? 51单片机常用波特率初值表
    51单片机寄存器功能一览表
    单片机写延时程序的几种方法
    自学单片机编程之中断与时钟程序
    哈佛结构与冯·诺伊曼结构区别以及X86体系
    单片机万年历:公历日期与农历日期的相互转换程序
    AVR定时器1的CTC模式设置
    单片机超声波视觉识别系统的测量软件开发,超声波测距
    51单片机“呼吸灯”程序
    LCD1602的单片机驱动详解
    单片机时钟电路原理
    51单片机入门之静态数码管电路设计
    基于stc89c52的4*4矩阵键盘输入数码管,一个小计算器
    单片机红外遥控器设计
    请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
    1分 2分 3分 4分 5分

    还可以输入 200 个字
    [ 查看全部 ] 网友评论
        没有任何评论
    电子开发网:汇集综合各类电子制作与电路图的网站,plc工控技术,模电数电知识,单片机EDA等等!荟萃电路图网站精华,为工程师创造价值。欢迎关注微信公众号:电子开发网!

    三菱PLC软件 GX Wor

    西门子200smartPLC选

    模拟量转换工程量转

    简述555定时器工作原

    三菱plc控制步进电机

    三菱FX3U系列—高速
     简单三极管逆变器
     TL494制作50HZ逆变
     80W简单的功放电路
     555制作的简易电子
     850热风枪电路图原
     直流12v荧光灯电路
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
    返回顶部
    刷新页面
    下到页底
    晶体管查询