c51编程实现DS18B20温度传感器当数码管显示大于30时,led灯点亮,否则led不亮,c,语言编程怎么实现

1个回答
展开全部
摘要 以下是使用C语言编程实现DS18B20温度传感器,当数码管显示大于30时,LED灯点亮,否则LED不亮的示例代码:
咨询记录 · 回答于2023-06-13
c51编程实现DS18B20温度传感器当数码管显示大于30时,led灯点亮,否则led不亮,c,语言编程怎么实现
怎么改才能实现
以下是使用C语言编程实现DS18B20温度传感器,当数码管显示大于30时,LED灯点亮,否则LED不亮的示例代码:
```#include #include // DS18B20温度传感器库sbit LED = P1^0; // LED灯控制引脚sbit digit1 = P2^0; // 数码管第1位控制引脚sbit digit2 = P2^1; // 数码管第2位控制引脚sbit digit3 = P2^2; // 数码管第3位控制引脚sbit digit4 = P2^3; // 数码管第4位控制引脚unsigned char code SEG_TABLE[] = { // 数码管段码表 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
void delay_ms(unsigned int ms) { // 延时函数,单位ms unsigned int i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 110; j++); }}void display(unsigned char num) { // 数码管显示函数 digit1 = 1; digit2 = 1; digit3 = 1; digit4 = 1; // 关闭所有数码管 switch (num / 1000) { // 显示千位数字 case 0: digit1 = 0; P0 = SEG_TABLE[0]; break; case 1: digit1 = 0; P0 = SEG_TABLE[1]; break; case 2: digit1 = 0; P0 = SEG_TABLE[2]; break; case 3: digit1 = 0; P0 = SEG_TABLE[3]; bre
case 4: digit1 = 0; P0 = SEG_TABLE[4]; break; case 5: digit1 = 0; P0 = SEG_TABLE[5]; break; case 6: digit1 = 0; P0 = SEG_TABLE[6]; break; case 7: digit1 = 0; P0 = SEG_TABLE[7]; break; case 8: digit1 = 0; P0 = SEG_TABLE[8]; break; case 9: digit1 = 0; P0 = SEG_TABLE[9]; break; default: break; }
delay_ms(5); switch (num % 1000 / 100) { // 显示百位数字 case 0: digit2 = 0; P0 = SEG_TABLE[0]; break; case 1: digit2 = 0; P0 = SEG_TABLE[1]; break; case 2: digit2 = 0; P0 = SEG_TABLE[2]; break; case 3: digit2 = 0; P0 = SEG_TABLE[3]; break; case 4: digit2 = 0; P0 = SEG_TABLE[4]; break; case 5: digit2 = 0; P0 = SEG_TABLE[5]; break; case 6: digit2 = 0; P0 = SEG_TABLE[6]; break;
case 7: digit2 = 0; P0 = SEG_TABLE[7]; break; case 8: digit2 = 0; P0 = SEG_TABLE[8]; break; case 9: digit2 = 0; P0 = SEG_TABLE[9]; break; default: break; } delay_ms(5); switch (num % 100 / 10) { // 显示十位数字 case 0: digit3 = 0; P0 = SEG_TABLE[0]; break; case 1: digit3 = 0; P0 = SEG_TABLE[1]; break; case 2: digit3 = 0; P0 = SEG_TABLE[2]; break;
case 3: digit3 = 0; P0 = SEG_TABLE[3]; break; case 4: digit3 = 0; P0 = SEG_TABLE[4]; break; case 5: digit3 = 0; P0 = SEG_TABLE[5]; break; case 6: digit3 = 0; P0 = SEG_TABLE[6]; break; case 7: digit3 = 0; P0 = SEG_TABLE[7]; break; case 8: digit3 = 0; P0 = SEG_TABLE[8]; break; case 9: digit3 = 0; P0 = SEG_TABLE[9]; break;
default: break; } delay_ms(5); switch (num % 10) { // 显示个位数字 case 0: digit4 = 0; P0 = SEG_TABLE[0]; break; case 1: digit4 = 0; P0 = SEG_TABLE[1]; break; case 2: digit4 = 0; P0 = SEG_TABLE[2]; break; case 3: digit4 = 0; P0 = SEG_TABLE[3]; break; case 4: digit4 = 0; P0 = SEG_TABLE[4]; break;
case 5: digit4 = 0; P0 = SEG_TABLE[5]; break; case 6: digit4 = 0; P0 = SEG_TABLE[6]; break; case 7: digit4 = 0; P0 = SEG_TABLE[7]; break; case 8: digit4 = 0; P0 = SEG_TABLE[8]; break; case 9: digit4 = 0; P0 = SEG_TABLE[9]; break; default: break; }
delay_ms(5);}void main() { float temp; unsigned char temp_int; unsigned char flag = 0; while (1) { temp = ds18b20_read_temp(); temp_int = (unsigned char)temp; if (temp_int > 30) { // 当温度大于30时,LED灯点亮
LED = 1; flag = 1; } else { LED = 0; flag = 0; } display(temp_int); // 数码管显示温度整数部分 if (flag) { // 当LED灯点亮时,数码管显示"HI"表示高温 P0 = 0x88;
digit1 = 0; delay_ms(5); P0 = 0x88; digit2 = 0; delay_ms(5); digit1 = 1; digit2 = 1; delay_ms(5); } else { delay_ms(100); // 延时100ms } }}```
在上面的程序中,使用DS18B20温度传感器库读取温度数据,使用display()函数在数码管上显示温度整数部分。在程序中添加一个flag变量,当温度大于30时,将flag设为1表示LED灯点亮,否则将flag设为0表示LED灯不亮。然后根据flag变量的值来控制LED灯的状态和数码管的显示内容。当LED灯点亮时,数码管显示"HI"表示高温。
亲您按我的代码试试
温度传感器库发来一下
人了呢
ds18b20.h和ds18b20.c都发来
这里是一个常用的温度传感器库:1. DHT11/DHT22 温湿度传感器库:https://www.arduino.cc/reference/en/libraries/dht-sensor-library/2. DS18B20 数字温度传感器库:https://www.arduino.cc/reference/en/libraries/dallastemperature/3. LM35 模拟温度传感器库:https://www.arduino.cc/reference/en/libraries/thermistor/4. BMP180/BMP280 气压温度传感器库:https://www.arduino.cc/reference/en/libraries/adafruit-bmp085-library/5. AM2301 数字温湿度传感器库:https://www.arduino.cc/reference/en/libraries/am2301/
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消