51单片机中用keil编写具体程序实现:1602液晶显示器显示DS18B20与HD-SR04数据,距离小于10cm时唤醒总系统,温度大于37度小于40度时蜂鸣器发响,温度大于34度小于等于37度时带动步进电机

时间: 2023-07-31 14:08:24 浏览: 47
以下是基于51单片机的keil编写的程序实现: ```c #include <reg51.h> #include <intrins.h> #define LCD_data P0 //1602液晶数据线 sbit LCD_RS = P2^0; //1602液晶RS引脚 sbit LCD_RW = P2^1; //1602液晶RW引脚 sbit LCD_EN = P2^2; //1602液晶EN引脚 sbit DQ = P3^4; //DS18B20数据线 sbit TRIG = P3^5; //HC-SR04触发引脚 sbit ECHO = P3^6; //HC-SR04回响引脚 sbit BEEP = P3^7; //蜂鸣器引脚 sbit StepP = P1^0; //步进电机正转引脚 sbit StepN = P1^1; //步进电机反转引脚 sbit StepC = P1^2; //步进电机控制引脚 unsigned char dis[16]; //存储显示的字符 //延时函数 void Delay(unsigned int i) { while(i--); } //1602液晶写命令 void Write_Cmd(unsigned char cmd) { LCD_RS = 0; LCD_RW = 0; LCD_data = cmd; LCD_EN = 1; _nop_(); _nop_(); LCD_EN = 0; Delay(10); } //1602液晶写数据 void Write_Data(unsigned char dat) { LCD_RS = 1; LCD_RW = 0; LCD_data = dat; LCD_EN = 1; _nop_(); _nop_(); LCD_EN = 0; Delay(10); } //1602液晶初始化 void LCD_Init() { Write_Cmd(0x38); //设置16*2,5*7点阵,8位数据接口 Write_Cmd(0x0c); //开显示,光标不显示 Write_Cmd(0x06); //文字向右走,光标不动 Write_Cmd(0x01); //清屏 } //DS18B20读取温度函数 float Read_Temp(void) { unsigned char tempdata[2]; unsigned int temp; float t; unsigned char i; DQ = 1; //开始通讯 Delay(5); DQ = 0; Delay(80); DQ = 1; Delay(10); if(DQ) { return 0; } Delay(50); for(i = 0; i < 2; i++) { tempdata[i] = 0; } for(i = 0; i < 8; i++) { DQ = 0; //开始通讯 tempdata[0] >>= 1; tempdata[1] >>= 1; DQ = 1; if(DQ) { tempdata[0] |= 0x80; } Delay(5); } for(i = 0; i < 8; i++) { DQ = 0; //开始通讯 tempdata[0] >>= 1; tempdata[1] >>= 1; DQ = 1; if(DQ) { tempdata[1] |= 0x80; } Delay(5); } for(i = 0; i < 16; i++) { DQ = 0; //开始通讯 temp >>= 1; DQ = 1; if(DQ) { temp |= 0x8000; } Delay(5); } t = (float)temp / 16.0; return t; } //HC-SR04读取距离函数 unsigned int Read_Distance(void) { unsigned int time; TRIG = 0; Delay(5); TRIG = 1; Delay(10); TRIG = 0; while(!ECHO); time = 0; while(ECHO) { time++; Delay(5); } return time / 58; } //步进电机正转函数 void Step_Forward() { StepC = 1; StepP = 0; StepN = 1; Delay(100); StepC = 0; Delay(100); } //步进电机反转函数 void Step_Backward() { StepC = 1; StepP = 1; StepN = 0; Delay(100); StepC = 0; Delay(100); } //主函数 void main() { float temp; unsigned int dist; LCD_Init(); //1602液晶初始化 while(1) { temp = Read_Temp(); //读取温度 dist = Read_Distance(); //读取距离 //显示温度和距离 sprintf(dis, "T:%.2fC D:%dcm", temp, dist); for(i = 0; i < 16; i++) { Write_Data(dis[i]); } if(dist < 10) //距离小于10cm时唤醒总系统 { //唤醒总系统 } if(temp > 37.0 && temp < 40.0) //温度大于37度小于40度时蜂鸣器响 { BEEP = 1; } else { BEEP = 0; } if(temp > 34.0 && temp <= 37.0) //温度大于34度小于等于37度时带动步进电机 { Step_Forward(); } else { Step_Backward(); } } } ```

相关推荐

最新推荐

recommend-type

Keil MDK-ARM各种数据类型占用的字节数 char short int float double

Keil MDK-ARM各种数据类型占用的字节数 char short int float double占用字节数,uCOS-II
recommend-type

基于AT89C51单片机的交通灯控制系统设计与仿真

系统除基本交通灯功能外,还具有通行时间手动设置、可倒计时显示、急车强行通过、交通特殊情况处理等相关功能,实验采用AT89C51单片机为控制芯片,采用"Proteus+KeilμVision2"对交通灯控制系统进行了仿真.
recommend-type

基于STM32单片机流水灯仿真与程序设计

STM32单片机流水灯仿真与程序设计 摘要 本次程序设计和仿真是基于Proteus和keil的环境对STM32F103系列单片机进行流水灯设计,通过配置STM32的GPIO工作模式,实现LED的点亮和熄灭;通过配置8位流水灯程序设计,实现灯...
recommend-type

51单片机中常见问题的解决方法

开发过程中出现了一些问题,一直以为是代码太长,后来才发现是自己的keil软件没有经过破解,所以codesize 一直受到限制。因而我便从网上找了keil v8.02的破解工具,将该软件破解。下面将破解图片献上。​
recommend-type

利用DS1302实现单片机控制的电子万年历

一、训练任务 1. 熟练掌握Proteus软件的使用; 2. 按照设计要求完成电路原理图的设计; 3. 按照设计要求结合Keil软件完成MCU...5. 根据设计任务的要求编写程序,画出程序流程图,并在Proteus下进行仿真,实现相应功能。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。