单片机数字电流表电压表源码与电路图

发布者:电子设计艺术家最新更新时间:2020-08-27 来源: 51hei关键字:单片机  数字电流表  电压表 手机看文章 扫描二维码
随时随地手机看文章

单片机数字电流表电压表电路原理图如下:
   

单片机源程序如下:

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include

#include "1602.h"

#include "delay.h"

#include "i2c.h"


char dis0[16];                           //打印数组初始化

unsigned long time_20ms=0;                   //定时器计数


float Volt=0.0;                          //检测电压

float Acurrent=0.0;                                  //检测电流


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

void uartSendStr(unsigned char *s,unsigned char length);

void UART_Init(void);

void uartSendByte(unsigned char dat);


void main (void)

{     

        unsigned char midvolt,midcur;  //电压电流中间变量值


        Init_Timer0();        //定时器0初始化

        UART_Init();                  //串口初始化

                     

        LCD_Init();           //初始化液晶

        DelayMs(20);          //延时有助于稳定

        LCD_Clear();

        sprintf(dis0,"My Designer!!  ");//打印

        LCD_Write_String(0,0,dis0);//显示第一行

        sprintf(dis0,"V:%3.2fv A:%3.2fA",Volt,Acurrent);//打印电压电流值

        LCD_Write_String(0,1,dis0);//显示第二行

        uartSendStr("reday ok!!",10);

        while (1)         //主循环

        {

                midvolt=ReadADC(1);                                //读取AD检测到的 电压值

                DelayMs(50);          //延时有助于稳定

                midcur=ReadADC(0);                //读取电流转化后的电压值


                Volt=(float)midvolt*5.13/255*3;                //计算出电压 *3表示分压值

                Acurrent=(float)midcur*5.13/255;                //计算出电流

                                                                                               

                if(Acurrent>2.62)                         //如果电流转换后的电压值超过2.62

                {

                        Acurrent=(Acurrent-2.62)/0.185;         //电流模块 电压转换计算

                }

                else

                {

                        Acurrent=0;

                }       


                sprintf(dis0,"V:%3.2fv A:%3.2fA",Volt,Acurrent);//打印电压电流值

                LCD_Write_String(0,1,dis0);//显示第二行

//                uartSendStr(dis0,16);          //串口上报

//                uartSendStr("n",1);                           //换行

                DelayMs(200);          //延时有助于稳定

        }

}



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_20ms++;

}



void UART_Init(void)

{

    SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  

    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装

    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz

        TL1 = TH1;  

    TR1   = 1;                  // TR1:  timer 1 打开                        

    EA    = 1;                  //打开总中断

    ES    = 1;                  //打开串口中断

}


void uartSendByte(unsigned char dat)

{

        unsigned char time_out;

        time_out=0x00;

        SBUF = dat;                          //将数据放入SBUF中

        while((!TI)&&(time_out<100))  //检测是否发送出去

        {time_out++;DelayUs2x(10);}        //未发送出去 进行短暂延时

        TI = 0;                                                //清除ti标志

}


void uartSendStr(unsigned char *s,unsigned char length)

{

        unsigned char NUM;

        NUM=0x00;

        while(NUM        {

                uartSendByte(*s);  //放松单字节数据

                s++;                  //指针++

                NUM++;                  //下一个++

           }

}


void UART_SER (void) interrupt 4         //串行中断服务程序

{

        if(RI)                        //判断是接收中断产生

        {

                RI=0;                      //标志位清零

        }

        if(TI)  //如果是发送标志位,清零

        TI=0;

}


……………………


关键字:单片机  数字电流表  电压表 引用地址:单片机数字电流表电压表源码与电路图

上一篇:LCD1602简易计算器实物与仿真
下一篇:51单片机读写RC522卡参考例程及上位机调试软件源码

推荐阅读最新更新时间:2024-11-13 08:30

基于单片机控制的智能晾衣架控制
0 引言 面对多变的天气,家庭主妇们每天晾晒衣物的时候都感到很困惑,到底是放室内还是放室外呢?因为要上班,可能更多的家庭会选择把衣物放在室内阳台晾晒,随之带来的问题就是衣物晾晒程度不一,空间受到限制。如果碰到阴天或雨天,衣服要好多天才会晾干。现在市面上出现了很多智能晾衣架,大多数都是放在室内,主要解决了操作方便和空间的问题,但是仍然不能达到晾晒衣物均匀的目的。本设计中的智能晾衣架安装在阳台外面,根据光照传感器和湿度传感器的参数来决定衣架的收与放,无论天气什么情况,它能很好的使衣物均匀晾干且具有下雨提示功能。 1 组成 本课题研究的智能晾衣架系统是以单片机为核心,通过湿度传感器和光照传感器检测天气情况。湿度传感器与光照传感器分
[单片机]
单片机的时钟周期机器周期
时钟周期 时钟周期也称为震荡周期,定义为时钟脉冲的倒数,是计算机中最基本, 最小的时间单位。 机器周期 在计算机中,为了便于管理,通常把一条指令执行划分为若干个阶段,每一个阶段完成一项任务。如: 取指令、存储器读,、存储器写等,这每一项工作称为一个基本操作。 完成一个基本操作所需要的时间为机器周期,一个机器周期由若干个S周期(状态周期)组成。 指令周期 执行一条指令所需要的时间, 一般由若干个机器周期组成。指令不同,所需要的机器周期也不同。 对于一些简单的单字节指令, 在取指令周期中, 指令取出到指令寄存器后, 立即译码执行,不再需要其他的机器周期。 对一些比较复杂的指令, 例如:转移指令、 乘法指令,则需要两个或两个以上的机器周
[单片机]
基于51单片机1602库+显示函数
LCD1602.c #include reg52.h #include LCD1602.h unsigned char TempBuffer ; ///////////////////////////////////////////////////// //////////////////五位数字显示转换/////////////////// ///////////////////////////////////////////////////// void IntToStr(unsigned int t, unsigned char *str, unsigned char n) { unsigned char
[单片机]
基于51<font color='red'>单片机</font>1602库+显示函数
TinyML使微控制器具有AI机器学习功能
TinyML证明了小芯片也可以发觉更多可能。这种新方法不是在大型,耗电的云端计算机上运行复杂的机器学习(ML)模型,而是在终端设备上运行优化的识别模型,而这些微控制器仅消耗不超过几毫瓦的功率。 在Arm和行业领导者Google,Qualcomm等人的支持下,这一新兴的细分市场tinyML有潜力改变我们物联网(IoT)处理数据的方式,其中数十亿个微型设备已用于提供更大的洞察力以及增强消费,医疗,汽车和工业等领域的效率。 为什么要在微控制器上使用TinyML? 诸如Arm Cortex-M系列之类的微控制器是ML的理想平台,因为它们已被广泛使用。它们可以快速,高效地执行实时计算,因此可靠性高,响应速度快,并且由于它们仅消耗
[嵌入式]
MSP430F44X单片机SPI接口驱动C语言程序
#include msp430x44x.h char MST_Data=0X00,SLV_Data=0XFF; void Init(void); void main(void) { unsigned int i; WDTCTL=WDTPW+WDTHOLD; Init(); _EINT(); P3OUT&=~0X020; P3OUT|=0X020; i=50000; do(i--); while(i!=0); while(1) { TXBUF0=MST_Data; LPM0;
[单片机]
什么是电压表
测量电路中电压值的仪表统称为电压表,也称为伏特表。电压表根据量程和计算单位的不同可分为毫伏表、伏特表、千伏表等,在其表盘上分别标有mV、V、kV等符号。电压表根据所测电压性质可分为直流电压表、交流电压表,交流电压表如图3-2所示。 由于电压表与被测电路是并联接线,所以,为了不影响电路的工作状态,电压表的内阻一般都很大。大量程的电压表通常都串联一只电阻,使通过电压表的电流按比例减少,这只电阻称为倍率电阻。倍率电阻有的装在 表内,有的装在表外,与仪表配套使用,表盘上标有“外附电阻器”字样。外附电阻器是仪表的附件,没有它仪表就不能使用。
[测试测量]
at90s8515单片机驱动t6963c lcd 24064 程序
at90s8515 单片机 驱动t6963c LCD 24064 程序 ;************************************************************************ ;连线图:  液晶屏分为8行*15列汉字,使用模拟接口方式。            * ;*DB0-----PA0*      *DB4-----PA4*       *Rd ------PC2*      *Cd ------PC0*    * ;*DB1-----PA1*      *DB5-----PA5*       *Wr ------PC1*      *CE ------GND*    * ;*D
[单片机]
GD32 MCU如何将烧录口配置为GPIO使用?
如果大家在进行GD32 MCU开发时发现GPIO引脚使用不足,可以尝试将烧录口配置为GPIO使用,这样就可以多出几个引脚使用,但使用的时候如何配置以及有哪些注意事项,本视频将会为大家进行解答。 GD32 MCU存在两种GPIO备用功能的配置,一种是采用成组重映射REMAP的模式,比如GD32F10X/20x/30x/e10x/E50X等系列,一种是采用AFIO模式,比如GD32F1X0/3X0/4XX/E230等。 成组reamp重映射的模式需要将一组的GPIO进行重映射,如下图GD32F30X IIC0的重映射配置,PB6和PB8需要组合使用,PB7和PB9需要组合使用,而PB6和PB9就不可以组合使用。 AFIO
[单片机]
GD32 <font color='red'>MCU</font>如何将烧录口配置为GPIO使用?
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved