|
- //===============================================================
- //威達SP系列微型打印機驅(qū)動程序
- //硬件連接:51的串口發(fā)送接收端接打印機的對應口
- //print_driver.c
- //writer:谷雨 2017年3月28于EDA實驗室
- //================================================================
- #include<reg52.h>
- #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 第三個數(shù)設為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度旋轉(zhuǎn)打印 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}; // 換行
- //--------------------------------------------------------
- // 函數(shù)名稱 :void UART_init(uchar n)
- // 函數(shù)功能 :串口初始化
- // 入口參數(shù) :n 為波特率選擇位
- // 出口參數(shù) :無
- //--------------------------------------------------------
- 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;
- }
- //--------------------------------------------------------
- // 函數(shù)名稱 :void UART_SendString(uchar len,uchar *str)
- // 函數(shù)功能 :串口輸出字符串
- // 入口參數(shù) :length為漢字碼組長度 str為機內(nèi)碼首地址
- // 出口參數(shù) :無
- //--------------------------------------------------------
- void UART_SendString(uchar len,uchar *str)
- {
- uchar i=0;
- while(i {
- while(!TI);
- SBUF=*str++;
- TI=0;
- i++;
- }
- }
- //--------------------------------------------------------
- // 函數(shù)名稱 :void Printer_init()
- // 函數(shù)功能 :打印機初始化
- // 入口參數(shù) :無
- // 出口參數(shù) :無
- //--------------------------------------------------------
- void Printer_init()
- {
- UART_SendString(2,Init_Printer);//初始化打印機
- UART_SendString(3,Set_Dot_Matrix);//選擇8*8點陣
- UART_SendString(3,Anti_White);//禁止反白
- }
- //--------------------------------------------------------
- // 函數(shù)名稱 :void Printer_English(uchar leng,uchar *string)
- // 函數(shù)功能 :打印機普通方式初始化
- // 入口參數(shù) :leng 打印的字符長度
- // string 打印的字符串
- // 出口參數(shù) :無
- //--------------------------------------------------------
- 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);
- }
- //--------------------------------------------------------
- // 函數(shù)名稱 :void Printer_Char(uchar length,uchar *cha)
- // 函數(shù)功能 :打印機漢字打印方式初始化
- // 入口參數(shù) :length為漢字碼組長度 cha為機內(nèi)碼首地址
- // 出口參數(shù) :無
- //--------------------------------------------------------
- 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);
- }
- //--------------------------------------------------------
- // 函數(shù)名稱 :void ALL_in_one(unsigned int num)
- // 函數(shù)功能 :功能集合函數(shù)
- // 入口參數(shù) :num為功能選擇
- // 出口參數(shù) :無
- //--------------------------------------------------------
- void ALL_in_one(uchar num)
- {
- uchar big[3]={0x1b,0x57,3}; //放大倍數(shù)打印(橫縱均放大)若想橫放大則第二項為0x55,若為縱放大則為0x56
- // 此處放大三倍
- uchar under_line[3]={0x1b,0x2d,1}; //下劃線打開,此命令后所有字符均有下劃線除非中止
- // 最后項值設置下劃線,此處為打開,若關為0
- uchar blank[4]={0x1b,0x66,0,3}; //打印空格或空行
- //第三項值設置m,若為0打印空格符,若為1打印空行
- // 第四項設置n,為空格或行的個數(shù)
- switch (num)
- {
- case 0: //換行
- UART_SendString(1,CR_line);
- break;
- case 1: //放大倍數(shù)打印(橫縱均放大)
- 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);
- }
復制代碼
|
|