找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4633|回复: 0
收起左侧

威达SP系列微型打印机51单片机驱动程序

[复制链接]
ID:75926 发表于 2015-4-10 18:44 | 显示全部楼层 |阅读模式
  1. //===============================================================

  2. //威达SP系列微型打印机驱动程序
  3. //硬件连接:51的串口发送接收端接打印机的对应口
  4. //print_driver.c
  5. //writer:谷雨 2017年3月28于EDA实验室
  6. //================================================================

  7. #include<reg52.h>

  8. #define uint unsigned int
  9. #define uchar unsigned char

  10. //点阵设置
  11. #define         Dot_Matrix16_16                0x00   
  12. #define         Dot_Matrix8_16                 0x01
  13. #define         Dot_Matrix16_8                 0x02
  14. #define         Dot_Matrix8_8                  0x03

  15. void UART_init(uchar n);
  16. void UART_SendString(uchar len,uchar *str);
  17. void Printer_English(uchar leng,uchar *string);
  18. void Printer_Char(uchar length,uchar *cha);   
  19. void Printer_init();
  20. void ALL_in_one(uchar num);


  21. uchar Init_Printer[2]={0x1B,0x40};// 初始化打印机 ''2''
  22. uchar Set_Char[2]={0x1c,0x26}; //设置为汉字打印 2
  23. uchar Select_Char_Set1[2]={0x1b,0x36}; //设置字符集 1 打印 2
  24. uchar Select_Char_Set2[2]={0x1b,0x37}; //设置字符集 2 打印 2
  25. uchar Set_Dot_Matrix[3]={0x1c,0x69,Dot_Matrix8_8}; //选择8X8点阵打印 3 第三个数设为n=0 16×16点阵
  26.                         //n=1 8*16点阵 n=2 16*8点阵 n=3 8*8点阵
  27. uchar Anti_White[3]={0x1B,0x69,0x00};              //禁止反白 3
  28. uchar Ch_Rotation_Zero[3]={0x1c,0x49,2}; //设置为汉字0度旋转打印 3    P56
  29. uchar Set_N_LineSpace[3]={0x1b,0x31,0x01}; //设置n点行间距 3 P28
  30. uchar Set_Three_Go[3]={0x1b,0x4a,3};    //设置三点走行 3
  31. uchar Exit_Ch[2]={0x1c,0x2e}; // 退出汉字打印 2
  32. uchar CR_line[1]={0x0d}; // 换行

  33. //--------------------------------------------------------
  34. // 函数名称 :void UART_init(uchar n)
  35. // 函数功能 :串口初始化
  36. // 入口参数 :n 为波特率选择位
  37. // 出口参数 :无
  38. //--------------------------------------------------------
  39. void UART_init(uchar n)   
  40. {
  41.    TMOD=0x20;    //定时器T1使用工作方式2
  42.     switch(n)
  43. {
  44.      case 1:
  45.      TH1=0xe8;
  46.      TH0=0xe8; //设置波特率2400
  47.         break;
  48.      case 2:
  49.      TH1=0xf4;
  50.      TH0=0xf4; //设置波特率4800
  51.      break;
  52.      case 3:
  53.      TH1=0xfa;
  54.      TH0=0xfa; //设置波特率9600
  55.      break;
  56.         case 4:
  57.      TH1=0xfd;
  58.      TH0=0xfd;//设置波特率19200
  59.      break;
  60.      default:
  61.       break;
  62. }
  63.     TR1=1;      //开始计时
  64.     PCON=0x80;     //SMOD=1;
  65.     SCON=0x50;     //工作方式1,波特率9600bit/s,允许接收
  66. EA=0;
  67.     TI=1;
  68. RI=1;
  69. }

  70. //--------------------------------------------------------
  71. // 函数名称 :void UART_SendString(uchar len,uchar *str)
  72. // 函数功能 :串口输出字符串
  73. // 入口参数 :length为汉字码组长度 str为机内码首地址
  74. // 出口参数 :无
  75. //--------------------------------------------------------
  76. void UART_SendString(uchar len,uchar *str)
  77. {
  78. uchar i=0;
  79. while(i   {
  80.    while(!TI);
  81.    SBUF=*str++;
  82.    TI=0;
  83.    i++;
  84.    }

  85. }

  86. //--------------------------------------------------------
  87. // 函数名称 :void Printer_init()
  88. // 函数功能 :打印机初始化  
  89. // 入口参数 :无
  90. // 出口参数 :无
  91. //--------------------------------------------------------
  92. void Printer_init()
  93. {
  94. UART_SendString(2,Init_Printer);//初始化打印机
  95. UART_SendString(3,Set_Dot_Matrix);//选择8*8点阵
  96. UART_SendString(3,Anti_White);//禁止反白
  97. }

  98. //--------------------------------------------------------
  99. // 函数名称 :void Printer_English(uchar leng,uchar *string)
  100. // 函数功能 :打印机普通方式初始化  
  101. // 入口参数 :leng 打印的字符长度
  102. //     string 打印的字符串
  103. // 出口参数 :无
  104. //--------------------------------------------------------
  105. void Printer_English(uchar leng,uchar *string)
  106. {
  107. UART_SendString(2,Select_Char_Set1);//选择字符集1
  108. UART_SendString(3,Set_Dot_Matrix);//选择8*8点阵
  109. UART_SendString(leng,string);
  110. }

  111. //--------------------------------------------------------
  112. // 函数名称 :void Printer_Char(uchar length,uchar *cha)
  113. // 函数功能 :打印机汉字打印方式初始化  
  114. // 入口参数 :length为汉字码组长度 cha为机内码首地址
  115. // 出口参数 :无
  116. //--------------------------------------------------------
  117. void Printer_Char(uchar length,uchar *cha)
  118. {
  119. UART_SendString(2,Set_Char);//选择汉字打印方式
  120. UART_SendString(3,Set_Dot_Matrix);//选择8*8点阵
  121. UART_SendString(length, cha);
  122. UART_SendString(2,Exit_Ch);
  123. }

  124. //--------------------------------------------------------
  125. // 函数名称 :void ALL_in_one(unsigned int num)
  126. // 函数功能 :功能集合函数
  127. // 入口参数 :num为功能选择
  128. // 出口参数 :无
  129. //--------------------------------------------------------
  130. void ALL_in_one(uchar num)
  131. {
  132.     uchar big[3]={0x1b,0x57,3}; //放大倍数打印(横纵均放大)若想横放大则第二项为0x55,若为纵放大则为0x56
  133.                                        // 此处放大三倍
  134.     uchar under_line[3]={0x1b,0x2d,1};      //下划线打开,此命令后所有字符均有下划线除非中止
  135.                                                    // 最后项值设置下划线,此处为打开,若关为0
  136.     uchar blank[4]={0x1b,0x66,0,3};       //打印空格或空行  
  137.                                                  //第三项值设置m,若为0打印空格符,若为1打印空行
  138.                                                  // 第四项设置n,为空格或行的个数                                   
  139. switch (num)                                 

  140. {
  141.    case 0:            //换行
  142.      UART_SendString(1,CR_line);
  143.      break;
  144.    case 1:            //放大倍数打印(横纵均放大)
  145.      UART_SendString(3,big);
  146.      break;
  147.     case 2:       //下划线打开,此命令后所有字符均有下划线除非中止
  148.      UART_SendString(3,under_line);
  149.      break;
  150.    case 3:   //打印空格或空行
  151.      UART_SendString(4,blank);
  152.      break;
  153.     default :
  154.      break;
  155. }
  156. }

  157. void main()
  158. {
  159.    uchar English_Table[10] = "I LOVE YOU";
  160.    uchar Data1[]={0xD1,0xCC,0xCC,0xA8,0xB4,0xF3,0xD1,0xA7,0xC4,0xe3,     
  161.                         0xba,0xc3,0x0a,0xce,0xd2,0xb0,0xae,0xc4,0xe3,0x0a,};  
  162.    uchar XX[]={48,49,50,51};
  163.    UART_init(3);//串口初始化
  164.    Printer_init();// 打印机初始化
  165.    ALL_in_one(2);//开下划线
  166.    Printer_Char(20,Data1);//打印烟台大学你好,我爱你
  167.    Printer_English(10,English_Table);//打印I LOVE YOU
  168.    ALL_in_one(0);//换行
  169.    Printer_English(4,XX);  
  170.    while(1);
  171. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表