系统软件采用模块化程序设计思想,用C语言编制。控制程序主要有三部分:主程序、定时器TO中断服务程序和定时器T1 中断服务程序。还有一些LED数码管显示程序、A/D转换程序、温度传感器程序设计的子程序。主程序是整个电冰箱的总控制程序,如控制各单元初始化、控制中断、定时、显示,键盘程序的启动、重复、加减等。产品原理 采用温湿度传感器测得冷冻室温度,通过单线与单片机通信,单片机将此温度值进行保存后,通过控制版面的按键输入某一冷冻室温度设定值,这个设定的温度值由单片机送往OLED显示屏。显示的同时,还不断与实测的冷冻室温度进行比较,来控制压缩机的运转状态和电冰箱制冷过程。压缩机运行后,冷冻室温度不断下降,控温程序将对冷冻室温度是否比设定的温度低继续进行比较来控制压缩机停机或保持压缩机开机状态不变。并使用WiFi与手机连接对冰箱温度进行调节。
时间: 2024-02-29 15:55:01 浏览: 19
这段话介绍了一个电冰箱的控制系统,采用了模块化程序设计思想,用C语言编制。控制程序包括主程序、定时器TO中断服务程序和定时器T1中断服务程序,并且还包括LED数码管显示程序、A/D转换程序、温度传感器程序设计的子程序。该系统使用温湿度传感器测量冷冻室温度,并通过单线与单片机通信,将温度值保存后通过控制版面的按键输入某一冷冻室温度设定值,该设定的温度值由单片机送往OLED显示屏。系统不断与实测的冷冻室温度进行比较,来控制压缩机的运转状态和电冰箱制冷过程。当压缩机运行后,冷冻室温度不断下降,控温程序将对冷冻室温度是否比设定的温度低继续进行比较来控制压缩机停机或保持压缩机开机状态不变。此外,该系统还可以使用WiFi与手机连接,对冰箱温度进行调节。
相关问题
用c语言写出一个电冰箱的控制系统,采用了模块化程序设计思想,用C语言编制。控制程序包括主程序、定时器TO中断服务程序和定时器T1中断服务程序,并且还包括LED数码管显示程序、A/D转换程序、温度传感器程序设计的子程序。该系统使用温湿度传感器测量冷冻室温度,并通过单线与单片机通信,将温度值保存后通过控制版面的按键输入某一冷冻室温度设定值,该设定的温度值由单片机送往OLED显示屏。系统不断与实测的冷冻室温度进行比较,来控制压缩机的运转状态和电冰箱制冷过程。当压缩机运行后,冷冻室温度不断下降,控温程序将对冷冻室温度是否比设定的温度低继续进行比较来控制压缩机停机或保持压缩机开机状态不变。此外,该系统还可以使用WiFi与手机连接,对冰箱温度进行调节。
抱歉,由于这是一个比较复杂的控制系统,无法在此处提供完整的代码。但是,我可以提供一些思路和程序框架,帮助你设计和编写该系统。
1. 系统初始化
在主程序中,需要进行各单元的初始化,包括定时器、LED数码管、A/D转换器、WiFi模块等。同时,需要对温度传感器进行初始化,并通过单线与单片机通信,获取冷冻室温度。
2. 设定温度值
用户可以通过控制版面的按键输入某一冷冻室温度设定值,该设定的温度值将会被保存在变量中。同时,该温度值将会被送往OLED显示屏,供用户查看。
3. 温度控制
系统不断测量冷冻室温度,并与设定的温度值进行比较。如果冷冻室温度比设定的温度值高,则控制程序将会启动压缩机,开始制冷过程。相反,如果冷冻室温度比设定的温度值低,则控制程序将会关闭压缩机,以达到节能的目的。在压缩机开始运行后,控制程序需要不断检测冷冻室温度是否比设定的温度低,以决定是否关闭压缩机。
4. WiFi连接
系统还需要实现WiFi连接功能,以便用户可以使用手机远程调节冰箱温度。需要编写相应的程序,实现与手机的通信,并对接收到的指令进行解析和处理。
5. 中断服务程序
系统还需要编写定时器TO和定时器T1中断服务程序,以实现定时器中断。在中断服务程序中,可以进行LED数码管的显示和其他操作。
总体来说,这是一个比较复杂的控制系统,需要进行系统化的设计和编写。以上只是一个简单的程序框架,实际的程序可能会更加复杂。如果你需要更具体的帮助,可以提供更多的信息,我会尽力为你提供帮助。
使用c语言设计程序实现平均值滤波,采用定时中断进行AD采样及滤波,程序适用于STM32
下面是一个简单的使用C语言实现平均值滤波的程序,采用定时中断进行AD采样及滤波,适用于STM32开发板。
首先,需要在STM32的头文件中定义定时器和ADC的相关寄存器地址。
```
#define TIM2_CR1 (*((volatile unsigned long *)0x40000000))
#define TIM2_DIER (*((volatile unsigned long *)0x4000000C))
#define TIM2_SR (*((volatile unsigned long *)0x40000010))
#define TIM2_EGR (*((volatile unsigned long *)0x40000014))
#define TIM2_CNT (*((volatile unsigned long *)0x40000024))
#define TIM2_PSC (*((volatile unsigned long *)0x40000028))
#define TIM2_ARR (*((volatile unsigned long *)0x4000002C))
#define RCC_APB2ENR (*((volatile unsigned long *)0x40021018))
#define ADC_CR2 (*((volatile unsigned long *)0x40012408))
#define ADC_SQR3 (*((volatile unsigned long *)0x40012434))
#define ADC_DR (*((volatile unsigned long *)0x4001244C))
#define GPIOC_CRH (*((volatile unsigned long *)0x40011004))
```
接下来,定义全局变量和函数。
```
#define FILTER_SIZE 10
uint16_t filter[FILTER_SIZE];
uint16_t filter_sum = 0;
uint8_t filter_index = 0;
void TIM2_IRQHandler(void);
void adc_init(void);
void tim_init(void);
```
在主函数中,初始化ADC和定时器,并开启中断。
```
int main(void)
{
adc_init();
tim_init();
NVIC_SetPriority(TIM2_IRQn, 0);
NVIC_EnableIRQ(TIM2_IRQn);
while(1);
}
```
ADC初始化函数如下:
```
void adc_init(void)
{
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
GPIOC_CRH &= ~(GPIO_CRH_CNF0 | GPIO_CRH_MODE0);
GPIOC_CRH |= GPIO_CRH_MODE0_1;
ADC_CR2 |= ADC_CR2_ADON;
ADC_CR2 |= ADC_CR2_CAL;
while (ADC_CR2 & ADC_CR2_CAL);
ADC_SQR3 &= ~ADC_SQR3_SQ1;
ADC_SQR3 |= 0x0A;
ADC_CR2 |= ADC_CR2_EXTSEL;
ADC_CR2 |= ADC_CR2_EXTTRIG;
ADC_CR2 |= ADC_CR2_ADON;
}
```
定时器初始化函数如下:
```
void tim_init(void)
{
RCC_APB1ENR |= RCC_APB1ENR_TIM2EN;
TIM2_CR1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);
TIM2_PSC = 72 - 1;
TIM2_ARR = 1000 - 1;
TIM2_DIER |= TIM_DIER_UIE;
TIM2_EGR |= TIM_EGR_UG;
TIM2_CR1 |= TIM_CR1_CEN;
}
```
定时器中断函数如下:
```
void TIM2_IRQHandler(void)
{
if (TIM2_SR & TIM_SR_UIF)
{
TIM2_SR &= ~TIM_SR_UIF;
uint16_t adc_value = ADC_DR;
filter_sum -= filter[filter_index];
filter_sum += adc_value;
filter[filter_index] = adc_value;
filter_index = (filter_index + 1) % FILTER_SIZE;
uint16_t avg_value = filter_sum / FILTER_SIZE;
}
}
```
在定时器中断函数中,先读取ADC值,然后将其加入到滤波器中,并计算滤波器的平均值。
注意:在使用TIM2_CR1寄存器之前,需要先将RCC_APB1ENR中的TIM2EN位置1,以使能TIM2定时器。同样,在使用ADC_CR2寄存器之前,需要将RCC_APB2ENR中的ADC1EN位置1,以使能ADC1模块。
以上就是一个简单的使用C语言实现平均值滤波的程序,采用定时中断进行AD采样及滤波,适用于STM32开发板。