采用stm32单片机+电位器+LCD1602显示屏+蜂鸣器+按键,通过电位器来模拟当前的水位高度,通过扭转电位器来改变水位高度,并且显示到屏幕上,通过按键设置上限值和下限值,超过值蜂鸣器进行报警:下面是相关资料的介绍:文末有资料分享
3-基于stm32单片机水位检测测量报警LCD1602显示(程序+原理图+元件清单+演示视频)


程序部分展示,有中文注释,新手容易看懂
int main(void)
{
u16 adcx,b,adcx1;
u8 temperature=20;
u8 humidity=80;
delay_init(); //延时函数初始化
LED_Init(); //LED端口初始化
TIM3_Int_Init(4999,7199);
LCD1602_Init();
KEY_Init(); //KEY初始化
Adc_Init(); //ADC初始化
while(1)
{
if(KEY0==0)
{
temperature++;
if(temperature>49) temperature=1;
}
if(KEY1==0)
{
humidity++;
if(humidity>99) humidity=50;
}
adcx=Get_Adc_Average(ADC_Channel_8,10); //得到ADC转换值
adcx=(float)adcx*(3.3/4096)*33;
if(adcx>100) adcx=100;
LCD_Write_Command(0x80);//第一行的首地址
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date('H');
LCD_Write_Date('=');
LCD_Write_Date(adcx%1000/100+0x30); //显示水位百位
LCD_Write_Date(adcx%100/10+0x30); //显示水位十位
LCD_Write_Date(adcx%10+0x30); //显示水位个位
LCD_Write_Date('c');
LCD_Write_Date('m');
LCD_Write_Command(0x80+0x40);//显示第二行
LCD_Write_Date('D');
LCD_Write_Date(':');
LCD_Write_Date(temperature%100/10+0x30);
LCD_Write_Date(temperature%10+0x30);
LCD_Write_Date('c');
LCD_Write_Date('m');
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date('G');
LCD_Write_Date(':');
LCD_Write_Date(humidity%100/10+0x30);
LCD_Write_Date(humidity%10+0x30);
LCD_Write_Date('c');
LCD_Write_Date('m');
if(adcx<temperature||adcx>humidity)
{
LED0=1;
BEEP=0;
}
else
{
LED0=0;
BEEP=1;
}
}
}
//定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源
buf++;
if(buf>2)
{
buf=0;
if(s==0)//1个小时计时
{
t++;
}
if(s==1)//5分钟倒计时
{
t--;
if(t<0) t=0;
}
}
if(t>3600)//大于1小时 提醒
{
TIM_Cmd(TIM3, DISABLE); //使能TIM3
LED0=0;
}
}
下面是原理图文件展示:



本文介绍了使用STM32单片机配合电位器、LCD1602显示屏、蜂鸣器和按键,实现水位高度模拟、显示及报警功能的详细过程,包括编程代码和原理图示例。
1035

被折叠的 条评论
为什么被折叠?



