📄 有无功表液晶显示.c
字号:
//此程序的目的是显示将有无功液晶上的所有数据显示出来,并且是一个单元一个单元的显示,最后全部显示后停留一段时间
//在开始重新显示
//存储器2404内空间分配:10H-13H为有功电能,14H-17H为无功电能,20H-23H为有功电能初始值,24H-27H为
//无功电能初始值,18H-1DH为表地址,28H-2BH为掉电保护存储数据
//#include<STARTUP.A51>
#include "c8051.h"
bit chuankou_bz=0;
bit jieshu_bz=0;
//bit error_bz=0;
bit RESET_bz;
bit SIG_bz;
bit error_bz=0;
bit txcs_bz=0;
/*有关全局变量*/
uchar receive[COUNT1]; //用于存放串口接受数据
uchar pointer=0;
uchar Data[10]={0xfa,0x60,0xd6,0xf4,0x6c,0xbc,0xbe,0xe0,0xfe,0xfc}; //0 1 2 3 4 5 6 7 8 9
uchar Number[4]={0x02,0x99,0x99,0x09}; //缓冲区用于存放液晶要显示 //fa 60 d6 f4 6c bc be e0 fe fc
//uchar Number[4];
uchar b[10];
uchar runall_counter;
uchar SPI_CM; //用于存放SPI读或写的命令字
uchar SPI_Data[3]; //用于存放SPI读或写的数据
uchar YOUGONG_CS;
uchar WUGONG_CS;
/////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
PCA0MD &= ~0x40;
PCA0MD = 0x00; // 关闭看门狗
P0MDIN = 0xF3 ;//p0.2,p0.3置为模拟输入端口引脚
OSCXCN = 0x67 ;//使能外部振荡器
mDelay(1) ;//延时1毫秒 ;在使能晶体振荡器和检查 XTLVLD 位之间引入 1ms 的延时可以防止提前将系统时钟切换到外部振荡器
while (!(OSCXCN & 0x80)) ;
SYSCLK_Init ( );
PORT_Init ( );
Timer2_Init (SYSCLK / 12/10 );
UART0_Init ( );
EX0=1; //SETB EX0;开INT0中断
ES0=1;
EA=1;
mDelay(100);
WrToROM(Number,10,4); /*将初始化后的数值写入EEPROM*/
TXC=0;
while(1)
{
if(RESET_bz==0)
{
RESET7022( );
}
if(SIG_bz!=0)
{
SPImtWrite( ); //往7022里写校表参数
SIG_bz=0;
}
//
INT1621();//1621初始化,将一些设置写入驱动芯片中
RUNALL();//全显示输出 调试用
electric_stor(); //电能储存
// P2^3 = ~P2^3;//喂狗信号
// for(k=254;k>0;k--);
// LED = ~LED;
// for(i=200;i>0;i--)
// {
// for(j=200;j>0;j--)
// {
// for(k=200;k>0;k--);
// }
// }
while(shezhi_bz==0) // duanjie
{
RS485();
}
while(txcs_bz) //
{ uchar j;
error_bz=0;
pointer=0;
txcs_bz=0;
chuankou_bz=0;
for(j=0;j<COUNT1;j++)
{
receive[j]=0;
}
}
while(jieshu_bz)
{
jieshu_bz=0;
pointer=0;
chuankou_bz=0;
RS485(); //通讯
}
//WrToROM(Number,10,4); /*将初始化后的数值写入EEPROM*/
//mDelay(20);
//Number[0]=0;
//Number[1]=0;
//Number[2]=0;
// Number[3]=0; /*将数组中的值清掉,以验证读出的数是否正确*/
// RdFromROM(Number,10,4);
//SPI_Data[0]=0x01;
//SPI_Data[1]=0x02;
//SPI_Data[2]=0x03;
//SPI_CM=0x0D;
//SPIRead();
SPI_CM=0x0D;
SPIRead();
}
}
////////////////////////////////////////////////////////////////////////////
//Brushlcd 向LCD内写入数据
void Brushlcd(uchar *p)
{ uchar j;
uchar DATA1621;
INTI();
SendBit_1621(0x80,1);//发送写入命令101中的第一个1
SendBit_1621(0x40,4);//发送101中的01和A5,A4,A3,A2,A1,A0,从最开始的往里写,即0100 000
for(j=0;j<10;j++)
{
DATA1621=p[j];
SendBit_1621(DATA1621,8);
}
}
/////////////////////////////////////////////////////////////////////////////
//RUNALL调试用,全显示数据
void RUNALL()
{
switch (runall_counter)
{ // convesn(b);
//0 1 2 3 4 5 6 7 8 9
//fa 60 d6 f4 6c bc be e0 fe fc
case 0:
{//uchar b[10]={0x00,0x80,0x6f,0xf4,0x6d,0xbc,0xbe,0xe0,0xfe,0xfd};
uchar length_data=5;
uchar b[10];
WrToROM(Number,10,4); /*将初始化后的数值写入EEPROM*/
RdFromROM(Number,10,4); //
b[0]=0x00;
b[1]=0x80;
b[2]=0x6f;
convesn(b,length_data);
b[4]=b[4]+1;
b[9]=b[9]+1;
Brushlcd(b); //向LCD内写入数据
}break; //总有功
case 1:{//uchar b[10]={0x00,0x80,0xdb,0xd6,0xf5,0x6c,0xbc,0xbe,0xe1,0xfe};
uchar length_data=5;
uchar b[10];
WrToROM(Number,14,4); /*将初始化后的数值写入EEPROM*/
RdFromROM(Number,14,4); //
b[0]=0x00;
b[1]=0x80;
b[2]=0xdb;
convesn(b,length_data);
b[4]=b[4]+1;
b[8]=b[8]+1;
Brushlcd(b); //向LCD内写入数据
}break; //总无功
case 2:{//uchar b[10]={0x00,0x80,0x0f,0x60,0xd6,0xf4,0x6c,0xbd,0xbe,0xe1};
uchar length_data=5;
uchar b[10];
b[0]=0x00;
b[1]=0x80;
b[2]=0x0f;
convesn(b,length_data);
b[4]=b[4]+1;
b[7]=b[7]+1;
b[9]=b[9]+1;
Brushlcd(b); //向LCD内写入数据
}break; //瞬时有功功率XX.XX
case 3:{//uchar b[10]={0x00,0x08,0x0f,0xfa,0x60,0xd6,0xf4,0x6d,0xbc,0xbf};
uchar length_data=5;
uchar b[10];
b[0]=0x00;
b[1]=0x08;
b[2]=0x0f;
convesn(b,length_data);
b[4]=b[4]+1;
b[7]=b[7]+1;
b[9]=b[9]+1;
Brushlcd(b); //向LCD内写入数据
}break; //A相有功功率XX.XX
case 4:{//uchar b[10]={0x00,0x04,0x0f,0xfc,0xfa,0x60,0xd6,0xf5,0x6c,0xbd};
uchar length_data=5;
uchar b[10];
b[0]=0x00;
b[1]=0x04;
b[2]=0x0f;
convesn(b,length_data);
b[4]=b[4]+1;
b[7]=b[7]+1;
b[9]=b[9]+1;
Brushlcd(b); //向LCD内写入数据
}break; //B相有功功率XX.XX
case 5:{//uchar b[10]={0x00,0x02,0x0f,0xfe,0xfc,0xfa,0x60,0xd7,0xf4,0x6d};
uchar length_data=5;
uchar b[10];
b[0]=0x00;
b[1]=0x02;
b[2]=0x0f;
convesn(b,length_data);
b[4]=b[4]+1;
b[7]=b[7]+1;
b[9]=b[9]+1;
Brushlcd(b); //向LCD内写入数据
}break; //C相有功功率XX.XX
case 6:{//uchar b[10]={0x00,0x80,0xcb,0xe0,0xfe,0xfc,0xfa,0x61,0xd7,0xf4};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -