基于51单片机的流量计制作(流程+程序)

博主福利:100G+电子设计资料合集icon-default.png?t=N7T8https://dwz.date/fyQa

流量计主要应用于检测流体流速,通过检测累计流量可以做到控制流体体积的功能,今天笔者给大家介绍一种基于STC89C52的流量计制作方法,主要能够实现检测实时流速,并在液晶屏上显示出来,累计流量达到限定值后,蜂鸣器产生警报的功能。需要的材料有:BUZZER蜂鸣器,30P无极电容,DC接口(小),10uf极性电容,水流量传感器,2.54间距3芯单排针,LCD1302液晶屏,LED灯,103电位器,9012直插电极管,10K电阻,1K电阻,按键,STC89C52单片机 ,电源开关,晶振,IC座,2.54单排座。 


 系统硬件框图如下:` 
 程序执行的大致流程给大家用流程图表示出来了; 
 下面给大家分享一下笔者使用的源代码:

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "1602.h"
#include "delay.h"

sbit buzzer=P1^2;     //蜂鸣器
sbit key1=P1^1;   //按键1
sbit key2=P1^0;   //按键2

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;              //防止重复

void Init_Timer0(void);    //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{                  
    Init_Timer0();        //定时器0初始化
    EX0=1;         //外部中断0开
    IT0=1;         //边沿触发
    EA=1;          //全局中断开
    LCD_Init();           //初始化液晶
    DelayMs(20);          //延时有助于稳定
    LCD_Clear();          //清屏

    sprintf(dis0,"SH:%4.2fL/s",ShunShi);  //打印瞬时流量
    LCD_Write_String(0,0,dis0);         //显示 瞬时流量                           
    sprintf(dis1,"LJ:%4.1fL   %4.1f",LeiJi,setNum);  //打印累计流量
    LCD_Write_String(0,1,dis1);      //显示累计流量

    buzzer=0;       //关闭蜂鸣器
    while (1)         //主循环
    {
        if(dealFlag==1)   //定时处理流速
        {
            dealFlag=0;
            ShunShi=(float)PluNum*0.00223*2;    //计算瞬时流量 一个脉冲代表0.00223ml 3s处理一次
            LeiJi=LeiJi+(float)PluNum*0.00223;   //累计计算累计流量

            sprintf(dis0,"SH:%4.2fL/s",ShunShi);  //打印瞬时流量
            LCD_Write_String(0,0,dis0);         //显示 瞬时流量                           
            sprintf(dis1,"LJ:%4.1fL   %4.1f",LeiJi,setNum);  //打印累计流量
            LCD_Write_String(0,1,dis1);      //显示累计流量
            PluNum=0;   //清空计数

            if(LeiJi>setNum)   //对比设置和实际值
            {buzzer=0;}        //蜂鸣器报警
            else
            {buzzer=1;}        //关闭蜂鸣器
        }

        if((key1 == 0)||(key2 == 0))    //有按键情况下
        {
            if(rekey == 0)
            {
                DelayMs(10);
                if(key1 == 0)  //按键1按下
                {
                    rekey =1;   //防止重复按下
                    if(setNum<99.9)            //设置值++
                        setNum = setNum + 0.1;
                }
                else if((key2 == 0))//按键2按下
                {
                    rekey =1;   //防止重复按下
                    if(setNum>0.1)             //设置值--
                        setNum = setNum - 0.1;
                }
            }
        }
        else
        {
            rekey = 0;  //防止重复按下
        }

    }
}

void Init_Timer0(void)
{
    TMOD |= 0x01;     //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响          
    TH0=(65536-20000)/256;        //重新赋值 20ms
    TL0=(65536-20000)%256;
    EA=1;            //总中断打开
    ET0=1;           //定时器中断打开
    TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
    TH0=(65536-20000)/256;        //重新赋值 20ms
    TL0=(65536-20000)%256;

    time_ms++;
    if(time_ms%25==0)    //时间定时500ms
    {
        dealFlag=1;
    }
}

/*------------------------------------------------
                 外部中断程序
------------------------------------------------*/
void ISR_Key(void) interrupt 0 using 1
{
    PluNum++;        //脉冲计数
}


 

  • 4
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 基于51单片机的电子时钟项目需要通过Keil编程序,并使用Proteus进行仿真电路搭建。该项目主要包括以下几个步骤: 1. 硬件搭建:按照电子时钟的设计需求,连接51单片机和相关的电子元件,如晶体振荡器、数码管、按键等。通过Proteus软件,可以将这些元件连接起来,搭建出完整的电路。 2. Keil程序:使用Keil软件,编51单片机的C语言程序。该程序需要实现时钟的功能,包括时、分、秒的显示和计时、调整时间、闹钟功能等。通过编程,可以控制数码管的显示,以及对按键进行响应。 3. Proteus仿真:将编好的程序通过Proteus软件连接至搭建好的电路。进行仿真测试时,可以通过模拟时钟的不同状态,调试和验证编程序的正确性和稳定性。仿真过程中,可以检查数码管的显示情况,以及程序对按键输入的响应。 4. 优化和调试:根据仿真过程中的结果,对程序进行优化和调试。可能需要根据具体的需求,修改程序中的一些逻辑或代码,确保电子时钟的功能正常运行,并符合设计要求。 总的来说,基于51单片机的电子时钟项目需要通过Keil编程序,并结合Proteus进行仿真电路搭建和测试。通过这样的开发流程,可以实现一个功能完善、稳定可靠的电子时钟。 ### 回答2: 基于51单片机的电子时钟keil程序和protues仿真电路组成了一个完整的设计方案。 首先,keil程序是用于开发51单片机的集成开发环境,它提供了编译、调试和仿真等功能,能够帮助程序员快速开发出51单片机的应用程序。在电子时钟的设计中,我们可以使用keil来编单片机程序代码,实现时钟的各种功能。 其次,protues是一款电子设计自动化软件,它提供了电子电路仿真和PCB布局设计等功能,能够帮助我们快速验证电路的正确性。在电子时钟的设计中,我们可以使用protues来建立电子时钟的仿真电路,验证单片机代码的正确性和稳定性。 基于51单片机的电子时钟设计,我们可以使用keil来编单片机程序代码,实现时钟的各种功能,包括时间显示、报时功能、闹钟功能等。通过keil的编译、调试和仿真功能,我们可以验证代码的正确性和稳定性。 在电路设计方面,我们可以使用protues来建立电子时钟的仿真电路,通过仿真可以验证电路的正确性和稳定性,包括时钟电路、数码管驱动电路、按钮输入电路等。通过protues的电路仿真功能,我们可以检查电路设计的错误和漏洞,提前解决电路问题。 基于51单片机电子时钟keil程序和protues仿真电路的组合,我们可以全面验证电子时钟的功能和性能,确保设计的准确性和可靠性,为最终实现一个完整的电子时钟设计提供了有力的支持。 ### 回答3: 基于51单片机的电子时钟keil程序和protues仿真电路可以实现以下功能: 1. 显示当前时间:我们可以使用数码管或LCD显示模块来显示当前的时、分和秒。通过编相应的程序,我们可以从单片机的时钟源获取当前时间,并将其转换为可以在数码管或LCD上显示的格式。 2. 时间调整功能:可以通过按钮或旋钮等输入设备来调整电子时钟的时间。当用户按下或旋转输入设备时,我们可以响应用户的操作,并对时钟的时间进行相应的调整。 3. 闹钟功能:我们可以设置闹钟功能,让电子时钟在特定的时间点发出警报声。通过在程序中设置闹钟时间和警报声的播放方式,我们可以实现这一功能。 4. 温湿度监测:如果我们希望电子时钟能够同时监测室内的温度和湿度,我们可以连接温湿度传感器,并在程序中读取传感器的数据。然后,我们可以将这些数据显示在数码管或LCD上。 程序开发过程中,我们可以使用keil来编51单片机程序,通过keil提供的调试工具来测试和调试程序的正确性。同时,我们可以在protues中设计和仿真电子时钟的电路,包括单片机、显示模块、输入设备和传感器等所有的硬件组件。这样,我们可以在protues中验证电路的功能和效果,并进行性能优化和调试。当电路和程序都满足我们的要求后,我们就可以将程序烧录到实际的硬件上,并使用它作为一台完整的电子时钟了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值