📄 main.c
字号:
#include "mdefine.h"
#include "IIC_Soft.h"
#include "Key_Dispose.h"
#include "Ziku.h"
#include "Lcd19264.h"
#include "PCF8563.h"
#include "Ad2543.h"
#include "Tlc5615.h"
#include "24c64.h"
//#include "PRINT_DATA.H"
extern uchar UiBuffer[];
extern uchar TmpBuf[];
extern uchar TimeBuffer[];
extern uchar Serial_Number[];
extern uchar Rec24c64[];
extern uchar idata Char_No;
uchar idata ch1[12]={0xd1,0xf5,0xbb,0xaf,0xd0,0xbf,0xb1,0xdc,0xc0,0xd7,0xc6,0xf7};//氧化锌避雷器
uchar idata ch2[8]={0xb2,0xe2,0xca,0xd4,0xbd,0xe1,0xb9,0xfb};//测试结果
uchar idata ch3[5]={0xb5,0xe7,0xd1,0xb9,0x3a};//电压
uchar idata ch4[5]={0xb5,0xe7,0xc1,0xf7,0x3a};//电流
uchar idata ch5[5]={0xcf,0xb5,0xcd,0xb3,0x3a};//系统
uchar idata ch6[7]={0xb2,0xe2,0xca,0xd4,0xd4,0xb1,0x3a};//测试员
uchar idata dauTmpBuf[6] = {0,0,0x2e,0,0x6b,0x56};//前四个字节为电压三位数含一位小数,后三个字节为kV
uchar idata daiTmpBuf[4] = {0,0,0xe6,0x41};//前二个字节为电流两位数,后二个字节为uA
uchar idata datime[14]={ 0,8,0x8c,1,2,0x8d,2,8,0x8e,1,6,0x3a,2,8};//08年12月28日16:28
//函数声明区
void Input_Serial_Number();
void disiping();
#pragma disable
void daima() // 转换打印代码
{
uchar i;
for(i=0;i<2;i++) //电压数字转换打印内码
dauTmpBuf[i]=UiBuffer[i]|0x30;
dauTmpBuf[3]=UiBuffer[2]|0x30;//电压小数点后一位
for(i=5;i<7;i++) //电流数字转换打印内码
daiTmpBuf[i-5]=UiBuffer[i]|0x30;
for(i=0;i<2;i++) //时间年数字转换打印内码
datime[i]=TimeBuffer[i]|0x30;
for(i=2;i<4;i++) //时间月数字转换打印内码
datime[i+1]=TimeBuffer[i]|0x30;
for(i=4;i<6;i++) //时间日数字转换打印内码
datime[i+2]=TimeBuffer[i]|0x30;
for(i=6;i<8;i++) //时间时数字转换打印内码
datime[i+3]=TimeBuffer[i]|0x30;
for(i=8;i<10;i++) //时间分数字转换打印内码
datime[i+4]=TimeBuffer[i]|0x30;
}
/*************串口发送子函数***********/
sprint(unsigned char a)
{
while(BUSY);
SBUF=a;
while(!TI);
TI=0;
}
void dayin()
{
int i;
TH1 = 0xfd;//波特率9600
TL1 = 0xfd;
TMOD = 0x20 ;
SCON = 0x40;//串行口方式1,10位数据,1位起始,8位数据,1位停止
TR1= 1;
ES = 1;
TI = 0;
sprint(0x1b);sprint(0x40);//初始化打印机
sprint(0x1b);sprint(0x63);sprint(0x00);//反向打印
sprint(0x1b);sprint(0x6c);sprint(0x0);//设定左限,居中
sprint(0x1c);sprint(0x26);sprint(0x00);//选择汉字
//打印“氧化锌避雷器”
for(i=0;i<12;i++) //打印氧化锌避雷器
sprint(ch1[i]);
sprint(0x0d); //回车
//打印“测试结果”
sprint(0x1b);sprint(0x6c);sprint(0x03);//设定左限,居中
for(i=0;i<8;i++)
sprint(ch2[i]);
sprint(0x0d); //回车
sprint(0x1b);sprint(0x6c);sprint(0x00);//设定左限,居左
for(i=0;i<12;i++)
sprint(0x2a);//打印“*********”
sprint(0x0d); //回车
//打印“电压:”
for(i=0;i<5;i++) //打印“电压”
sprint(ch3[i]);
//打印电压数值
for(i=0;i<6;i++) //打印电压数值
sprint(dauTmpBuf[i]);
sprint(0x0d); //回车
//打印“电流:”
for(i=0;i<5;i++) //打印“电流”
sprint(ch4[i]);
//打印电流数值
for(i=0;i<4;i++) //打印电流数值
sprint(daiTmpBuf[i]);
sprint(0x0d); //回车
//打印“**********”
for(i=0;i<12;i++)
sprint(0x2a);//打印“*************”
sprint(0x0d); //回车
//打印“系统:”
for(i=0;i<5;i++) //打印“系统:”
sprint(ch5[i]);
sprint(0x0d); //回车
//打印“测试员:”
for(i=0;i<7;i++) //打印“测试员:”
sprint(ch6[i]);
sprint(0x0d); //回车
sprint(0x1b);sprint(0x36);//选择字符集1
sprint(0x1b);sprint(0x6c);sprint(0x02);//设定左限,居右
for(i=0;i<14;i++) //打印时间
sprint(datime[i]);
sprint(0x0d); //回车
}
/**************************************
名称:main
功能:主函数
输入参数:无
输出参数:无
*************************************/
void Print_Data()
{
daima();
dayin();
}
void Time_Dispose_Read()
{
PCF8563_Read();
TimeBuffer[9] = TmpBuf[0] & 0x0F;
TimeBuffer[8] = (TmpBuf[0] & 0xF0) >> 4;
TimeBuffer[7] = TmpBuf[1] & 0x0F;
TimeBuffer[6] = (TmpBuf[1] & 0xF0) >> 4;
TimeBuffer[5] = TmpBuf[2] & 0x0F;
TimeBuffer[4] = (TmpBuf[2] & 0xF0) >> 4;
TimeBuffer[3] = TmpBuf[3] & 0x0F;
TimeBuffer[2] = (TmpBuf[3] & 0xF0) >> 4;
TimeBuffer[1] = TmpBuf[4] & 0x0F;
TimeBuffer[0] = (TmpBuf[4] & 0xF0) >> 4;
}
//刷新时间
#pragma disable
void Real_Display_Time() //实时显示时间
{
Time_Dispose_Read(); //读PCF8563万年历时间
dxz(0,96,2,0);
dxz(0,102,0,0);
dxz(0,108,TimeBuffer[0],0); //显示年月日
dxz(0,114,TimeBuffer[1],0);
dxz(0,120,10,0);
dxz(0,126,TimeBuffer[2],0);
dxz(0,132,TimeBuffer[3],0);
dxz(0,138,10,0);
dxz(0,144,TimeBuffer[4],0);
dxz(0,150,TimeBuffer[5],0);
dxz(0,162,TimeBuffer[6],0); //显示时分
dxz(0,168,TimeBuffer[7],0);
dxz(0,174,11,0);
dxz(0,180,TimeBuffer[8],0);
dxz(0,186,TimeBuffer[9],0);
}
//读取电池电量
#pragma disable
void Battery()
{
uchar idata BattCount = 0;
if((batt2==0)&& (batt1==0) )
BattCount=2; //1/3格
if((batt2==0)&& (batt1==1) )
BattCount=1; //1/2格
if((batt2==1)&& (batt1==1) )
BattCount=0; //满格
if((batt2==1)&& (batt1==0) )
BattCount=0; //满格
dtx(1,176,BattCount,0); //显示电池电量
/* if(BattCount==2)
{
lcd_init();
lcd_init();
lcd_init();
Tlc5615(daCount);
start=1;
Real_Display_Time(); //显示实时时间
dtx(1,176,BattCount,0); //显示电池电量
dh(2,40,55,0);//请启用备用电源
dh(2,56,60,0);
dh(2,72,61,0);
dh(2,88,62,0);
dh(2,104,63,0);
dh(2,120,18,0);
dh(2,136,64,0);
dh(4,40,56,0);//重新开机
dh(4,56,57,0);
dh(4,72,58,0);
dh(4,88,59,0);
dh(4,104,47,0);
while(1);
}
*/
}
//主菜单上下键处理程序
#pragma disable
void Menu_Move()
{
lcd_init(); //清屏
Real_Display_Time(); //显示实时时间
Battery(); //显示电池电量
if ( KeyCount == 0 )
{
dh(2,52,10,1);//反白显示,测试
dh(2,68,32,1);
dh(2,84,32,1);
dh(2,100,32,1);
dh(2,108,32,1);
dh(2,124,11,1);
dh(6,52,28,0); //时钟设置
dh(6,68,32,0);
dh(6,76,29,0);
dh(6,92,32,0);
dh(6,100,30,0);
dh(6,116,32,0);
dh(6,124,31,0);
dh(4,52,24,0); //历史数据
dh(4,68,32,0);
dh(4,76,25,0);
dh(4,92,32,0);
dh(4,100,26,0);
dh(4,116,32,0);
dh(4,124,27,0);
}
if ( KeyCount == 1 )
{
dh(4,52,24,1); //反显历史数据
dh(4,68,32,1);
dh(4,76,25,1);
dh(4,92,32,1);
dh(4,100,26,1);
dh(4,116,32,1);
dh(4,124,27,1);
dh(2,52,10,0); // 测试
dh(2,68,32,0);
dh(2,84,32,0);
dh(2,100,32,0);
dh(2,108,32,0);
dh(2,124,11,0);
dh(6,52,28,0); //时钟设置
dh(6,68,32,0);
dh(6,76,29,0);
dh(6,92,32,0);
dh(6,100,30,0);
dh(6,116,32,0);
dh(6,124,31,0);
}
if ( KeyCount == 2 )
{
dh(6,52,28,1); //反显时钟设置
dh(6,68,32,1);
dh(6,76,29,1);
dh(6,92,32,1);
dh(6,100,30,1);
dh(6,116,32,1);
dh(6,124,31,1);
dh(4,52,24,0); //历史数据
dh(4,68,32,0);
dh(4,76,25,0);
dh(4,92,32,0);
dh(4,100,26,0);
dh(4,116,32,0);
dh(4,124,27,0);
dh(2,52,10,0); // 测试
dh(2,68,32,0);
dh(2,84,32,0);
dh(2,100,32,0);
dh(2,108,32,0);
dh(2,124,11,0);
}
}
#pragma disable
void Time_Dispose_Set() //将年、月、日、时、分各位数字显示缓存区的数合并,并保存
{
TmpBuf[0] = (TimeBuffer[8]<<4) | TimeBuffer[9]; //分=十位分*10+个位分
TmpBuf[1] = (TimeBuffer[6]<<4) | TimeBuffer[7]; //时=十位时*10+个位时
TmpBuf[2] = (TimeBuffer[4]<<4) | TimeBuffer[5]; //日=十位日*10+个位日
TmpBuf[3] = (TimeBuffer[2]<<4) | TimeBuffer[3]; //月=十位月*10+个位月
TmpBuf[4] = (TimeBuffer[0]<<4) | TimeBuffer[1]; //年=十位年*10+个位年
PCF8563_SetTime(); //数字送器件8563内部寄存器
}
//外部中断1处理程序
uchar mod_1000( uint* ulTmp) /*分离出千位数并返回,保留余下的部分*/
{
uint ult1;
ult1 = *ulTmp / 1000;
*ulTmp = *ulTmp % 1000;
return ult1;
}
uchar mod_100( uint* ulTmp) /*分离出百位数并返回,保留余下的部分*/
{
uint ult1;
ult1 = *ulTmp / 100;
*ulTmp = *ulTmp % 100;
return ult1;
}
uchar mod_10( uint* ulTmp) /*分离出十位数并返回,保留余下的部分*/
{
uint ult1;
ult1 = *ulTmp / 10;
*ulTmp = *ulTmp % 10;
return ult1;
}
void div_u_shuzi(uint ucTmp) //分离电压数字
{
uint uctmp;
uctmp = ucTmp;
UiBuffer[0] = mod_100(&uctmp);
UiBuffer[1] = mod_10(&uctmp);
UiBuffer[2] = uctmp;
}
void div_i_shuzi(uint ucTmp) //分离电流数字
{
uint uctmp;
uctmp = ucTmp;
UiBuffer[3] = mod_1000(&uctmp);
UiBuffer[4] = mod_100(&uctmp);
UiBuffer[5] = mod_10(&uctmp);
UiBuffer[6] = uctmp;
}
void Shipin_U_dispose() //处理电压读数 显示
{
uiDianya = (uint)(Read2543(0) * 0.119604);
uiDianya = (uint)(Read2543(0) * 0.119604);
Rec24c64[6] = uiDianya/256;
Rec24c64[7] = uiDianya%256;
div_u_shuzi(uiDianya);
}
void Shipin_I_dispose() //处理电流读数 显示
{
uiDianliu = (uint)(Read2543(1) * 0.396555);
uiDianliu = (uint)(Read2543(1) * 0.396555);
Rec24c64[1] = uiDianliu;
div_i_shuzi(uiDianliu);
}
//试品异常处理程序
void shipin_error1()
{
lcd_init();
dh(1,60,11,0);//试品错误!
dh(1,76,44,0);
dh(1,92,45,0);
dh(1,108,46,0);
dh(1,124,47,0);
}
//试品异常处理程序
void shipin_error2()
{
dh(4,60,48,0); //高压无回路!
dh(4,76,49,0);
dh(4,92,50,0);
dh(4,108,51,0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -