单片机控制打印机例程(北京荣达-并口)
单片机打印机优秀PPT

◆核心产品介绍 ◆业务介绍 ◆团队管理 ◆市场分析 ◆竞争分析
本团队主要设计和制造由打印机核心 控制器单元、打印机驱动的电机单元、打 印机本体机械机构单元、打印头单元、反 馈及检测单元、打印零件分层程序转换单 元等组成的3D打印机及产品。
打 印 零
件
三维软件
三 维 图
形
开源软件
STL 格 式 文
技术资料下载
资料管理
网络平台管理者
任务 分配
各个培训小组
我们是一个专业从事3D打印机生产和销售的团 队,与其他企业相比更具有专业优势,整个团队一起 合作了多个项目,都是同学关系,因此团队合作氛围 十分融洽。我们吸收了很多不同专业的特长生,所以, 整个团队研发能力非常强大!时时刻刻都会有新生的 技术力量加入,因此,团队的发展潜力也一定会很巨 大。我们将企业的主要精力放在3D打印机的研究开 发上,保证3D打印机的质量,生产满足用户需求的 3D打印机,集中吸引更多的目标群体。
租赁
分配 订单
培养小组
统一 被收购
购买者 团队
产品信息 3D打印产品的销售管理路线
订单信息
客户要求
团队运营采用总部运营的“扁平管理” 模式。本团队从上至下,就两层管理:“决 策层”与“实施层”
决策层
智囊团 (策划与管理)
办公室
实施层 信息管理团队 产品设计团队1 产品设计团队2 产品设计团队3 (网络平台建设) (单片机) (PLC) (数控系统)
这两款打印机结构 简单,精度高。而且装 配也十分方便,可以最 大限度的提高操作者的 装配与设计能力。
招收人员
培养 个性化3D打印机 研发 研发小组
个性化3D 打印机
培养小组
第35章 单片机控制打印机实例 51单片机开发与应用技术详解(珍藏版)PPT

35.2.1 电路图
• 这里采用AT89S52单片机来控制LASER PP40微型打 印机。系统电路原理图,如图所示。
35.2.2 建立项目
• 首先在Keil μVison3集成开发环境中建立项目, 具体操作步骤如下:
35.2.3 程序设计
• 单片机控制LASER PP40微型打印机打印输出的程 序代码,示例如下:
第35章 单片机控制打印机实例
• 在单片机应用系统中,经常需要用到信量结果以 及格式化输出数据等。目前,市场上打印机有很多种。按 照打印原理可以分为:键式打印机、针式打印机、热敏打 印机、喷墨式打印机、激光打印机等。按照打印的行宽可 以分为:宽行打印机、窄行打印机、微型打印机。按打印 头是否能往返打印可以分为:单向打印机和双向打印机。 按打印的字符颜色可以分为:单色打印机和彩色打印机。
• (详细内容请参照本书)
35.3 小结
• 本章详细讲述了LASER PP40微型四色描绘式打印 机,包括其接口、工作时序、文本模式和图形模 式等。本章最后还通过一个具体的实例,介绍了 如何使用51系列单片机控制LASER PP40微型打印 机打印输出。LASER PP40微型打印机接口简单、 控制方便,十分适合作为单片机系统的智能输出 扩展。因此,熟练掌握本章内容对以后的设计工 作很有帮助。
• LASER PP40描绘器 • TP-UP-16A智能点阵式打印机 • TP-UP-40A智能点阵式打印机 • GP16微型打印机 • XLF嵌入式汉字微型打印机
35.1.1 LASER PP40描绘器概述
• LASER PP40是一种四色描绘式微型打印机,其具 有文本模式和图形模式两种工作方式。可用来描 绘字符以及图形,具有较强的绘图功能。LASER PP40与微处理器相结合,便可以在智能仪表及实 时控制系统中作为微型绘图机使用。LASER PP40 的主要特点如下:
基于C8051F单片机的标签打印机

基于C8051F单片机的标签打印机
随着信息化技术的高速发展,各行业对于数据打印的需求日益增加。
为了能够更加直观的浏览数据,微型标签打印机在智能仪器仪表、电子收款机、计价器等系统中几乎成为标准配置。
本课题来源于常州市扬子电子有限公司,主要是针对一款程控耐压绝缘测试仪开发的打印机驱动设备,实现了对检测数据的实时打印功能。
系统采用斑马公司生产的888-TT桌面式微型标签打印机,基于美国Silicon Labs公司生产的SoC单片机C8051f020作为主控制芯片,通过RS 232串行接口与标签打印机进行串行通信,采取单片机向标签打印机发送打印指令和数据的方法实现单片机对打印机的控制。
1 单片机与打印机的串行接口设计
大多数单片机应用系统不是高速大数据量吞吐的,因此单片结构,即不外扩展ROM和RAM已成为单片机系统发展的方向之一。
与之相适应,以。
基于单片机的USB打印机打印系统研究

2、单片机和USB打印机的的基本 概念和技术背景
2、单片机和USB打印机的的基本概念和技术背景
单片机是一种集成度很高的微型计算机,具有体积小、价格便宜、可靠性高、 易于开发等优点。因此,单片机被广泛应用于各种智能化设备中,如打印机、复 印机、指纹识别等。USB是一种通用的串行通信协议,具有传输速度快、可靠性 高、易于扩展等优点。USB接口已经成为了各种智能化设备的标准接口之一,包 括打印机、鼠标、键盘等。因此,基于单片机的USB打印机打印系统具有广泛的 应用前景和市场潜力。
应用前景
针对针式打印机的特点,我们还可以进一步开发更加个性化的功能,如双面 打印、多种色彩打印等,以提高打印质量和效果。此外,针对一些特殊的应用场 合,如医院、银行等需要快速、高效、安全的打印服务,该系统也可以得到很好 的应用。
应用前景
总之,基于USB传输的针式打印机系统具有广阔的应用前景,可以为人们的生 活和工作带来更多的便利和效益。
系统设计
系统设计
基于USB传输的针式打印机系统主要包括硬件和软件两部分。硬件部分包括 USB接口芯片、打印头控制电路、色带驱动电路和纸张进给电路等;软件部分主 要负责打印内容的数据处理和打印头的控制。
硬件设计
硬件设计
硬件部分的核心是USB接口芯片,它负责与计算机进行通信,传递打印数据和 命令。同时,USB接口芯片还需对打印头控制电路、色带驱动电路和纸张进给电 路等进行控制。打印头控制电路根据USB接口芯片传递的信号,驱动打印头进行 针击动作。色带驱动电路负责驱动色带盒转动,为打印提供彩色或单色打印。纸 张进给电路则负责控制纸张的进给,确保打印内容在正确的位置。
基本内容
USB,全称通用串行总线(Universal Serial Bus),是一种高速串行通信 总线,广泛应用于计算机、外部设备和消费电子产品之间。它具有传输速度快、 连接简单、支持热插拔等优点,因此成为打印机等外部设备的主要接口之一。
基于单片机微型打印机系统控制设计

基于单基片机的微型打印机的设计摘要目前,电子领域正向着数字化、信息化、微型化发展。
打印机作为数字输出设备之一也朝着多功能、高性能的方向发展。
微型打印机是电子信息领域一种很重要的输出设备。
本文设计的主要目的是运用单片机来控制微型打印机来实现打印的目的。
本设计基于荣达RD-E系列微型打印机,以单片机P80C51以核心元件,辅以必要的外围电路(包括实时时钟电路、温度传感器和液晶显示模块、按键、打印机),采用并行接口技术,同时通过液晶显示器显示打印的数字和文字信息。
可以实现打印一段固定的文字和单个任意的数字,同时把打印的内容显示在液晶屏上。
本文主要用温度传感器测量温度,再通过单片机控制热敏电阻打印机打印出小票,设计了时钟接口电路,打印机接口电路,温度传感器接口电路和液晶显示接口电路。
再辅助软件设计来进行调试。
关键词:打印机,单片机,液晶显示器,DS1302时钟BASED 0N A SINGLE SUBSTRATE MACHINEDESIGNED FOR MICRO PRINTERABSTRACTAt present, the electronics field is developing towards digitalization, information, miniaturation. Printer, as one of the digital output devices are also moving into the direction of multi-function, high performance. The micro printer.It is a kind of important electronic information field output device.Design is the main purpose of this article is to use single-chip microcomputer to control the micro printer for printing purposes. This design based on RD - E series micro printer, P80C51 MCU core components, supplemented by the necessary peripheral circuit (including real time clock circuit, temperature sensor and LCD display module, keys, printer), USES the parallel interface technology, at the same time, through the LCD display to print Numbers and text messages. Can achieve print afixed text and a single arbitrary Numbers, and at the same time to print the contents of the display on the LCD screen. Temperature is measuredin this paper, with a temperature sensor, and controlled by single chip thermal resistor printer to print out receipts, designs the interface circuit, clock printer interface circuit and temperature sensorinterface circuit and LCD interface circuit. Auxiliary software designed to debug.KEY WORDS:printers, microcontroller, liquid crystal display,DS1302 clock目录前言 1第1章系统总体设计 2§1.1总体设计框图 2第2章系统硬件设计 3§2.1 主控制器部分的设计 3§2.1.1主控芯片的选择 3§2.1.2复位电路 4§2.1.3 晶振电路 5§2.2.1 显示系统的方案的选择 5§2.2.2 12864F 简介 6§2.2.3 12864F 引脚说明 6§2.2.4 12864F 液晶显示电路 7§2.3.1 方案的选择 8§2.3.2 温度芯片的选择 8§2.3.2 DS18B20内部结构描述 9§2.3.3 DS18b20温度系统电路 9§2.4 时钟系统电路设计 10§2.4 .1 时钟芯片选择 10§2.4 .2 DS1302管脚及寄存器说明 10 §2.4 .3 DS1302时钟电路 11§2.5 键盘 11§2.6微型打印机 12§2.6.1特点与性能 12§2.7 打印机接口电路 12§2.8硬件原理图 13第3章软件设计 15§3.1并口连接方式例程 15§3.2 按键接口设计 16§3.3 12864,DS1302,DS18B20的接口程序 17结论 38参考文献 39致谢 41前言近年,随着社会的发展生活日新月异。
单片机控制打印机例程(北京荣达-并口)

/*********************************************************// 新荣达电子打印机测试程序// 51单片机,晶振11.0592// 时间:2021-7-10// 用与测试并行接口打印机// 常用打印机指令以函数行式表达// 可根据需要自行调用单一函数**********************************************************/#include<reg52.h> //51头文件#include<string.h> //字串处理函数头文件#include<math.h>#define uchar unsigned charsbit BUSY=P3^4; //并口打印机的BUSY,串口打印机的CTSsbit STB =P3^5; //打印机STB接P3.5unsigned char dat[]="新荣达电子测试程序,ABCDEFG123456"; //测试数据//---------------------单字节打印函数-------------------------void print(unsigned char ch){while (BUSY==1) //busy为1时,等待{;}P1= ch; //busy=0,将数据送到P1口STB = 0; //STB置0;; //空语句,延时使STB>1umSTB = 1; //STB置1}/***************************打印字串函数**********************************/ void print_chs(uchar ch[]){uchar i;for(i=0;i<strlen(ch);i++)print(ch[i]);}/*************************汉字打印例程***************************************/ void hanzitest(void){uchar i;print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("汉字命令测试:\n");for(i=0;i<5;i++) //搋环打印5次{print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print(0xd0);print(0xc2); //打印数据"新"print(0x1b);print(0x38);print(0x04); //调用12*12点阵汉字,24点阵为24*24print(0xc8);print(0xd9);print(0xb4);print(0xef); //打印数据“荣达〞print(0x0d); //回车}}/*************************行间距例程************************************/void hangjianju(void){uchar i;print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("行间距测试:\n");for(i=0;i<11;i=i+2) //循环打印{print(0x1b);print(0x31);print(i); //ESC 1,设置行间距print_chs("LINE SPACING");print(0x0a); //打印字符串和换行}}/*************************水平造表例程***************************************/ void shuipingzhaobiao(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("水平造表测试:\n");print_chs("1234567890123456");// '标尺print(0x0d);print(0x1b);print(0x44);print(2);print(9);print(14);print(0);//ESC Dprint(9); //HT命令print_chs("HT1"); //打印字符串print(9); //HT命令print_chs("HT2"); //打印字符串print(9); //HT命令print_chs("HT3"); //打印字符串print(0x0d);}/*************************打印空格或换行例程**********************************/ void konggehuanhang(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("换行或空格测试:\n");print_chs("TE"); //打印字符串“TE〞print(0x1b);print(0x66);print(0);print(0x06); //空六格print_chs("ST"); //打印字符串“ST〞print(0x0d); //回车print_chs("TE"); //打印字符串“TE〞print(0x1b);print(0x66);print(0x01);print(0x06); //换6行print_chs("ST"); //打印字符串“ST〞print(0x0d); //回车}/*************************右限例程**********************************/ void youxian(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("右限测试:\n");print_chs("12345678901234567890123456789012");//标尺print(0x1b);print(0x51);print(0x06); //ESC Q 命令,右限为6print_chs("12345678901234567890123456789012");//打印字串print(0x0d); //回车}/*************************左限例程**********************************/ void zhuoxian(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("左限测试:\n");print_chs("12345678901234567890123456789012");//标尺print(0x1b);print(0x6c);print(0x06); //ESC I 命令,左限为6print_chs("12345678901234567890123456789012");//打印字串print(0x0d); //回车}/*************************放大指令例程**********************************/ void fangda(void){uchar i;print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("放大测试:\n");for(i=1;i<4;i++) //从1到3倍{print (0x1b);print(0x55);print(i); //横向放大print_chs("RD"); //打印字符}print(0x0d); //回车命令print(0x1b);print(0x40); //初始化打印机for(i=1;i<4;i++) //从1到3倍{print (0x1b);print(0x56);print(i); //纵放命令print_chs("RD"); //打印字符print(0x0d); //回车}print(0x1b);print(0x40); //初始化打印机for(i=1;i<4;i++) //从1到3倍{print (0x1b);print(0x57);print(i); //横纵向同时放大print_chs("RD"); //打印字符print(0x0d); //回车}}/*************************划线指令例程**********************************/ void huaxian(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("划线测试:\n");print(0x1b);print(0x57);print(2);//放大两倍打印,便于观察划线print_chs("RD"); //打印字串print(0x1b);print(0x2d);print(1);//允许下划线打印print_chs("UPT"); //UPT打印下划线print(0x1b);print(0x2d);print(0);//禁止下划线打印print_chs("RD"); //打印字串print(0x0d); //回车print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x57);print(2);//放大两倍打印,便于观察划线print_chs("RD"); //打印字串print(0x1b);print(0x2b);print(1); //允许上打印线打印print_chs("UPT"); //UPT上打印上划线print(0x1b);print(0x2b);print(0); //禁止上划线print_chs("RD"); //打印字串print(0x0d); //打印回车}/*************************上下标指令例程**********************************/ void shangxiabiao(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("上下标测试:\n");print(0x1b);print(0x57);print(0x02); //放大两倍print('M'); //打印字符'M'print(0x1b);print(0x57);print(0x01); //原倍print(0x1c);print(0x72);print(0); //上标命令print('2'); //打印字符'2'print(0x0d); //回车print(0x1b);print(0x57);print(0x01); //原倍print(0x1b);print(0x57);print(0x02); //放大两倍print('M'); //打印字符'M'print(0x1c);print(0x72);print(1); //上标命令print(0x1b);print(0x57);print(0x01); //原倍print('2'); //打印字符'2'print(0x0d); //回车}/*************************横纵向指令例程**********************************/void hengzhong(void){print(0x1b);print(0x40);print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("横纵向测试:\n");print(0x1c);print(0x4a); //设置纵向打印print_chs("ABCDEFGHI"); //打印字符print(0x0d); //回车print(0x1b);print(0x40);print(0x1C);print(0x4B); //设置横向打印print_chs("ABCDEFGHI"); //打印字符print(0x0d); //回车}/*************************自定义指令例程**********************************/void zidingyi(void){print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("自定义字符测试:\n");print(0x1b);print(0x36); //如是24点阵机器,在自定义字符前面要加一个1B 36 指令才行print(0x1b);print(0x57);print(2); //横向纵向放大2倍print(0x1b);print(0x26);print(65); //ESC & 命令print(0x02);print(0x7C);print(0x40); //字模数据print(0xC0);print(0x40);print(0x00); //字模数据print(0x1b);print(0x25);print(65);print(65);print(0); //ESC %print(65); //打印定义字符print(0x1b);print(0x3a); //ESC:命令print(65); //复符集中的字符print(0x0d);}/*************************图形指令例程**********************************/void tuxing(void){uchar code tch[ ]={0x7c,0x44,0x44,0xff,0x44,0x44,0x7c,0x00,0x41,0x62,0x54,0xc8,0x54,0x62,0x41};uchar i;print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("图形测试:\n");// print(0x1b);print(0x57);print(2); //横向纵向放大2倍print(0x1b);print(0x4b);print(15);print(0); //ESC K命令for(i=0;i<15;i++) //输入15个字节数据print(tch[i]);print(0x0d); //输入回车}/*************************曲线II指令例程**********************************/ //仅适用于热敏打印机void quxian_2(void){float X;unsigned int Y,YY;// Y1=50+40*abs〔-0.01*X〕*sin〔X/10〕// Y2=50-40*abs〔-0.01*X〕*sin〔X/10〕// Y3=50// Y4=50+40*abs(-0.1*X)// Y5=50-40*abs(-0.01*X)// 你可以用C语言编写如下的程序:// #include <math.h>// unsigned int Y,YY,X;print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("曲线1测试:\n");for(X=0;X<150;X++) //打印150点行{Y= 40*exp(-0.01*X);YY= Y*sin(X/10);print(0x1b);print(39);print(5);print(0); //ESC命令,M=5,0print(50+YY);print(0);print(50-YY);print(0);print(50);print(0);print(50+Y);print(0);print(50-Y);print(0);print(13);}}/*************************曲线I指令例程**********************************/ //仅适用于针式打印机void quxian_1(void){float X;unsigned int Y,YY;// Y1=50+40*abs〔-0.01*X〕*sin〔X/10〕// Y2=50-40*abs〔-0.01*X〕*sin〔X/10〕// Y3=50// Y4=50+40*abs(-0.1*X)// Y5=50-40*abs(-0.01*X)// 你可以用C语言编写如下的程序:// #include <math.h>// unsigned int Y,YY,X;print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("曲线2测试:\n");for(X=0;X<150;X++) //打印150点行{Y= 40*exp(-0.01*X);YY= Y*sin(X/10);print(0x1b);print(39);print(5); //ESC命令,M=5print(50+YY);;print(50-YY);print(50);;print(50+Y);print(50-Y);print(13);}}/************************旋转指令例程**********************************/ void xuanzhuan(void){uchar i;print(0x1b);print(0x40); //初始化指令for(i=0;i<4;i++) //0,90,180,270旋转{print(0x1c);print(0x49);print(i); //旋转指令print(0x1b);print(0x38);print(0); //汉字调出指令print_chs("旋转测试"); //打印汉字}print(0x0d); //回车}/************************反白指令例程**********************************/ void fanbai(void){uchar i;print(0x1b);print(0x40); //初始化指令for(i=0;i<2;i++) //i为1时,反白打印{print(0x1b);print(0x69);print(i);print(0x1b);print(0x38);print(0);print_chs("反白测试");}print(0x0d);}/************************反向指令例程**********************************/ void fanxiang(void){uchar i;print(0x1b);print(0x40); //初始化指令for(i=0;i<2;i++) //i为1时,禁止反向{print(0x1b);print(0x63);print(i);print(0x1b);print(0x38);print(0);print_chs("反向测试");print(0x0d);}}/************************条码指令例程**********************************/ //只有局部型号的打印机支持此指令void tiaoma(void){print(0x1b);print(0x40); //初始化指令print(0x1d);print(0x72);print(0x01); //打印条码字符print(0x1d);print(0x68);print(0x60); //设置条码高度为96点print(0x1d);print(0x6B);print(0x45);print(8); //打印长度为8的CODE39码print(0x2a);print(0x31);print(0x32);print(0x34);print(0x35);print(0x37);print(0x36);print(0x2a); //CODE39码数据print(0x0d); //回车print(0x1d);print(0x6B);print(3); //打印EAN13码print(0x32);print(0x37);print(0x30);print(0x38);print(0x35);print(0x38);print(0x35);print(0x30); //EAN13码数据print(0x30);print(0x39);print(0x32);print(0x34);print(0x38);print(0x00);print(0x0d); //回车}Main(){hanzitest();hangjianju();shuipingzhaobiao();konggehuanhang();youxian();fangda();huaxian();shangxiabiao();hengzhong();zhuoxian();zidingyi();tuxing();quxian_2(); //如用针打打印机将此函数去掉quxian_1(); //如用热敏打印机将此函数去掉xuanzhuan();fanbai();fanxiang();tiaoma();print(0x0d); //回车print(0x0d); //回车print(0x0d); //回车while(1); //死循环}。
打印机与单片机接口设计
【硬件说明】本系统选用LASER PP40微型打 印机,P3.2输入PP40工作状态信号,采用查 询工作方式(BUSY) P3.4输出PP40的选通 信号。 【打印方式】本系统有三种打印方式,即定 时打印、手动打印和故障备忘打印。 【打印功能】可打印出时间值和当时各测点 温(湿)度、设定的控制曲线及其参数,以 及故障原因等。
12 23
D/A转换器选用8位电流型输出的DAC0832芯片,且它采用单 缓冲方式工作,8155的输出口PA接0832的数据输入端DI0~ DI7,输出口PB接0832两输入寄存器的控制端和CD4051多路
开关的通道选择端 。
12
24
• DAC0832 程序设计
[程序功能]
通过8155接口,启动D/A,将60H~67H单元中的数据
12
15
编码设计2——变化打印编码
[CR] DC2,C2 [CR];图案模式,绿色打印头 M5,-13[CR] ; 移至(5,-13)点
P--X----X----X [CR] ;打印×××
M5,-18[CR] ; 移至(5,-18)点 P--X----X----X [CR] ;打印××× M0,-20 [CR]
12 3
【 PP40文本/图案编码设计】
在字符及图案绘制程序设计之前,要对绘制的字符或
图案进行编码设计。
首先将要绘制的字符、表格及图案变成一系列由命令 码、控制码及文字字符组成的字符串; 然后再将它们“翻译”成相应的以十六进制表示的数 据串,作为提供给PP40微型图机使用的数据表。
由于PP40微型描绘器具有向后回纸的功能,给文本设
12
27
基于C8051F系列单片机的标签打印机接口设计
基于C8051F系列单片机的标签打印机接口设计蔡祥;江冰【期刊名称】《现代电子技术》【年(卷),期】2011(34)8【摘要】为满足与日俱增的嵌入式系统的打印需求,设计了一种以片上系统型C8051F系列单片机为主机控制器的标签打印机接口模块.详细阐述了单片机与打印机之间的串行接口设计方法和斑马公司标签打印机专用的EPL2打印描述语言的使用,在掌握EPL2语言的基础上,利用KeilC编程工具进行驱动程序的编写,并给出了相应的驱动程序,实现了C8051F020单片机通过RS 232接口对一种标签打印机的控制.%To meet the increasing demand of printing of embedded system, in this paper, a label printer interface module is designed by using C8051F MCU as host concroller. The design method of serial interface hetween MCU and label printer is expounded. The use of EPL2 printing description language specified by Zebra label printer is elahorated. On the basis of EPL2 language, the driver program was compiled by means of KeilC programming tool. The corresponding driving program is presented. The control through RS232 interface to the label printer is realized byC8051F020 MCU.【总页数】3页(P11-13)【作者】蔡祥;江冰【作者单位】河海大学,计算机与信息学院,江苏,常州,213022;河海大学,计算机与信息学院,江苏,常州,213022【正文语种】中文【中图分类】TN911-34【相关文献】1.基于C8051F930单片机的无线通信接口设计 [J], 朱银波;赵国豪;乔渠;谭锡联2.基于C8051F040单片机的PLC输入输出接口设计 [J], 徐健丰3.基于C8051F040单片机的PLC输入输出接口设计 [J], 徐健丰4.基于C8051F060单片机的CAN-USB的接口设计 [J], 严正国;王海强;张富华5.基于C8051F系列单片机应用选型的教学改革研究 [J], 桑胜举;李芳;吴月英因版权原因,仅展示原文概要,查看原文内容请购买。
(完整版)单片机控制微型打印机
单片机控制微型打印机1引言由于常用的微型针式打印机的速度慢,噪声大,无法满足某些场合的需要。
微型热敏打印机具有打印速度快、噪音低、可靠性高、字迹清晰、机头小而轻等优点,可满足各种场合的打印要求,因此得到广泛应用。
笔者在汽车行驶记录仪的开发过程中,根据厂家要求,选用较为先进的热敏打印机作为打印设备。
但微型热敏打印头对打印时序和温度要求较高,一旦控制不当极易造成打印头烧毁。
因此,在有合理的硬件设计的基础上,软件设计也十分重要。
本文使用某些软件设计替代了部分硬件电路,使打印机的控制电路得到了简化。
摘要:介绍了基于89S51单片机的微型热敏打印机的组成,分析了打印原理,详细给出了整体流程以及各个功能模块的软件设计。
热敏打印头采用I/O口模拟串行数据传输实现数据加载。
设计的微型热敏打印机运用于实际,取得了良好的效果。
关键词:热敏打印机过热保护步进电机数据加载2 打印原理选用的FTP-628作为热敏打印头。
该热敏打印头点结构384点/行,水平方向点密度:8点/mm,垂直方向行间距:8点/mm。
有效打印宽度48mm。
打印速度最大为60mm/秒[1]。
要打印的数据在时钟CLK的配合下,经由数据输入脚DI移到热敏机芯内部的移位寄存器中。
经384个时钟周期,一行384位数据全部移到移位寄存器后,锁存端的锁存信号/LAT由CPU置低,移位寄存器的数据被锁存到锁存器。
然后热敏头加热控制信号STB产生高电平,此时根据384点输入的DI数据是1或者是0决定发热元件是否发热,由此在热敏纸上产生要打印的点行。
3 系统整体框图本文介绍的微型热敏打印机由主控芯片、步进电机驱动模块、热敏打印头过热保护模块、热敏打印头缺纸检测模块、RS-232通信模块、供电模块等部分组成。
其中步进电机驱动模块负责控制打印纸走纸及走纸速度;热敏打印头过热保护模块防止热敏打印头温度过高损坏;热敏打印头缺纸检测电路完成热敏打印头是否有纸检测;RS-232通信模块实现打印机与上位机之间的通信;供电模块给控制电路及热敏打印头供电。
最新单片机实验指导书打印稿
单片机实验指导书打印稿目录第一章系统介绍 (1)第二章基本电路介绍 (4)第三章扩展板的安装与使用 (15)第四章 8051调试软件的安装与使用 (17)第五章基本实验(8051) (23)实验一开发系统,开发环境应用练习,算术运算程序编制及调试 (23)实验二I/O口控制编程及调试实验(一) (29)实验三I/O口控制编程及调试实验(二) (32)实验四简单I/O口扩展实验一——交通灯控制实验 (35)实验五简单I/O口扩展实验二 (38)实验六中断实验———有急救车的交通灯控制实验 (40)实验七定时器/计数器及中断系统综合实验 (45)实验八8255A可编程并行接口实验一 (49)实验九8255A可编程并行接口实验二——键盘实验 (52)实验十数码显示实验 (57)实验十一8279显示接口实验一 (62)实验十二8279键盘显示接口实验二 (66)实验十三串行口实验一———单机实验 (69)实验十四串行口实验二———双机实验 (71)实验十五D/A转换器与单片机接口及多种波形发生器综合实验 (79)实验十六A/D转换器与单片机接口及传感器数据采集综合实验 (84)实验十七存储器扩展实验 (88)实验十八8253定时器实验 (89)实验十九编程器使用、程序的烧录及脱机运行实验 (91)第一章系统介绍一、系统特点EL-MUT-III 型微机/单片机教学实验系统具有以下特点:1.CPU用80C31CPU,系统功能齐全,涵盖了单片机教学实验课程的全部内容。
2.系统采用开放式模块化结构设计,通过两组相对独立的总线最多可同时扩展2块应用实验板。
3.配有两块可编程器件:EPM7128被系统占用。
另一块EPM7032供用户实验用。
两块器件皆可通过JTAG接口在线编程。
使用十分方便。
4.灵活的电源接口:配有PC机电源插座,可由PC提供电源。
另外还配有外接开关电源,提供所需的+5V,±12V,其输入为220V的交流电。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*********************************************************// 新荣达电子打印机测试程序// 51单片机,晶振11.0592// 时间:2009-7-10// 用与测试并行接口打印机// 常用打印机指令以函数行式体现// 可根据需要自行调用单一函数**********************************************************/#include<reg52.h> //51头文件#include<string.h> //字串处理函数头文件#include<math.h>#define uchar unsigned charsbit BUSY=P3^4; //并口打印机的BUSY,串口打印机的CTSsbit STB =P3^5; //打印机STB接P3.5unsigned char dat[]="新荣达电子测试程序,ABCDEFG123456"; //测试数据//---------------------单字节打印函数-------------------------void print(unsigned char ch){while (BUSY==1) //busy为1时,等待{;}P1= ch; //busy=0,将数据送到P1口STB = 0; //STB置0;; //空语句,延时使STB>1umSTB = 1; //STB置1}/***************************打印字串函数**********************************/ void print_chs(uchar ch[]){uchar i;for(i=0;i<strlen(ch);i++)print(ch[i]);}/*************************汉字打印例程***************************************/ void hanzitest(void){uchar i;print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("汉字命令测试:\n");for(i=0;i<5;i++) //搋环打印5次{print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print(0xd0);print(0xc2); //打印数据"新"print(0x1b);print(0x38);print(0x04); //调用12*12点阵汉字,24点阵为24*24print(0xc8);print(0xd9);print(0xb4);print(0xef); //打印数据“荣达”print(0x0d); //回车}}/*************************行间距例程************************************/void hangjianju(void){uchar i;print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("行间距测试:\n");for(i=0;i<11;i=i+2) //循环打印{print(0x1b);print(0x31);print(i); //ESC 1,设置行间距print_chs("LINE SPACING");print(0x0a); //打印字符串和换行}}/*************************水平造表例程***************************************/ void shuipingzhaobiao(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("水平造表测试:\n");print_chs("1234567890123456");// '标尺print(0x0d);print(0x1b);print(0x44);print(2);print(9);print(14);print(0);//ESC Dprint(9); //HT命令print_chs("HT1"); //打印字符串print(9); //HT命令print_chs("HT2"); //打印字符串print(9); //HT命令print_chs("HT3"); //打印字符串print(0x0d);}/*************************打印空格或换行例程**********************************/ void konggehuanhang(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("换行或空格测试:\n");print_chs("TE"); //打印字符串“TE”print(0x1b);print(0x66);print(0);print(0x06); //空六格print_chs("ST"); //打印字符串“ST”print(0x0d); //回车print_chs("TE"); //打印字符串“TE”print(0x1b);print(0x66);print(0x01);print(0x06); //换6行print_chs("ST"); //打印字符串“ST”print(0x0d); //回车}/*************************右限例程**********************************/ void youxian(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("右限测试:\n");print_chs("12345678901234567890123456789012");//标尺print(0x1b);print(0x51);print(0x06); //ESC Q 命令,右限为6print_chs("12345678901234567890123456789012");//打印字串print(0x0d); //回车}/*************************左限例程**********************************/ void zhuoxian(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("左限测试:\n");print_chs("12345678901234567890123456789012");//标尺print(0x1b);print(0x6c);print(0x06); //ESC I 命令,左限为6print_chs("12345678901234567890123456789012");//打印字串print(0x0d); //回车}/*************************放大指令例程**********************************/ void fangda(void){uchar i;print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("放大测试:\n");for(i=1;i<4;i++) //从1到3倍{print (0x1b);print(0x55);print(i); //横向放大print_chs("RD"); //打印字符}print(0x0d); //回车命令print(0x1b);print(0x40); //初始化打印机for(i=1;i<4;i++) //从1到3倍{print (0x1b);print(0x56);print(i); //纵放命令print_chs("RD"); //打印字符print(0x0d); //回车}print(0x1b);print(0x40); //初始化打印机for(i=1;i<4;i++) //从1到3倍{print (0x1b);print(0x57);print(i); //横纵向同时放大print_chs("RD"); //打印字符print(0x0d); //回车}}/*************************划线指令例程**********************************/ void huaxian(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("划线测试:\n");print(0x1b);print(0x57);print(2);//放大两倍打印,便于观察划线print_chs("RD"); //打印字串print(0x1b);print(0x2d);print(1);//允许下划线打印print_chs("UPT"); //UPT打印下划线print(0x1b);print(0x2d);print(0);//禁止下划线打印print_chs("RD"); //打印字串print(0x0d); //回车print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x57);print(2);//放大两倍打印,便于观察划线print_chs("RD"); //打印字串print(0x1b);print(0x2b);print(1); //允许上打印线打印print_chs("UPT"); //UPT上打印上划线print(0x1b);print(0x2b);print(0); //禁止上划线print_chs("RD"); //打印字串print(0x0d); //打印回车}/*************************上下标指令例程**********************************/ void shangxiabiao(void){print(0x1b);print(0x40); //初始化打印机print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("上下标测试:\n");print(0x1b);print(0x57);print(0x02); //放大两倍print('M'); //打印字符'M'print(0x1b);print(0x57);print(0x01); //原倍print(0x1c);print(0x72);print(0); //上标命令print('2'); //打印字符'2'print(0x0d); //回车print(0x1b);print(0x57);print(0x01); //原倍print(0x1b);print(0x57);print(0x02); //放大两倍print('M'); //打印字符'M'print(0x1c);print(0x72);print(1); //上标命令print(0x1b);print(0x57);print(0x01); //原倍print('2'); //打印字符'2'print(0x0d); //回车}/*************************横纵向指令例程**********************************/void hengzhong(void){print(0x1b);print(0x40);print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("横纵向测试:\n");print(0x1c);print(0x4a); //设置纵向打印print_chs("ABCDEFGHI"); //打印字符print(0x0d); //回车print(0x1b);print(0x40);print(0x1C);print(0x4B); //设置横向打印print_chs("ABCDEFGHI"); //打印字符print(0x0d); //回车}/*************************自定义指令例程**********************************/void zidingyi(void){print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("自定义字符测试:\n");print(0x1b);print(0x36); //如是24点阵机器,在自定义字符前面要加一个1B 36 指令才行print(0x1b);print(0x57);print(2); //横向纵向放大2倍print(0x1b);print(0x26);print(65); //ESC & 命令print(0x02);print(0x7C);print(0x40); //字模数据print(0xC0);print(0x40);print(0x00); //字模数据print(0x1b);print(0x25);print(65);print(65);print(0); //ESC %print(65); //打印定义字符print(0x1b);print(0x3a); //ESC:命令print(65); //复符集中的字符print(0x0d);}/*************************图形指令例程**********************************/void tuxing(void){uchar code tch[ ]={0x7c,0x44,0x44,0xff,0x44,0x44,0x7c,0x00,0x41,0x62,0x54,0xc8,0x54,0x62,0x41};uchar i;print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24print_chs("图形测试:\n");// print(0x1b);print(0x57);print(2); //横向纵向放大2倍print(0x1b);print(0x4b);print(15);print(0); //ESC K命令for(i=0;i<15;i++) //输入15个字节数据print(tch[i]);print(0x0d); //输入回车}/*************************曲线II指令例程**********************************/ //仅适用于热敏打印机void quxian_2(void){float X;unsigned int Y,YY;// Y1=50+40*abs(-0.01*X)*sin(X/10)// Y2=50-40*abs(-0.01*X)*sin(X/10)// Y3=50// Y4=50+40*abs(-0.1*X)// Y5=50-40*abs(-0.01*X)// 你可以用C语言编写如下的程序:// #include <math.h>// unsigned int Y,YY,X;print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("曲线1测试:\n");for(X=0;X<150;X++) //打印150点行{Y= 40*exp(-0.01*X);YY= Y*sin(X/10);print(0x1b);print(39);print(5);print(0); //ESC命令,M=5,0print(50+YY);print(0);print(50-YY);print(0);print(50);print(0);print(50+Y);print(0);print(50-Y);print(0);print(13);}}/*************************曲线I指令例程**********************************/ //仅适用于针式打印机void quxian_1(void){float X;unsigned int Y,YY;// Y1=50+40*abs(-0.01*X)*sin(X/10)// Y2=50-40*abs(-0.01*X)*sin(X/10)// Y3=50// Y4=50+40*abs(-0.1*X)// Y5=50-40*abs(-0.01*X)// 你可以用C语言编写如下的程序:// #include <math.h>// unsigned int Y,YY,X;print(0x1b);print(0x40); //初始化指令print(0x1b);print(0x38);print(0x00); //调用16*16点阵汉字,24点阵为24*24 print_chs("曲线2测试:\n");for(X=0;X<150;X++) //打印150点行{Y= 40*exp(-0.01*X);YY= Y*sin(X/10);print(0x1b);print(39);print(5); //ESC命令,M=5print(50+YY);;print(50-YY);print(50);;print(50+Y);print(50-Y);print(13);}}/************************旋转指令例程**********************************/ void xuanzhuan(void){uchar i;print(0x1b);print(0x40); //初始化指令for(i=0;i<4;i++) //0,90,180,270旋转{print(0x1c);print(0x49);print(i); //旋转指令print(0x1b);print(0x38);print(0); //汉字调出指令print_chs("旋转测试"); //打印汉字}print(0x0d); //回车}/************************反白指令例程**********************************/ void fanbai(void){uchar i;print(0x1b);print(0x40); //初始化指令for(i=0;i<2;i++) //i为1时,反白打印{print(0x1b);print(0x69);print(i);print(0x1b);print(0x38);print(0);print_chs("反白测试");}print(0x0d);}/************************反向指令例程**********************************/ void fanxiang(void){uchar i;print(0x1b);print(0x40); //初始化指令for(i=0;i<2;i++) //i为1时,禁止反向{print(0x1b);print(0x63);print(i);print(0x1b);print(0x38);print(0);print_chs("反向测试");print(0x0d);}}/************************条码指令例程**********************************/ //只有部分型号的打印机支持此指令void tiaoma(void){print(0x1b);print(0x40); //初始化指令print(0x1d);print(0x72);print(0x01); //打印条码字符print(0x1d);print(0x68);print(0x60); //设置条码高度为96点print(0x1d);print(0x6B);print(0x45);print(8); //打印长度为8的CODE39码print(0x2a);print(0x31);print(0x32);print(0x34);print(0x35);print(0x37);print(0x36);print(0x2a); //CODE39码数据print(0x0d); //回车print(0x1d);print(0x6B);print(3); //打印EAN13码print(0x32);print(0x37);print(0x30);print(0x38);print(0x35);print(0x38);print(0x35);print(0x30); //EAN13码数据print(0x30);print(0x39);print(0x32);print(0x34);print(0x38);print(0x00);print(0x0d); //回车}Main(){hanzitest();hangjianju();shuipingzhaobiao();konggehuanhang();youxian();fangda();huaxian();shangxiabiao();hengzhong();zhuoxian();zidingyi();tuxing();quxian_2(); //如用针打打印机将此函数去掉quxian_1(); //如用热敏打印机将此函数去掉xuanzhuan();fanbai();fanxiang();tiaoma();print(0x0d); //回车print(0x0d); //回车print(0x0d); //回车while(1); //死循环}。