📄 print.c
字号:
/**************************************
打印机驱动程序
*************************************/
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit BUSY = P3^0;
uchar ch1[12]={0xd1,0xf5,0xbb,0xaf,0xd0,0xbf,0xb1,0xdc,0xc0,0xd7,0xc6,0xf7};//氧化锌避雷器
uchar ch2[8]={0xb2,0xe2,0xca,0xd4,0xbd,0xe1,0xb9,0xfb};//测试结果
uchar ch3[4]={0xb5,0xe7,0xd1,0xb9};//电压
uchar ch4[4]={0xb5,0xe7,0xc1,0xf7};//电流
uchar ch5[8]={0xcf,0xb5,0xcd,0xb3,0xc3,0xfb,0xb3,0xc6};//系统名称
uchar ch6[6]={0xb2,0xe2,0xca,0xd4,0xd4,0xb1};//测试员
uchar dauTmpBuf[6] = {0,0,0x2e,0,0x6b,0x56};//前四个字节为电压三位数含一位小数,后三个字节为kV
uchar daiTmpBuf[4] = {0,0,0xa9,0x41};//前二个字节为电流两位数,后二个字节为uA
uchar datime[14]={ 0,8,0x8c,1,2,0x8d,2,8,0x8e,1,6,0x3a,2,8};//08年12月28日16:28
TmpBuf[7]={2,6,5,0,0,2,5};//电压电流分离的各位数字
Timebuf[10]={0,8,1,2,2,8,1,6,2,8};//读时钟分离出的年月日时分数字
void daima() // 转换打印代码
{
uchar i;
for(i=0;i<2;i++) //电压数字转换打印内码
dauTmpBuf[i]=TmpBuf[i]|0x30;
dauTmpBuf[3]=TmpBuf[2];//电压小数点后一位
for(i=5;i<7;i++) //电流数字转换打印内码
daiTmpBuf[i-5]=TmpBuf[i]|0x30;
for(i=0;i<2;i++) //时间年数字转换打印内码
datime[i]=Timebuf[i]|0x30;
for(i=2;i<4;i++) //时间月数字转换打印内码
datime[i+1]=Timebuf[i]|0x30;
for(i=4;i<6;i++) //时间日数字转换打印内码
datime[i+2]=Timebuf[i]|0x30;
for(i=6;i<8;i++) //时间时数字转换打印内码
datime[i+3]=Timebuf[i]|0x30;
for(i=8;i<10;i++) //时间分数字转换打印内码
datime[i+4]=Timebuf[i]|0x30;
}
/*************串口发送子函数***********/
sprint(unsigned char a)
{
while(BUSY)
{};
SBUF=a;
while(!TI)
{};
TI=0;
}
void dayin()
{
int i;
TH1 = 244;//波特率2400
TL1 = 244;
TMOD = 0x20 ;
SCON = 0x40;//串行口方式1,10位数据,1位起始,8位数据,1位停止
TR1= 1;
ES = 1;
TI = 0;
sprint(0x1b);sprint(0x40);//初始化打印机
sprint(0x1b);sprint(0x36);//选择字符集1
for(i=0;i<14;i++) //打印时间
sprint(datime[i]);
sprint(0x0d); //回车
sprint(0x1c);sprint(0x26); //选择汉字打印
for(i=0;i<6;i++) //打印测试员
sprint(ch6[i]);
sprint(0x0d); //回车
for(i=0;i<4;i++) //打印电流
sprint(ch4[4]);
sprint(0x1b);sprint(0x36);//选择字符集1
for(i=0;i<4;i++) //打印电流数值
sprint(daiTmpBuf[4]);
sprint(0x0d); //回车
sprint(0x1c);sprint(0x26); //选择汉字打印
for(i=0;i<4;i++) //打印电压
sprint(ch3[4]);
sprint(0x1b);sprint(0x36);//选择字符集1
for(i=0;i<6;i++) //打印电压数值
sprint(dauTmpBuf[6]);
sprint(0x0d); //回车
sprint(0x1c);sprint(0x26); //选择汉字打印
for(i=0;i<8;i++) //打印测试结果
sprint(0x0d); //回车
sprint(ch2[i]);
for(i=0;i<12;i++) //打印氧化锌避雷器
sprint(ch1[i]);
while(1)
{};
}
/**************************************
名称:main
功能:主函数
输入参数:无
输出参数:无
*************************************/
void main()
{uint ad;
float dd,cc;
ad=read2543(1);
cc=0.00122*ad;
dd=0.0073242*cc;
daima();
dayin();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -