基于STM32单片机的智能窗帘仿真设计

硬件设计

链接:https://pan.baidu.com/s/19wTxekm79648fs_1JWFt_Q
提取码:btcm

在这里插入图片描述

代码设计

主程序:

#define __MIAN_C
#include "main.h"
#include "stdio.h"
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "bsp_gpio.h"
#include "bsp_clkconfig.h"
#include "bsp_delay.h"
#include "bsp_lcd1602.h"
#include "bsp_key.h"
#include "bsp_GeneralTim.h" 
#include "bsp_display.h"
#include "bsp_at24c02.h"
#include "bsp_adc.h"
#include "bsp_ds1302.h"
#include "bsp_remote.h"
#include "bsp_28BYJ48.h"

// 局部变量,用于保存转换计算后的电压值 	 
CreatByte Flag;

// ADC1转换的电压值通过MDA方式传到SRAM
extern volatile uint16_t ADC_ConvertedValue;
// 局部变量,用于保存转换计算后的电压值 
uint8_t volatile ds[4] = {8, 30, 16, 20}; //定时控制开时、分、控制关时、分
uint16_t light;    //存储光强
uint8_t volatile light_up = 80; //存储光强上、下限值
uint8_t volatile light_down = 30; //存储光强上、下限值
uint8_t mode = 0; //模式标记。=0手动,=1定时,=2光控
uint8_t moto_state = 0;
uint16_t moto_num = 0;



int main(void)
{	
    uint8_t lowtime = 0; //记录上次采集光强的时间

    // 使用HSI,SYSCLK = 4M * RCC_PLLMul_x, x:[2,3,...16],最高是64MH
    HSI_SetSysClock(RCC_PLLMul_2); //使用内部8MHz晶振,并设置PLL输出为8MHz

    // 端口初始化
    GPIO_Config();
    EEPROM_Init();
    GENERAL_TIM_Init();
    Key_GPIO_Config();
    DelayMs(200);

    if (KEY_ENTER == 0)
    {
        DelayMs(50);
        if (KEY_ENTER == 0)
        {
            EEPROM_WriteByte(PARAM_ADDR, ds[0]);  //写入【定时时间】数据保存
            EEPROM_WriteByte(PARAM_ADDR+1, ds[1]); //写入【定时时间】数据保存存
            EEPROM_WriteByte(PARAM_ADDR+2, ds[2]); //写入【定时时间】数据保存存
            EEPROM_WriteByte(PARAM_ADDR+3, ds[3]); //写入【定时时间】数据保存存
            EEPROM_WriteByte(PARAM_ADDR+4, light_up); //写入【光强上限值】数据保存
            EEPROM_WriteByte(PARAM_ADDR+5, light_down); //写入【光强下限值】数据保存
        }
    }

    LCD_GPIO_Init();
    LCD_Init();
    LCD_Clear();
    DelayMs(200);
    LCD_DispStr(0, 0, "   Welcome!!!   ");
    LCD_DispStr(0, 1, "           By JH");
    DelayMs(1000);

    DS1302_Init();
    // DS1302_WriteTime();
    DS1302_ReadTime(); //读取日期、时间
    ADCx_Init();
#ifndef _SIMULATION_
    REMOTE_TIM_Init(); //仿真时不启用红外遥控
#endif
    ULN_DQ_GPIO_Init();

    LCD_Clear();

    ds[0] = EEPROM_ReadByte(PARAM_ADDR);      //读取存储的【定时时间】数据
    ds[1] = EEPROM_ReadByte(PARAM_ADDR+1);      //读取存储的【定时时间】数据
    ds[2] = EEPROM_ReadByte(PARAM_ADDR+2);      //读取存储的【定时时间】数据
    ds[3] = EEPROM_ReadByte(PARAM_ADDR+3);      //读取存储的【定时时间】数据
    light_up = EEPROM_ReadByte(PARAM_ADDR+4);   //读取存储的【光强上限值】数据
    light_down = EEPROM_ReadByte(PARAM_ADDR+5); //读取存储的【光强下限值】数据
    mode = EEPROM_ReadByte(PARAM_ADDR+6);       //读取存储的【模式】数据

    while (1)
    {
        if (set_f == 0) //正常显示
        {
            DS1302_ReadTime(); //读取日期、时间
            if (timeBufDec[6] != lowtime) //时间过去一秒
            {
                lowtime = timeBufDec[6];         //重新记录时间
                light = ADC_ConvertedValue;   //读取AD值
                light = 100 - light * 100 / 4096; //转换为光强
            }
            DispTime(); //更新显示数据
        }
        else if (set_f < 7) //校准日期、时间
        {
            DS1302_ReadTime(); //读取日期、时间
            DispSetTime();
        }
        else if (set_f < 11) //设置定时
            DispTimerTask();
        else if (set_f < 13) //设置光强控制值
            DispSetLight();

        KeyProcess();
    }
}

/*********************************************END OF FILE**********************/

  • 9
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值