- //===============================================================
- //威达SP系列微型打印机驱动程序
- //硬件连接:51的串口发送接收端接打印机的对应口
- //print_driver.c
- //writer:谷雨 2017年3月28于EDA实验室
- //================================================================
- #include
- #define uint unsigned int
- #define uchar unsigned char
- //点阵设置
- #define Dot_Matrix16_16 0x00
- #define Dot_Matrix8_16 0x01
- #define Dot_Matrix16_8 0x02
- #define Dot_Matrix8_8 0x03
- void UART_init(uchar n);
- void UART_SendString(uchar len,uchar *str);
- void Printer_English(uchar leng,uchar *string);
- void Printer_Char(uchar length,uchar *cha);
- void Printer_init();
- void ALL_in_one(uchar num);
- uchar Init_Printer[2]={0x1B,0x40};// 初始化打印机 ''2''
- uchar Set_Char[2]={0x1c,0x26}; //设置为汉字打印 2
- uchar Select_Char_Set1[2]={0x1b,0x36}; //设置字符集 1 打印 2
- uchar Select_Char_Set2[2]={0x1b,0x37}; //设置字符集 2 打印 2
- uchar 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点阵
- uchar Anti_White[3]={0x1B,0x69,0x00}; //禁止反白 3
- uchar Ch_Rotation_Zero[3]={0x1c,0x49,2}; //设置为汉字0度旋转打印 3 P56
- uchar Set_N_LineSpace[3]={0x1b,0x31,0x01}; //设置n点行间距 3 P28
- uchar Set_Three_Go[3]={0x1b,0x4a,3}; //设置三点走行 3
- uchar Exit_Ch[2]={0x1c,0x2e}; // 退出汉字打印 2
- uchar CR_line[1]={0x0d}; // 换行
- //--------------------------------------------------------
- // 函数名称 :void UART_init(uchar n)
- // 函数功能 :串口初始化
- // 入口参数 :n 为波特率选择位
- // 出口参数 :无
- //--------------------------------------------------------
- void UART_init(uchar n)
- {
- TMOD=0x20; //定时器T1使用工作方式2
- switch(n)
- {
- case 1:
- TH1=0xe8;
- TH0=0xe8; //设置波特率2400
- break;
- case 2:
- TH1=0xf4;
- TH0=0xf4; //设置波特率4800
- break;
- case 3:
- TH1=0xfa;
- TH0=0xfa; //设置波特率9600
- break;
- case 4:
- TH1=0xfd;
- TH0=0xfd;//设置波特率19200
- break;
- default:
- break;
- }
- TR1=1; //开始计时
- PCON=0x80; //SMOD=1;
- SCON=0x50; //工作方式1,波特率9600bit/s,允许接收
- EA=0;
- TI=1;
- RI=1;
- }
- //--------------------------------------------------------
- // 函数名称 :void UART_SendString(uchar len,uchar *str)
- // 函数功能 :串口输出字符串
- // 入口参数 :length为汉字码组长度 str为机内码首地址
- // 出口参数 :无
- //--------------------------------------------------------
- void UART_SendString(uchar len,uchar *str)
- {
- uchar i=0;
- while(i {
- while(!TI);
- SBUF=*str++;
- TI=0;
- i++;
- }
- }
- //--------------------------------------------------------
- // 函数名称 :void Printer_init()
- // 函数功能 :打印机初始化
- // 入口参数 :无
- // 出口参数 :无
- //--------------------------------------------------------
- void Printer_init()
- {
- UART_SendString(2,Init_Printer);//初始化打印机
- UART_SendString(3,Set_Dot_Matrix);//选择8*8点阵
- UART_SendString(3,Anti_White);//禁止反白
- }
- //--------------------------------------------------------
- // 函数名称 :void Printer_English(uchar leng,uchar *string)
- // 函数功能 :打印机普通方式初始化
- // 入口参数 :leng 打印的字符长度
- // string 打印的字符串
- // 出口参数 :无
- //--------------------------------------------------------
- void Printer_English(uchar leng,uchar *string)
- {
- UART_SendString(2,Select_Char_Set1);//选择字符集1
- UART_SendString(3,Set_Dot_Matrix);//选择8*8点阵
- UART_SendString(leng,string);
- }
- //--------------------------------------------------------
- // 函数名称 :void Printer_Char(uchar length,uchar *cha)
- // 函数功能 :打印机汉字打印方式初始化
- // 入口参数 :length为汉字码组长度 cha为机内码首地址
- // 出口参数 :无
- //--------------------------------------------------------
- void Printer_Char(uchar length,uchar *cha)
- {
- UART_SendString(2,Set_Char);//选择汉字打印方式
- UART_SendString(3,Set_Dot_Matrix);//选择8*8点阵
- UART_SendString(length, cha);
- UART_SendString(2,Exit_Ch);
- }
- //--------------------------------------------------------
- // 函数名称 :void ALL_in_one(unsigned int num)
- // 函数功能 :功能集合函数
- // 入口参数 :num为功能选择
- // 出口参数 :无
- //--------------------------------------------------------
- void ALL_in_one(uchar num)
- {
- uchar big[3]={0x1b,0x57,3}; //放大倍数打印(横纵均放大)若想横放大则第二项为0x55,若为纵放大则为0x56
- // 此处放大三倍
- uchar under_line[3]={0x1b,0x2d,1}; //下划线打开,此命令后所有字符均有下划线除非中止
- // 最后项值设置下划线,此处为打开,若关为0
- uchar 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;
- }
- }
- void main()
- {
- uchar English_Table[10] = "I LOVE YOU";
- uchar Data1[]={0xD1,0xCC,0xCC,0xA8,0xB4,0xF3,0xD1,0xA7,0xC4,0xe3,
- 0xba,0xc3,0x0a,0xce,0xd2,0xb0,0xae,0xc4,0xe3,0x0a,};
- uchar XX[]={48,49,50,51};
- UART_init(3);//串口初始化
- Printer_init();// 打印机初始化
- ALL_in_one(2);//开下划线
- Printer_Char(20,Data1);//打印烟台大学你好,我爱你
- Printer_English(10,English_Table);//打印I LOVE YOU
- ALL_in_one(0);//换行
- Printer_English(4,XX);
- while(1);
- }
|