基于STM32单片机光照检测控制系统
一、系统方案
本设计采用STM32单片机作为主控器,液晶1602显示,光照强度检测、按键设置光照阀值,手动自动切换。
二、硬件设计
原理图如下:
三、单片机软件设计
1、首先是系统初始化
u8 i;
u16 adcx;
u16 adc;
unsigned char datas[4];
InitGPIO();
LcdInit();
Adc_Init();
LcdWriteCom(0xc0); //设置数据指针起点 for(i=0;i<16;i++) {LcdWriteData(Disp_Vol[i]); } KEY_Init(); LED_Init(); 12345678
2、液晶显示程序
/*******************************************************************************
/
void LcdWriteCom(uchar com) //写入命令
{
// LCD1602_E = 0; //使能
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
// LCD1602_RS = 0; //选择发送命令
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
// LCD1602_RW = 0; //选择写入
GPIO_ResetBits(GPIOB,GPIO_Pin_2);
// LCD1602_DATAPINS = com; //放入命令
GPIO_Write(GPIOC,0X00FF&com);
Lcd1602_Delay1ms(1); //等待数据稳定
// LCD1602_E = 1; //写入时序
GPIO_SetBits(GPIOB,GPIO_Pin_3);
Lcd1602_Delay1ms(5); //保持时间
// LCD1602_E = 0;
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
}
/函 数 名 : LcdWriteData函数功能 : 向LCD写入一个字节的数据输 入 : dat输 出 : 无
*******************************************************************************/
void LcdWriteData(uchar dat) //写入数据
{
// LCD1602_E = 0; //使能清零
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
// LCD1602_RS = 1; //选择输入数据
GPIO_SetBits(GPIOB,GPIO_Pin_1);
// LCD1602_RW = 0; //选择写入
GPIO_ResetBits(GPIOB,GPIO_Pin_2);
// LCD1602_DATAPINS = dat; //写入数据
GPIO_Write(GPIOC,0X00FF&dat);
Lcd1602_Delay1ms(1);
// LCD1602_E = 1; //写入时序
GPIO_SetBits(GPIOB,GPIO_Pin_3);
Lcd1602_Delay1ms(5); //保持时间
// LCD1602_E = 0;
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
}
/*******************************************************************************
函 数 名 : LcdInit()
函数功能 : 初始化LCD屏
输 入 : 无
输 出 : 无
*******************************************************************************/
void LcdInit() //LCD初始化子程序
{
LcdWriteCom(0x38); //开显示
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x06); //写一个指针加1
LcdWriteCom(0x01); //清屏
// LcdWriteCom(0x80); //设置数据指针起点
}
3、按键程序
void KEY_Scan(void)
{
if(KEY40) //读取K1按键状态
{
Delay(10);
if(KEY40)
{
while(KEY4==0);
zh++;
if(zh>50) zh=50;
} } if(KEY5==0)//读取K2按键状态 { Delay(10);if(KEY5==0){while(KEY5==0);if(zh>1) zh--; } } if(KEY6==0)//读取K1按键状态 { Delay(10);if(KEY6==0){while(KEY6==0); mode=!mode;} }if(KEY7==0)//读取K1按键状态 { Delay(10);if(KEY7==0){while(KEY7==0); if(mode==1)LED1=!LED1;} }
12345678910111213141516171819202122232425262728293031323334}
4、核心算法程序
int main(void)
{
u8 i;
u16 adcx;
u16 adc;
unsigned char datas[4];
InitGPIO();
LcdInit();
Adc_Init();
LcdWriteCom(0xc0); //设置数据指针起点 for(i=0;i<16;i++) {LcdWriteData(Disp_Vol[i]); } KEY_Init(); LED_Init(); while(1) {KEY_Scan();adcx=Get_Adc_Average(ADC_Channel_2,10);if(mode==0){LcdWriteCom(0x80);LcdWriteData('A');LcdWriteData('u');LcdWriteData('t');LcdWriteData('o');}
1234567891011121314151617181920212223else
{
LcdWriteCom(0x80);
LcdWriteData(‘H’);
LcdWriteData(‘a’);
LcdWriteData(‘n’);
LcdWriteData(‘d’);
}adcx=20*adcx*(5.0/4096);LcdWriteCom(0xc3);LcdWriteData('0'+adcx/10);LcdWriteData('0'+adcx%10);LcdWriteCom(0xc3+8);LcdWriteData('0'+zh/10);LcdWriteData('0'+zh%10); 123456789101112
if(mode==0)
{
if((adcx<zh)&&(hw==0)) LED1=0;else LED1=1; } } 12345
}
四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
相关知识
基于STM32的多点温湿度无线传输检测及控制(基于单片机的蔬菜大棚温湿度智能控制系统)
基于STM32的智能花盆控制系统设计
探索智能环境监测:基于STM32的温湿度与光照检测系统
基于STM32单片机的温室环境监测系统设计.pdf
基于STM32单片机远程浇花花盆GSM短信浇水补光灌溉系统
基于stm32单片机智能浇花自动灌溉控制系统Proteus仿真和程序源码全套资料
基于STM32单片机的鲜花售卖机系统设计
基于单片机的花房温度、光照控制系统设计
基于STM32单片机的环境监测系统设计与实现
基于单片机的花房温度、光照控制系统设计.pdf
网址: 基于STM32单片机光照检测控制系统 https://www.huajiangbk.com/newsview782970.html
上一篇: ZigBee无线传感网络光照度监 |
下一篇: 基于51单片机的环境温湿度光强监 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039