代码实现功能
通过液晶LCD1602液晶实时显示瞬时流量和累计流量、实时温度、设置的累计流量。
通过按键设置累计流量阈值,如果累计流量超过设置阈值,蜂鸣器报警、继电器断开,否则不报警继电器闭合。
unsigned long PluNum=0;//检测速度转化来的脉冲量
unsigned long time_ms; //定时器计数
float ShunShi=0; //瞬时流量
float LeiJi=0; //累计流量
float setNum=1.5; //设置流量值
char dis0[16]; //显示更新暂存
char dis1[16]; //显示更新暂存
unsigned char dealFlag=0; //处理速度标志
bit rekey =0; //防止重复
unsigned char ReadTempFlag=0;//定义读时间标志
int temp1;//温度读取值
float temperature; //实际温度
void Init_Timer0(void); //函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
Init_Timer0(); //定时器0初始化
EX0=1; //外部中断0开
IT0=1; //边沿触发
EA=1; //全局中断开
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear(); //清屏
buzzer=0;relay = 0;DelayMs(200);buzzer=1;relay = 1;//蜂鸣器继电器 上电动作下方便检测硬件
while (1) //主循环
{
if(dealFlag==1) //定时处理流速
{
dealFlag=0;
ShunShi=(float)PluNum*0.00223*2;//计算瞬时流量 一个脉冲代表0.00223ml 3s处理一次
LeiJi=LeiJi+(float)PluNum*0.00223; //累计计算累计流量
ReadTempFlag++;
if(ReadTempFlag>=2)//读取温度标志
{
ReadTempFlag=0;
temp1=ReadTemperature();//读取温度
temperature=(float)temp1*0.0625; //温度值转换
}
sprintf(dis0,"S:%4.2fL/s %4.1f C",ShunShi,temperature); //打印
LCD_Write_String(0,0,dis0); //显示 瞬时流量
LCD_Write_Char(14,0,0xdf); //显示温度符号
sprintf(dis1,"L:%4.1fL %4.1f ",LeiJi,setNum); //打印
LCD_Write_String(0,1,dis1); //显示累计流量
PluNum=0;//清空计数
if(LeiJi>setNum) //对比设置和实际值
{buzzer=0;relay = 1;} //蜂鸣器报警 断开继电器
else
{buzzer=1;relay = 0;} //关闭蜂鸣器 闭合继电器
}
if((key1 == 0)||(key2 == 0))//有按键情况下
{
if(rekey == 0)
{
DelayMs(10);
if(key1 == 0) //按键1按下
{
rekey =1;//防止重复按下
if(setNum<99 xss=removed xss=removed u6309键2按下
{
rekey =1;//防止重复按下
if(setNum>0.1) //设置值--
setNum = setNum - 0.1;
}
}
}
else
{
rekey = 0;//防止重复按下
}
}
}
1