236、基于51单片机的报警控制(ADC0808,数码管,上下限)

完整资料或定制滴滴我(有偿)见文末。

目录

一、设计功能

二、Proteus仿真

三、原理图

四、程序源码

五、资料包括


一、设计功能

1、使用ADC0808测量一路模拟量(水位、湿度、烟雾等)
2、如果测量值低于阀值,启动继电器;高于阀值,关闭继电器(也可以改成其他方式控制)
3、数码管显示测量结果和阀值
4、按键设置上下限

二、Proteus仿真

三、原理图

四、程序源码

五、资料包括

需要完整的资料可以点击下面的名片,找我要资源压缩包的百度网盘下载地址及提取码。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于51单片机按键控制数码管下限程序,使用P1接口和A/D转换模块: ```c #include <reg51.h> // 定义数码管端口 #define LED P0 // 定义按键端口 sbit KEY = P1^0; // 定义A/D转换相关寄存器 sfr ADC_CONTR = 0xBC; sfr ADC_RES = 0xBD; sfr ADC_RESL = 0xBE; // 定义全局变量 unsigned int limit_low = 0; // 下限 unsigned int limit_high = 9999; // 上限 // 函数声明 void delay(unsigned int ms); void display(unsigned int num); void main() { unsigned int adc_value; while (1) { // 按键检测 if (KEY == 0) { delay(10); // 延时去抖动 if (KEY == 0) // 确认按下 { // A/D转换 ADC_CONTR = 0x80; // 启动转换 while (ADC_CONTR & 0x80); // 等待转换完成 adc_value = ADC_RES; adc_value = (adc_value << 2) | (ADC_RESL & 0x03); // 设置上下限 if (adc_value < 1000) { limit_low = adc_value; } else { limit_high = adc_value; } // 显示上下限 display(limit_low); delay(1000); display(limit_high); delay(1000); } } // TODO: 处理其他业务逻辑 } } // 延时函数,约定每个ms需要延时多少个机器周期 void delay(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 110; j++); } } // 显示函数,将num转换为BCD码并显示在数码管上 void display(unsigned int num) { unsigned int i; unsigned char code[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; for (i = 0; i < 4; i++) { LED = code[num % 10]; num /= 10; delay(1); // 数码管刷新频率 LED = 0x00; // 关闭 } } ``` 该程序的主要思路是: 1. 检测按键是否按下,如果按下则启动A/D转换,并根据转换结果设置上下限; 2. 每隔一段时间显示一次当前的上下限。 需要注意的是,由于51单片机没有内置的A/D转换模块,需要使用外部模块来完成转换。在本程序中,使用了STC89C52RC的内置A/D转换模块来完成转换,通过读取ADC_RES和ADC_RESL寄存器的值来获取转换结果。另外,由于数码管刷新频率较高,需要在display函数中加入适当的延时以保证显示效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值