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

📄 print.c

📁 我写的微型打印机驱动程序
💻 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 + -