?? 有無功表液晶顯示.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 + -