找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 675|回复: 3
打印 上一主题 下一主题
收起左侧

这个是用电能芯片测量电压电流等数据的程序,哪个是将测量的数据送到单片机的函数

[复制链接]
跳转到指定楼层
楼主
ID:774972 发表于 2022-4-25 14:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <STC12C5A60S2.H>
#define uint unsigned int
#define uchar unsigned char
#include"zm.h"
#include"1602.h"
#include"uart.h"
#include"math.h"
sbit qh=P3^6;
sbit ql=P3^7;
void init();
void display();
void lcd_ini();
uchar i,k;
uint dy,dl,yggl,pl,ydl,gy,wggl,szgl;
bit flag,key_flag,dis_flag,clr_flag,send_flag;
uchar code buf[]={0x01,0x04,0x00,0x00,0x00,0x0a,0x70,0x0d};
uchar code sz[]="0123456789:.VAHzkWhvar";
uchar code hz[]="dydlplydlygglwgglszglglys";
uchar len1,len2;
uchar idata tmp1[50],tmp2[20];
void uartInit()//串口1初始化
{
PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR &= 0xBF;                //定时器时钟12T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x20;                //设置定时器模式
        TL1 = 0xFD;                //设置定时初始值
        TH1 = 0xFD;                //设置定时重载值
        ET1 = 0;                //禁止定时器中断
        EA=1;
        TR1 = 1;                //定时器1开始计时
        ES=1;
}
//串口2初始化
void Uart2Init(void)                //9600bps@11.0592MHz
{
        /*AUXR &= 0xB7;                //波特率不倍速
        S2CON = 0x92;                //8位数据,可变波特率
        AUXR &= 0xBF;                //独立波特率发生器时钟为Fosc/12,即12T
        BRT = 0xFE;                //设定独立波特率发生器重装值
        AUXR |= 0x10;                //启动独立波特率发生器
        IE2=0x01;*/
        AUXR &= 0xF7;                //波特率不倍速
        S2CON = 0x50;                //8位数据,可变波特率
        AUXR &= 0xFB;                //定时器时钟12T模式
        BRT = 0xFD;                //设置定时重载值
        AUXR |= 0x10;                //启动独立波特率发射器
        EA=1;
        IE2=0x01;//ES2=1
}
void send(uchar dat)//串口1发送1个字节
{
        SBUF=dat;
        while(!TI);
        TI=0;
}
void sendData(uchar *dat)
{
        uchar i;
        for(i=0;i<8;i++)
                send(dat[i]);
}
void send2(uchar dat)//串口2发送1个字节
{
        S2BUF=dat;
        while(!(S2CON&0x02));
        S2CON&=~0x02;
}
void send_str(uchar *str)
{
        while(*str!='\0')
                send2(*str++);
}
void uart1() interrupt 4//串口接收中断
{
        //static uchar recData;//记录中断次数的变量
        if(RI)
        {
                tmp1[len1]=SBUF;
                len1++;
                if(len1==50)
                        len1=0;
                RI=0;
        }
}
void uart2() interrupt 8//串口2接收中断
{
        //static uchar receiveData;
        if(S2CON&0x01)
        {
                S2CON &= ~0x01;
                tmp2[len2] = S2BUF;
                len2++;
                if(len2==20)
                {
                        len2=0;
                }                          
        }       
}
void main()
{
        init();
        uartInit();
        Uart2Init();
        dis_flag=1;
        while(1)
        {
                if(!qh&&!key_flag)
                {
                        flag=!flag;
                        key_flag=1;
                        clr_flag=1;
                        dis_flag=1;
                }
                if(!ql&&!key_flag)
                {
                        send(0x01);
                        send(0x42);
                        send(0x80);
                        send(0x11);
                        dis_flag=1;
                        key_flag=1;
                }
                for(i=0;i<40;i++)
                {
                                dy=tmp1[i+3]*256+tmp1[i+4];//电压
                                dl=tmp1[i+5]*256+tmp1[i+6];//电流
                                yggl=tmp1[i+9]*256+tmp1[i+10];//有功功率
                                ydl=tmp1[i+13]*256+tmp1[i+14];//用电量
                                pl=tmp1[i+17]*256+tmp1[i+18];//频率
                                gy=tmp1[i+19]*256+tmp1[i+20];//功率因素
                                szgl=(dy/10.0)*(dl/1000.0)*10;//视在功率
                                if(yggl>=szgl)
                                        wggl=0;
                                else
                                        wggl=sqrt((szgl/10.0)*(szgl/10.0)-(yggl/10.0*yggl/10.0));
                                dis_flag=1;
                                send_str("#dy:");
                                send2(dy/1000+0x30);
                                send2(dy%1000/100+0x30);
                                send2(dy%100/10+0x30);
                                send2('.');
                                send2(dy%10+0x30);
                                send2('V');
                                send2('*');
                               
                                send_str("#dl:");
                                send2(dl/1000+0x30);
                                send2('.');
                                send2(dl%1000/100+0x30);
                                send2(dl%100/10+0x30);                               
                                send2(dl%10+0x30);
                                send2('A');
                                send2('*');
                               
                                send_str("#pl:");
                                send2(pl/100+0x30);
                                send2(pl%100/10+0x30);
                                send2('.');
                                send2(pl%10+0x30);
                                send_str("Hz");
                                send2('*');
                               
                                send_str("#ydl:");
                                send2(ydl/1000+0x30);
                                send2('.');
                                send2(ydl%1000/100+0x30);
                                send2(ydl%100/10+0x30);                               
                                send2(ydl%10+0x30);
                                send_str("kWh");
                                send2('*');
                               
                                send_str("#yg:");
                                send2(yggl/1000+0x30);                               
                                send2(yggl%1000/100+0x30);
                                send2(yggl%100/10+0x30);
                                send2('.');                               
                                send2(yggl%10+0x30);
                                send2('W');
                                send2('*');
                               
                                send_str("#wg:");                               
                                send2(wggl/100+0x30);
                                send2(wggl%100/10+0x30);
                                send2(wggl%10+0x30);
                                send_str("var");
                                send2('*');
                               
                                send_str("#sz:");
                                send2(szgl/1000+0x30);                               
                                send2(szgl%1000/100+0x30);
                                send2(szgl%100/10+0x30);
                                send2('.');                               
                                send2(szgl%10+0x30);
                                send_str("V.A");
                                send2('*');
                               
                                send_str("#gy:");                       
                                send2(gy/100+0x30);
                                send2('.');
                                send2(gy%100/10+0x30);                                                               
                                send2(gy%10+0x30);
                                send2('!');
                                for(k=0;k<40;k++)
                                        tmp1[k]=0;
                                break;
                }
                if(clr_flag)
                {
                        lcd_ini();
                        clr_flag=0;
                }
                if(dis_flag)
                {
                        display();
                        dis_flag=0;
                }
                if(send_flag)
                {
                        send_flag=0;
                        sendData(buf);
                }
                if(qh&&ql)
                        key_flag=0;
        }
}
void init()
{
        wcmd(0xc0);
        wcmd(0x3f);
        lcd_ini();
        TMOD=0x01;
        TH0=0x3c;
        TL0=0xb0;
        EA=1;
        ET0=1;
        TR0=1;
}
void display()
{
                wcmd(0x80);
                wdat(hz[0]);
                wdat(hz[1]);
                wdat(sz[10]);
                wdat(sz[dy/1000]);
                wdat(sz[dy%1000/100]);
                wdat(sz[dy%100/10]);
                wdat(sz[11]);
                wdat(sz[dy%10]);
                wdat(sz[12]);
          wcmd(0xC0);
                wdat(hz[2]);
                wdat(hz[3]);
                wdat(sz[10]);
                wdat(sz[dl/1000]);
                wdat(sz[11]);
                wdat(sz[dl%1000/100]);
                wdat(sz[dl%100/10]);
                wdat(sz[dl%10]);
                wdat(sz[13]);
          Delay20us(50000);
                Delay20us(50000);
                Delay20us(50000);
                Delay20us(50000);
                lcd_ini();
               
                wcmd(0x80);
                wdat(hz[4]);
                wdat(hz[5]);
                wdat(sz[10]);
                wdat(sz[pl/100]);
                wdat(sz[pl%100/10]);
                wdat(sz[11]);
                wdat(sz[pl%10]);
                wdat(sz[14]);
                wdat(sz[15]);
                wcmd(0xC0);
                wdat(hz[6]);
                wdat(hz[7]);
                wdat(hz[8]);
                wdat(sz[10]);
                wdat(sz[ydl/1000]);
                wdat(sz[11]);
                wdat(sz[ydl%1000/100]);
                wdat(sz[ydl%100/10]);               
                wdat(sz[ydl%10]);
                wdat(sz[16]);
                wdat(sz[17]);
                wdat(sz[18]);
                Delay20us(50000);
                Delay20us(50000);
                Delay20us(50000);
                Delay20us(50000);
                lcd_ini();
               
                wcmd(0x80);
                wdat(hz[9]);
                wdat(hz[10]);
                wdat(hz[11]);
                wdat(hz[12]);
                wdat(sz[10]);
                wdat(sz[yggl/1000]);
                wdat(sz[yggl%1000/100]);
                wdat(sz[yggl%100/10]);
                wdat(sz[11]);
                wdat(sz[yggl%10]);
                wdat(sz[17]);
                wcmd(0xC0);
                wdat(hz[13]);
                wdat(hz[14]);
                wdat(hz[15]);
                wdat(hz[16]);
                wdat(sz[10]);
                wdat(sz[wggl/1000]);               
                wdat(sz[wggl%1000/100]);
                wdat(sz[wggl%100/10]);
                wdat(sz[11]);
                wdat(sz[wggl%10]);
                wdat(sz[19]);
                wdat(sz[20]);
                wdat(sz[21]);               
                Delay20us(50000);
                Delay20us(50000);
                Delay20us(50000);
                Delay20us(50000);
                lcd_ini();
               
                wcmd(0x80);
                wdat(hz[17]);
                wdat(hz[18]);
                wdat(hz[19]);
                wdat(hz[20]);
                wdat(sz[10]);
                wdat(sz[szgl/1000]);
                wdat(sz[szgl%1000/100]);
                wdat(sz[szgl%100/10]);
                wdat(sz[11]);
                wdat(sz[szgl%10]);
                wdat(sz[12]);
                wdat(sz[13]);
                wcmd(0xC0);
                wdat(hz[21]);
                wdat(hz[22]);
                wdat(hz[23]);
                wdat(hz[24]);
                wdat(sz[10]);
                wdat(sz[gy/100]);
                wdat(sz[11]);
                wdat(sz[gy%100/10]);
                wdat(sz[gy%10]);
                Delay20us(50000);
                Delay20us(50000);
                Delay20us(50000);
                Delay20us(50000);
                lcd_ini();
}
uchar count;
void timer()interrupt 1
{
        count++;
        if(count==20)
        {
                count=0;
                send_flag=1;
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:819198 发表于 2022-4-26 15:34 | 只看该作者
为什么没人回答你,因为这个问题太简单了,好好看一下“电能芯片”的使用手册就知道了。
回复

使用道具 举报

板凳
ID:123289 发表于 2022-4-26 16:31 | 只看该作者
1、学会看芯片手册。
2、不会是送,而是自己去取。
回复

使用道具 举报

地板
ID:728202 发表于 2022-4-30 21:11 | 只看该作者
电能芯片是哪个?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表