发新话题
打印

[资料整理]威达SP系列微型打印机驱动程序

本主题由 YYLT 于 2008-8-15 20:30 解除置顶

[资料整理]威达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;
}
}
本帖最近评分记录
  • 谷雨 经验值 +10 2007-9-29 10:04
我是个好男人啊 嫁给我吧 我们村很好的 我还有几亩地,家里有一头牛,2个猪 还有很多 够你吃的了
佛曰:人脸是一个苦字,苦今生,修来世!
我的博客:http://hi.baidu.com/murufy

TOP

通过串口发送指令控制打印机
我是个好男人啊 嫁给我吧 我们村很好的 我还有几亩地,家里有一头牛,2个猪 还有很多 够你吃的了
佛曰:人脸是一个苦字,苦今生,修来世!
我的博客:http://hi.baidu.com/murufy

TOP

你什么时候有空把那个什么红外的弄弄传上去吧,明年省的我弄。

TOP

整理的不错,那个8.16号正是我工作的那天,离开实验室的时候,不过你们这一届怎么没有整理每组资料刻盘呢,再下一届要注意了,尽量整理出来

TOP

arm的威达SP-AN驱动

#include "config.h"

#define UART_BPS 9600
//--------------------------------------------------------
// 函数名称 :UART0_Init()
// 函数功能 :串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率9600。
// 入口参数 :无
// 出口参数 :无
//--------------------------------------------------------
void UART0_Init (void)
{
        uint16 Fdiv;
       
        U0LCR = 0x83;                                                // DLAB=1,允许设置波特率
        Fdiv  = (Fpclk / 16) / UART_BPS;        // 设置波特率
        U0DLM = Fdiv / 256;
        U0DLL = Fdiv % 256;
        U0LCR = 0x03;
}
//--------------------------------------------------------
// 函数名称 :UART0_SendByte()
// 函数功能 :向串口发送字节数据,并等待发送完毕,查询方式。   
// 入口参数 :dat        要发送的数据
// 出口参数 :无
//--------------------------------------------------------
void UART0_SendByte (uint8 dat)
{
        U0THR = dat;
        while ((U0LSR & 0x40) == 0);                // 等待数据发送完毕
}
//--------------------------------------------------------
// 函数名称 :UART0_SendStr()
// 函数功能 :向串口发送一字符串
// 入口参数 :str        要发送的字符串的指针
// 出口参数 :无
//--------------------------------------------------------
void UART0_SendStr (uint8 len,uint8 const *str)
{
        while (len--)
        {
                if (*str == '\0')        break;                // 遇到结束符,退出
                UART0_SendByte(*str++);                        // 发送数据
        }
}


void UART0_SendChn (uint8 const *str)
{
        while(1)
        {
                if (*str == '\0')        break;                // 遇到结束符,退出
                UART0_SendByte(*str++);                        // 发送数据
        }
}



#include "config.h"

uint8 Init[]={0x1b,0x40};// 初始化打印机 '4'
uint8 Chn[]={0x1c,0x26,0};  //设置为汉字打印 '4'
uint8 Chn_character[]={0x1b,0x36,0}; //设置字符集 1 打印 '4'  
uint8 Chn_lattice[]={0x1b,0x38,0x04,0}; //选择12*12点阵打印 '6'   
uint8 Chn_transverse[]={0x1c,0x4b,0};  //横向打印  '4'
uint8 Chn_round[]={0x1c,0x49,0x02,0};   //旋转180
uint8 Row_spacing[]={0x1b,0x31,0x01,0}; //行距  '6'  P28
uint8 Reverse[]={0x1b,0x63,0};        //反向打印
uint8 Enter[]={0x0d,0};//回车
uint8 Nextrow[]={0x1b,0x4a,0x09,0};//换行
uint8 Exit_chn[]={0x1c,0x2e,0}; // 退出汉字打印

//--------------------------------------------------------
// 函数名称 :void INit_ChPrint_UART0(void)
// 函数功能 :打印机串口
//--------------------------------------------------------
void Init_print(void)
{   
  PINSEL0 = (PINSEL0&0x0f)|0x05; // 串口 UART0 初始化
  UART0_Init();
  UART0_SendStr(4,Init);     // 初始化打印机             '4'
  UART0_SendStr(4,Chn); //设置为汉字打印            '4'
  UART0_SendStr(4,Chn_transverse);//设置为横向打印                     '4'  
  UART0_SendStr(4,Chn_character); //设置打印字符集 1        '4'
  UART0_SendStr(6,Chn_lattice); //选择12*12点阵打印  
  
}

void DelayNS (uint32 dly)
{
        uint32 i;
       
        for ( ; dly>0; dly--)
                for (i=0; i<50000; i++);
}
//--------------------------------------------------------
// 函数名称 :void print(uint8 len,uint8 const *str)
// 函数功能 :打印程序
// 入口参数:len 要打印数组的长度  , str 要打印的数组
//--------------------------------------------------------
void print(uint8 const *str)
{
  
  UART0_SendChn ((uint8*)str);
  UART0_SendStr(2,Enter);
}


const uint8 edit1[]={"码:123456"};
const uint8 edit2[]={"名称:毛巾"};
const uint8 edit3[]={"编号:0001"};
const uint8 edit4[]={"单价:3.5元"};

int main (void)
{
Init_print();

print(edit1);
print(edit2);
print(edit3);
print(edit4);
UART0_SendStr(2,Enter);
        while(1);
    return 0;
}



/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

TOP

ARM上的程序,在03级的时候有过,我上面那个也是根据ARM上的改的
我是个好男人啊 嫁给我吧 我们村很好的 我还有几亩地,家里有一头牛,2个猪 还有很多 够你吃的了
佛曰:人脸是一个苦字,苦今生,修来世!
我的博客:http://hi.baidu.com/murufy

TOP


慕容大哥,这些知识我们什么时候学呀?

TOP

娃娃,不要急,你慢慢就会写了,呵呵

TOP

发新话题
版块跳转