⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 串口打印机调试.c

📁 这是运用c51单片机测试串行打印机
💻 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 + -