AT89C51单片机温度检测控制系统设计与LED显示

版权申诉
0 下载量 54 浏览量 更新于2024-11-26 收藏 5KB RAR 举报
资源摘要信息:"基于AT89C51单片机的智能温度检测控制系统设计" 知识点详细说明: 1. AT89C51单片机介绍: AT89C51是一款8位微控制器,属于Atmel公司生产的8051系列,具有4KB的可编程只读存储器(Flash),128字节的RAM,以及32个I/O口。该单片机经常用于各种嵌入式系统和控制领域,因其简单、成本低和易用性而受到青睐。AT89C51的内部结构包含了定时器/计数器、串行口等模块,使其能够处理较为复杂的控制任务。 2. 智能温度检测控制系统概述: 本设计以AT89C51单片机为核心,构建了一个智能温度检测控制系统。该系统能够对环境或指定区域内的温度进行实时监测,并根据预设的参数进行温度控制。在该系统中,温度传感器用于收集温度数据,然后单片机根据这些数据执行相应的控制逻辑。 3. 温度传感器的应用: 系统设计中使用的温度传感器可能为模拟输出型,如热敏电阻(NTC或PTC)或半导体温度传感器。这些传感器能够将温度变化转换为电压信号,供单片机通过模拟到数字转换器(ADC)读取。AT89C51本身并不包含ADC模块,因此可能需要外接ADC芯片来实现模拟信号到数字信号的转换。 4. 控制系统的控制逻辑实现: 控制逻辑的设计是智能温度检测控制系统的核心。这通常涉及编写程序来控制单片机的I/O端口输出。例如,系统可能根据设定的温度阈值控制风扇、加热器或其他设备的开关。这种逻辑通常通过编程语言如C或汇编语言来实现,并通过编程器下载到单片机中。 5. LED闪烁的设计与实现: LED闪烁功能是嵌入式系统中常见的一个示例应用,用于指示系统的状态或警告。在该设计中,LED闪烁功能可能用于表示温度检测的结果。例如,当温度超过设定阈值时,LED灯亮起;低于阈值时,LED灯熄灭或闪烁频率变化。程序中需要对单片机的定时器进行编程,以实现精确的LED闪烁时序控制。 6. 程序设计与调试: 为了实现上述功能,需要对AT89C51单片机进行编程。这通常涉及到使用集成开发环境(IDE),如Keil uVision,编写源代码,然后编译生成可执行的机器码。在实际的开发过程中,调试是一个不可或缺的步骤,可能涉及到硬件仿真和实际硬件测试,以确保程序按预期运行。 7. 文件资源: 提供的“LED闪烁.vi”文件是一个LabVIEW虚拟仪器(VI)文件,LabVIEW是一种基于图形化编程的开发环境,广泛应用于数据采集、仪器控制等领域。该VI文件可能用于演示或开发一个模拟温度控制系统,它显示了如何利用LabVIEW的图形化编程特性来实现LED闪烁和温度监测的功能。 综上所述,这份文件概述了一种基于AT89C51单片机的智能温度检测控制系统的设计思路和实现过程。该系统利用温度传感器收集温度信息,通过单片机执行程序来控制输出设备,并实现LED闪烁作为状态指示。整个系统的设计和实现涉及到硬件选型、电路设计、编程调试以及程序的实际应用等多个方面。

请修改代码,让它实现(1)按下KEY0键,一次采集 ADC 测量的电压值显示在LCD上;(2)按下KEY1键,采集5次ADC 测量的电压值,求平均显示在 LCD 上。int main(void) { u16 adcx; // ADC??? float temp; // ??? float temperate; // ??? u8 times; // ??????? // ??? delay_init(); uart_init(9600); LED_Init(); LCD_Init(); T_Adc_Init(); // ??????? POINT_COLOR=RED; LCD_ShowString(60,50,200,16,16,"Mini STM32"); LCD_ShowString(60,70,200,16,16,"Temperature TEST"); LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(60,110,200,16,16,"2014/3/9"); POINT_COLOR=BLUE; LCD_ShowString(60,130,200,16,16,"TEMP_VAL:"); LCD_ShowString(60,150,200,16,16,"TEMP_VOL:0.000V"); LCD_ShowString(60,170,200,16,16,"TEMPERATE:00.00C"); while(1) { // ???? if(KEY_Scan(0) == KEY0_PRES) { // ??KEY0? adcx = T_Get_Adc(ADC_CH_TEMP); // ??ADC? temp = (float)adcx * (3.3/4096); // ????? LCD_ShowxNum(132,130,adcx,4,16,0); // ??ADC? LCD_ShowxNum(132,150,temp,1,16,0); // ????? temperate = (1.43 - temp) / 0.0043 + 25; // ????? LCD_ShowxNum(140,170,(u8)temperate,2,16,0); // ????? temperate -= (u8)temperate; // ?????? LCD_ShowxNum(164,170,temperate*100,2,16,0X80); // ????? } else if(KEY_Scan(0) == KEY1_PRES) { // ??KEY1? times = 5; // ??5? adcx = 0; // ADC??? while(times--) { adcx += T_Get_Adc(ADC_CH_TEMP); // ??ADC? delay_ms(10); // ??10ms } temp = (float)adcx / 5 * (3.3/4096); // ??????? LCD_ShowxNum(132,150,temp,1,16,0); // ??????? temperate = (1.43 - temp) / 0.0043 + 25; // ??????? LCD_ShowxNum(140,170,(u8)temperate,2,16,0); // ????? temperate -= (u8)temperate; // ?????? LCD_ShowxNum(164,170,temperate*100,2,16,0X80); // ????? } LED0=!LED0; // LED?? delay_ms(250); // ??250ms } }

2023-06-03 上传