历史上的今天
返回首页

历史上的今天

今天是:2024年08月27日(星期二)

正在发生

2020年08月27日 | 单片机数字电流表电压表源码与电路图

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;

}


……………………


推荐阅读

史海拾趣

FASTRAX公司的发展小趣事

在成立初期,FASTRAX就注重技术创新,不断推出新的产品和技术方案。其中,Fastrax iSuite MP SDK软件开发系统是其技术创新的代表,该系统为编程人员提供了丰富的资源,大大简化了GPS接收模块的开发过程。这一创新不仅提升了FASTRAX产品的竞争力,也推动了整个电子行业的发展。

CNC Tech公司的发展小趣事

为了进一步扩大市场份额和影响力,CNC Tech公司积极实施全球化战略。公司通过参加国际展会、设立海外分支机构等方式,加强与全球客户的交流与合作。同时,CNC Tech还积极引进国际先进的技术和管理经验,不断提升自身的竞争力。在全球化战略的推动下,CNC Tech的产品和服务逐渐打入国际市场,赢得了全球客户的认可和信赖。

ALSC [Alliance Semiconductor Corporation]公司的发展小趣事

为了保持竞争优势,ALSC始终将技术创新作为核心驱动力。公司投入大量资源用于研发,不断推出具有创新性的半导体产品。其中,一款具有高性能和低延迟的芯片产品赢得了市场的广泛认可,为公司的快速发展奠定了坚实的基础。

Cortina Systems Inc公司的发展小趣事

为了保持竞争优势,ALSC始终将技术创新作为核心驱动力。公司投入大量资源用于研发,不断推出具有创新性的半导体产品。其中,一款具有高性能和低延迟的芯片产品赢得了市场的广泛认可,为公司的快速发展奠定了坚实的基础。

Caddock公司的发展小趣事

随着电子行业的不断发展,精度和电阻稳定性的要求越来越高。Caddock公司积极投入研发,成功开发出Tetrinox电阻系统。这一技术具有低温度系数和超高稳定性,使得电阻器和电阻器网络在精密和超精密模拟系统中得到了广泛应用。

Helium公司的发展小趣事

2017年,随着区块链技术的兴起,Helium团队看到了新的机遇。他们意识到区块链的透明性和自确认性可以为物联网网络的建设带来革命性变化。于是,Helium决定将网络建设“去中心化”,并借助区块链技术重新定义激励机制。这一决策标志着Helium从单纯的物联网项目转变为融合区块链技术的创新企业。通过去中心化的方式,Helium降低了网络建设和维护的成本,加速了网络覆盖的速度,为物联网设备提供了更加便捷和经济的连接方案。

问答坊 | AI 解惑

【EEWORLD模块整理】+三相正弦变频电源模块

三相正弦变频电源也是一个不小的设计了,单独的模块化制作比较少见,基本上都是一个整体的设计或者是一个产品 整理了一些不同的实现方案,供大家参考~~~~~~~~~     …

查看全部问答>

今天做了一款5W-7W的隔离 LED驱动

一款5-7WLED驱动芯联的IC 就是不知道批量了会怎么样;有谁也有这种成熟的方案;批量的话精度都以可以接受的; 方便的话和我交流下哦, 现在这款IC适合宽电压,340MA;功率因素低了一点;才0.5; 电路里头就是一个pai型电路(2个电解一个电感) ...…

查看全部问答>

windows mobile操作系统下的输入法是否也可以在windows CE下使用

请教手机的操作系统是windows mobile操作系统,mobile5.0/6.0下的键盘输入法以及软键盘输入法是否也可以在windows CE5.0下使用。分没有了,只剩这些了啊! …

查看全部问答>

请教 usb function client driver

1. WinCE上的ActiveSync使用的是哪一个function client driver? webcast上一篇课程说使用的是RNDIS,但是我的开发板上注册表HKLM/drivers/usb/functiondrivers/DefaultClientDriver的值为serial_class。一旦该值改变,则activesync不可使用。这是否 ...…

查看全部问答>

WINCE 关机函数

问一下,,在WINCE5中当我按下一关机按扭时WINCE会调用那一个函数呀,,就在PB5中的那一个文件的函数可以去调用硬件实现软关机,而不是拔掉电源…

查看全部问答>

怎样做驱动开发

怎样做驱动开发 给点建议…

查看全部问答>

Linux下写一段代码检测USB设备插入或拔出

要求得到设备的PID/VID等信息.. 小弟毫无LINUX经验..不知道怎么下手...哪位高人能给个思路? 是不是应该先用VC写一个找找灵感...?但是LINUX下有API用么!!!!急啊!!再线等..…

查看全部问答>

装SQL CE 2.0时总是出现"the compu ter that you specified is not configured for NTFS.you

装SQL CE 2.0时总是出现\"the compu ter that you specified is not configured for NTFS.you do not have to set permissions\",整整一天了都没法解决,请高手指点迷津!谢谢…

查看全部问答>

java 程序员的困惑

我是一名java 程序员,在一家作java的公司做了三个月,但是我发现我对嵌入式软件开发很感兴趣,于是就辞职离开了公司,这其中还有一个原因就是公司要和我签三年的合同,我不想一下做这么长时间,而且这家公司是日企违约金非常的高,感觉自己就被绑 ...…

查看全部问答>