📄 串口打印机调试.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[5]={0xb5,0xe7,0xd1,0xb9,0x3a};//电压
uchar ch4[5]={0xb5,0xe7,0xc1,0xf7,0x3a};//电流
uchar ch5[5]={0xcf,0xb5,0xcd,0xb3,0x3a};//系统
uchar ch6[7]={0xb2,0xe2,0xca,0xd4,0xd4,0xb1,0x3a};//测试员
uchar dauTmpBuf[6] = {0,0,0x2e,0,0x6b,0x56};//前四个字节为电压三位数含一位小数,后三个字节为kV
uchar daiTmpBuf[4] = {0,0,0xe6,0x41};//前二个字节为电流两位数,后二个字节为uA
uchar datime[14]={ 0,8,0x8c,1,2,0x8d,2,8,0x8e,1,6,0x3a,2,8};//08年12月28日16:28
uchar TmpBuf[7]={2,6,5,0,0,2,5};//电压电流分离的各位数字
uchar 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]|0x30;//电压小数点后一位
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 = 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 main()
{
//daima();
dayin();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -