久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 885|回復: 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;
        }
}

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜在线 | 精品电影 | 欧美成人h版在线观看 | 国产一区二区三区在线 | 日韩精品成人网 | 欧美久久一级 | 9999国产精品欧美久久久久久 | 久久久久久久国产精品视频 | 久久视频一区 | 久久久国产精品网站 | 日韩欧美国产精品一区 | 久久大陆 | 色www精品视频在线观看 | 在线视频中文字幕 | 人人草人人干 | 精品视频一区二区 | 欧美日韩亚洲一区 | 日韩欧美国产一区二区 | 一区在线视频 | 日本免费黄色一级片 | 91porn成人精品 | 91最新入口 | 欧美一区二区三区国产精品 | 午夜小电影 | 中文字幕一区二区三区乱码在线 | 久久久av一区 | 丁香五月缴情综合网 | 91精品国产综合久久久动漫日韩 | 国产亚洲精品区 | 久久久福利 | 国产精品九九九 | 香蕉视频在线播放 | 亚洲综合无码一区二区 | 成人网视频 | 国产精久久久久久久 | 亚洲欧美一区二区三区国产精品 | 欧美一区在线视频 | 高清国产一区二区 | 国产一区在线视频 | 91pao对白在线播放 | 国产日韩一区二区 |