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

📄 printertest.c.bak

📁 c编写的lpc2129驱动微打和lcd的底层代码
💻 BAK
📖 第 1 页 / 共 2 页
字号:

/****************************************************************************
* 文件名:PrinterTest.C
* 功能:用底层编程实现在MP-T153PC上写出字符
* 说明:
* 完成日期:2006-02-09
****************************************************************************/
#include  "config.h"
#include  "PrinterTest.h"

#define 	LCDNUM   		10
#define		LCDDB  			( 0xFF<<LCDNUM )    	// P0.10~P0.17 定义为LCD的数据输入端
#define 	LCDCS  			( 1<<28 )   		// P0.28  定义为LCD的数据选通
#define 	LCDA0  			( 1<<29 )         	// P0.29  定义为LCD命令和数据选通端
#define		LCDBACKLIGHT		( 1<<25 )		// P1.25  定义为LCD背光控制  
#define 	LCDWR  			( 1<<2  )         	// P0.2	  定义为LCD屏的数据写信号      
#define 	LCDRD  			( 1<<3  )         	// P0.3	  定义为LCD屏的数据读信号 

#define	  	FPGA_RESET		( 1<<18 )		// P1.18控制FPGA复位,高电平有效 
#define		MPU_TEST		( 1<<19 )		// P1.19输出方波,以测试MPU是否写入成功

#define		PRINTERNUM		10
#define		PRINTERDB		( 0xFF<<PRINTERNUM )    // P0.10~P0.17 定义为PRINTER的数据输入端
#define		PRINTERACK		( 1<<21 )		// P1.21  定义为PRINTER的回答脉冲		
#define		PRINTERBUSY		( 1<<22 )		// P1.22  定义为PRINTER的忙标志
#define		PRINTERSEL		( 1<<23 )		// P1.23  定义为PRINTER的在线标志
#define		PRINTERERR		( 1<<24 )		// P1.24  定义为PRINTER的故障标志
#define		PRINTERSTB		( 1<<16 )		// P1.16  定义为PRINTER的数据选通脉冲,
								//	  上升沿时读入数据
/****************************************************************************
*********************************函数原型说明********************************
****************************************************************************/
uint8 Printer_Test(void);
uint8 PrintByte(uint8 Data);
void PrintDByte(uint16 Data);
void PrintWords(uint8 *Data);
void PrintChars(uint8 *Data);
void PrintFactoryInf(void);
void PrintTableHead(void);
void  DelayNS(uint32  dly);
void  GUI_SendCom( uint8 COM );
void  GUI_SendDat( uint8 Dat );
void  GUI_LcdInit(void);
void GUI_WriteWord_1616(uint8 Page,uint8 Col,uint8 *Word,uint8 Reverse);
void GUI_WriteARowWord_1616(uint8 Page,uint8 Col,uint8 *Word,uint8 Reverse,uint8 Num);
void GUI_ClrScreen(void);

/****************************************************************************
* 名称:PrinterTest()
* 功能:检测打印机状态
* 入口参数:无
* 出口参数:uint8 返回是否正常标志,正常和数据被接收返回0 ;故障返回1;
*		  打印机离线返回3;数据未被接收返回4;
****************************************************************************/
uint8  Printer_Test(void)
{
uint32 temp;
temp=IO1PIN;
if((temp&PRINTERSEL)==0)	//表示打印机离线,以下判断不需要再做
	return 3;
else if((temp&PRINTERERR)==0)	//表示打印机在线,但有故障
	return 1;		
else if(temp&PRINTERACK)	//表示数据未被接收
	return 4;
else 				//表示打印机正常且数据被正常接收,可以再接收数据
	return 0;		

}

/****************************************************************************
* 名称:PrintByte()
* 功能:给打印机发送1字节数据
* 入口参数:Data 待发送的数据
* 出口参数:uint8 返回是否正常标志,正常和数据被接收返回0 ;故障返回1;
*		  忙返回2;打印机离线返回3;数据未被接收返回4;
****************************************************************************/
uint8 PrintByte(uint8 Data)
{
uint8 temp;
uint16 overtime=0;

if(Printer_Test()==3)
	{
	GUI_WriteARowWord_1616(1,2,PrinterBreakaway[0],0,2);	//在屏上提示打印机离线,然后退出
	return 3;
	}
else if(Printer_Test()==1)
	{
	GUI_WriteARowWord_1616(1,2,PrinterErr[0],0,2);		//在屏上提示打印机故障,然后退出
	return 1;	
	}
else 
	{	
	overtime=0;
	temp=~Data;	
	IO0DIR=PRINTERDB;
	if(Data==0x00)
     		{
     		IO0CLR = PRINTERDB;
     		}
	else
     		{
     		IO0SET = Data << PRINTERNUM;	 		// 从P0.10~P0.17输出      
     		IO0CLR = (temp << PRINTERNUM);
     		}
	IO1DIR=PRINTERSTB;
	IO1CLR=PRINTERSTB;
	while(overtime<500)
		overtime++;
	overtime=0;
	IO1SET=PRINTERSTB;
	while((Printer_Test()==4)&&(overtime<1000))
		overtime++;	//等待数据被接收
	return 0;
	}
}

/****************************************************************************
* 名称:PrintDByte()
* 功能:给打印机发送2字节数据
* 入口参数:Data 待发送的数据
* 出口参数:无
****************************************************************************/
void PrintDByte(uint16 Data)
{
uint8 Data_l,Data_h;
Data_l=(uint8)Data;
Data_h=(uint8)(Data>>8);
PrintByte(Data_h);
PrintByte(Data_l);	
} 
/****************************************************************************
* 名称:PrintDByteS()
* 功能:给打印机发送2字节数据,但与Printer_SendDByte()函数的区别在于高低字节是倒序送的
*	先送低字节,再送高字节;在用字符串送数时发现了这个现象。
* 入口参数:Data 待发送的数据
* 出口参数:无
****************************************************************************/
void PrintDByteS(uint16 Data)
{
uint8 Data_l,Data_h;
Data_l=(uint8)Data;
Data_h=(uint8)(Data>>8);
PrintByte(Data_l);
PrintByte(Data_h);	
} 
/****************************************************************************
* 名称:PrintWords()
* 功能:给打印机发送多个汉字的内码
* 入口参数:Data 待发送的汉字内码首指针	
* 出口参数:无
****************************************************************************/
void PrintWords(uint8 *Data)
{
uint8 temp=0;
PrintByte(0x1b);
PrintByte(0x38);
PrintByte(0x04);	//0x00表示选择16*16点阵汉字,0x04表示选择12*12汉字,
			//MP-T153PC型打印机默认只有16*16和12*12汉字
while(Data[temp])
	{
	PrintByte(Data[temp]);
	temp++;
	}		
}
 
/****************************************************************************
* 名称:PrintBytes()
* 功能:给打印机发送多个字节的内码,使用字符集1
* 入口参数:Data 待发送的汉字内码首指针	
* 出口参数:无
****************************************************************************/
void PrintChars(uint8 *Data)
{
uint8 temp=0;
PrintByte(0x1b);
PrintByte(0x36);	//0x36表示使用字符集1,0x37表示使用字符集2
while(Data[temp])
	{
	PrintByte(Data[temp]);
	temp++;
	}	
}
 
/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNS(uint32  dly)
{  
uint32  i;
for(; dly>0; dly--) 
      	for(i=0; i<500; i++);
}


/****************************************************************************
* 名    称:GUI_SendCom()
* 功    能: 发送一字节命令
* 入口参数:dat		要发送的命令
* 出口参数:无
* 说    明:A0=0 发送命令
****************************************************************************/
void  GUI_SendCom( uint8 COM )
{ 	
uint8 Data;

Data = ~COM;
IO0DIR = LCDDB|LCDCS | LCDA0 | LCDWR | LCDRD;
	
IO0CLR = LCDA0;
IO0CLR = LCDCS;				//片选lcd,低电平有效
IO0CLR = LCDWR;				//控制lcd写命令		
IO0SET = LCDRD;
 	
if(COM==0x00)
     	{
      	IO0CLR = LCDDB;
     	}
else
     	{
      	IO0SET = COM << LCDNUM;	 	// 从P0.10~P0.17输出      
      	IO0CLR = (Data << LCDNUM);
     	}
IO0SET = LCDCS;
IO0SET = LCDRD;		     
IO0SET = LCDWR;			 	// LCDWR = 1
IO0CLR = LCDDB;
 }
 
 
/****************************************************************************
* 名    称:GUI_SendDat()
* 功    能: 发送一字节命令
* 入口参数:dat		要发送的数据
* 出口参数:无

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -