



[资料整理]威达SP系列微型打印机驱动程序
//===============================================================
//威达SP系列微型打印机驱动程序
//print_driver.c
//
//writer:慕容飞 2007年8月十六于EDA实验室
//================================================================
#define P_IOB_Data (volatile unsigned int *)0x7005
#define P_IOB_Buffer (volatile unsigned int *)0x7006
#define P_IOB_Dir (volatile unsigned int *)0x7007
#define P_IOB_Attrib (volatile unsigned int *)0x7008
#define P_UART_Command1 (volatile unsigned int *)0x7021
#define P_UART_Command2 (volatile unsigned int *)0x7022
#define P_UART_Data (volatile unsigned int *)0x7023
#define P_UART_BaudScalarLow (volatile unsigned int *)0x7024
#define P_UART_BaudScalarHigh (volatile unsigned int *)0x7025
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
//点阵设置
#define Dot_Matrix16_16 0x00
#define Dot_Matrix8_16 0x01
#define Dot_Matrix16_8 0x02
#define Dot_Matrix8_8 0x03
void UART_init(unsigned int bit);
void UART_SendString(unsigned int len,unsigned int *str);
void Printer_English(unsigned int leng,unsigned int *string);
void Printer_Char(unsigned int length,unsigned int *cha);
void Printer_init();
void ALL_in_one(unsigned int num);
unsigned int Init_Printer[2]={0x1B,0x40};// 初始化打印机 '2'
unsigned int Set_Char[2]={0x1c,0x26}; //设置为汉字打印 2
unsigned int Select_Char_Set1[2]={0x1b,0x36}; //设置字符集 1 打印 2
unsigned int Select_Char_Set2[2]={0x1b,0x37}; //设置字符集 2 打印 2
unsigned int Set_Dot_Matrix[3]={0x1c,0x69,Dot_Matrix8_8}; //选择8X8点阵打印 3 第三个数设为n=0 16×16点阵
//n=1 8*16点阵 n=2 16*8点阵 n=3 8*8点阵
unsigned int Anti_White[3]={0x1B,0x69,0x00}; //禁止反白 3
unsigned int Ch_Rotation_Zero[3]={0x1c,0x49,2}; //设置为汉字0度旋转打印 3 P56
unsigned int Set_N_LineSpace[3]={0x1b,0x31,0x01}; //设置n点行间距 3 P28
unsigned int Set_Three_Go[3]={0x1b,0x4a,3}; //设置三点走行 3
unsigned int Exit_Ch[2]={0x1c,0x2e}; // 退出汉字打印 2
unsigned int CR_line[1]={0x0d}; // 换行
//--------------------------------------------------------
// 函数名称 :void UART_init(unsigned int bit)
// 函数功能 :串口初始化
// 入口参数 :bit 为波特率选择位
// 出口参数 :无
//--------------------------------------------------------
void UART_init(unsigned int bit)
{
*P_IOB_Attrib|=0x0480;
*P_IOB_Dir|=0x0400;
*P_IOB_Data|=0x0000;
switch(bit)
{
case 1:
*P_UART_BaudScalarLow=0x00;
*P_UART_BaudScalarHigh=0x20; //设置波特率1500
break;
case 2:
*P_UART_BaudScalarLow=0x00;
*P_UART_BaudScalarHigh=0x05; //设置波特率9600
break;
case 3:
*P_UART_BaudScalarLow=0x00;
*P_UART_BaudScalarHigh=0x01; //设置波特率48000
break;
case 4:
*P_UART_BaudScalarLow=0x6b;
*P_UART_BaudScalarHigh=0x00; //设置波特率115200
break;
default: break;
}
*P_UART_Command1=0x0000;
*P_UART_Command2=0x00c0;
}
//--------------------------------------------------------
// 函数名称 :void UART_SendString(unsigned int len,unsigned int *str)
// 函数功能 :串口输出字符串
// 入口参数 :length为汉字码组长度 *cha为机内码首地址
// 出口参数 :无
//--------------------------------------------------------
void UART_SendString(unsigned int len,unsigned int *str)
{
unsigned int recFlag1=1,i=0,Set;
while(recFlag1==1&&i<len)
{
*P_Watchdog_Clear=0x0001;
Set=*P_UART_Command2&0x0040;
if(Set==0x0040)
{
*P_UART_Data=*str++;
i++;
*P_Watchdog_Clear=0x0001;
if(i==len)
recFlag1=0;
}
}
}
//--------------------------------------------------------
// 函数名称 :void Printer_init()
// 函数功能 :打印机初始化
// 入口参数 :无
// 出口参数 :无
//--------------------------------------------------------
void Printer_init()
{
UART_SendString(2,Init_Printer);//初始化打印机
// UART_SendString(2,Select_Char_Set1);//选择字符集1
UART_SendString(3,Set_Dot_Matrix);//选择8*8点阵
UART_SendString(3,Anti_White);//禁止反白
}
//--------------------------------------------------------
// 函数名称 :void Printer_English()
// 函数功能 :打印机普通方式初始化
// 入口参数 :无
// 出口参数 :无
//--------------------------------------------------------
void Printer_English(unsigned int leng,unsigned int *string)
{
// UART_SendString(2,Init_Printer);//初始化打印机
UART_SendString(2,Select_Char_Set1);//选择字符集1
UART_SendString(3,Set_Dot_Matrix);//选择8*8点阵
// UART_SendString(3,Anti_White);//禁止反白
UART_SendString(leng,string);
}
//--------------------------------------------------------
// 函数名称 :void Printer_Char(unsigned int length,unsigned int cha)
// 函数功能 :打印机汉字打印方式初始化
// 入口参数 :length为汉字码组长度 cha为机内码首地址
// 出口参数 :无
//--------------------------------------------------------
void Printer_Char(unsigned int length,unsigned int *cha)
{
// UART_SendString(2,Init_Printer);//初始化打印机
UART_SendString(2,Set_Char);//选择汉字打印方式
UART_SendString(3,Set_Dot_Matrix);//选择8*8点阵
// UART_SendString(3,Anti_White);//禁止反白
UART_SendString(length, cha);
UART_SendString(2,Exit_Ch);
}
//--------------------------------------------------------
// 函数名称 :void ALL_in_one(unsigned int num)
// 函数功能 :功能集合函数
// 入口参数 :num为功能选择
// 出口参数 :无
//--------------------------------------------------------
void ALL_in_one(unsigned int num)
{
unsigned int big[3]={0x1b,0x57,3}; //放大倍数打印(横纵均放大)若想横放大则第二项为0x55,若为纵放大则为0x56
// 此处放大三倍
unsigned int under_line[3]={0x1b,0x2d,1}; //下划线打开,此命令后所有字符均有下划线除非中止
// 最后项值设置下划线,此处为打开,若关为0
unsigned int blank[4]={0x1b,0x66,0,3}; //打印空格或空行
//第三项值设置m,若为0打印空格符,若为1打印空行
// 第四项设置n,为空格或行的个数
switch (num)
{
case 0: //换行
UART_SendString(1,CR_line);break;
case 1: //放大倍数打印(横纵均放大)
UART_SendString(3,big);break;
case 2: //下划线打开,此命令后所有字符均有下划线除非中止
UART_SendString(3,under_line);break;
case 3: //打印空格或空行
UART_SendString(4,blank);break;
default :break;
}
}