电子产业
数字化服务平台

扫码下载
手机洽洽

  • 微信小程序

    让找料更便捷

  • APP

    随时找料

    即刻洽谈

    点击下载PC版
  • 公众号

    电子元器件

    采购信息平台

  • 移动端

    生意随身带

    随时随地找货

  • 华强商城公众号

    一站式电子元器件

    采购平台

  • 芯八哥公众号

    半导体行业观察第一站

单片机系统制作微型打印机的源程序及方案

来源: 作者:华仔 浏览:1278

标签:

摘要://单片机系统打印机程序思路如下:// 打印规格(16×16点阵),打印机执行单片机n点行走纸指令:0x1B-0x4A-n。向前走n点行,n的值是1-255范围内。//设置 n点行间距:0x1B-0x31-n。n的值是0-255之间,//在使用ESC/K命令打印点阵图形时,通常设置n=0。文本打印时通常设置n=3。//-----------------------函数声明-------

//单片机系统打印机程序思路如下:

// 打印规格(16×16点阵),打印机执行单片机n点行走纸指令:0x1B-0x4A-n。向前走n点行,n的值是1-255范围内。
//设置 n点行间距:0x1B-0x31-n。n的值是0-255之间,
//在使用ESC/K命令打印点阵图形时,通常设置n=0。文本打印时通常设置n=3。

//-----------------------函数声明--------------------------------------------------------
#include"stdio.h"
#include"absacc.h"
#include"reg51.h"
//-----------------------LCD接口管脚声明--------------------------------------------------------
sbit STB=P3^0; //输出,数据选通触发脉冲上升沿时读入数据。
sbit BUSY=P3^1; //输入,"高"表示打印机正"忙",不能接收数据。
sbit ACK=P3^2; //输入,应答脉冲"低"电平表示数据已被接收而且已准备好接收下一个数据。
sbit ERR=P3^3; //输入,经电阻上拉"高"电平,表示打印机无故障。
sbit SEL=P3^4; //输入,经电阻上拉"高"电平,表示打印机在线。
#define DATA_OUT P1 //P1为数据端口

bit printer_ERR=0; //打印机故障标志:0表示正常,1表示故障
bit printer_online=1; //打印机在先标志:1表示在线,0表示离线
#define check_ERR() printer_ERR=~ERR //检查打印机是否出错
#define check_online() printer_online=SEL //检查打印机是否在线
//-----------------------定义各命令字--------------------------------------------------------
#define printer_init() SEND_2BYTE(0x1B,0x40) //初始化打印机
#define enter_hangzimode() SEND_2BYTE(0x1C,0x26) //进入汉字打印命令:0x1C-0x26。
#define exit_hangzimode() SEND_2BYTE(0x1C,0x2E) //退出汉字打印命令:0x1C-0x2E。
#define setting_LARGEhz() SEND_2BYTE(0x1C,0x0E) //打印的汉字将在横向放大一倍,纵向不改变。
#define cancel_LARGEhz() SEND_2BYTE(0x1C,0x14)//取消汉字倍宽打印:。
#define select_muster1() SEND_2BYTE(0x1B,0x36)//选择字符集1:。
#define select_muster2() SEND_2BYTE(0x1B-0x37)//选择字符集2:。
#define change_row() SEND_BYTE(0x0A) //换行:。
#define change_page() SEND_BYTE(0xOC) //换页:。
#define made_CZtable() SEND_BYTE(0x0B) //执行垂直造表:0x0B。
#define made_SPtable() SEND_BYTE(0x09) //执行水平造表:0x0B。
#define setting_rowLG() SEND_BYTE(0x0E) //一行内倍宽度打印:0x0E。
#define cancel_rowLG() SEND_BYTE(0x14) //撤除一行内倍宽度打印:0x14。
#define renew_char_set() SEND_2BYTE(0x1B,0x3A) //恢复字符集中的字符:0x1B-0x3A。
#define enter() SEND_BYTE(0x0D) //回车:0x0D。
#define delete_row() SEND_BYTE(0x18) //删除一行:0x18。
#define delete_byte() SEND_BYTE(0x7F) //删除一字节:0x7F。
#define execute_NULL() SEND_BYTE(00) //(4) 空:00。
//设置汉字点阵打印规格(16×16点阵):0x1C-0x69-n
//设定汉字点阵:n=0,16×16点阵
//n=1,8 ×16点阵?
//n=2,16×8点阵
//n=3,8×8点阵。
#define setting_HZmode(n) SEND_2BYTE(0x1C,0x69);SEND_BYTE(n)
// 执行n点行走纸:0x1B-0x4A-n。向前走n点行,n的值是1-255范围内。
#define goahead_nrow(n) SEND_2BYTE(0x1B,0x4A);SEND_BYTE(n)
//设置 n点行间距:0x1B-0x31-n。n的值是0-255之间,
//在使用ESC/K命令打印点阵图形时,通常设置n=0。文本打印时通常设置n=3。
#define setting_rowgap(n) SEND_2BYTE(0x1B,0x31);SEND_BYTE(n)
//--------------------------------------------------------------------------------------------------
// 函数名称: SEND_BYTE
// 入口参数: ndata
// 函数功能: 送出1BYTE数据
//--------------------------------------------------------------------------------------------------
void SEND_BYTE(unsigned char ndata)
{
STB=1;
while(BUSY);
DATA_OUT=ndata;
STB=0;
STB=1;
}

型号 厂商 价格
EPCOS 爱普科斯 /
STM32F103RCT6 ST ¥461.23
STM32F103C8T6 ST ¥84
STM32F103VET6 ST ¥426.57
STM32F103RET6 ST ¥780.82
STM8S003F3P6 ST ¥10.62
STM32F103VCT6 ST ¥275.84
STM32F103CBT6 ST ¥130.66
STM32F030C8T6 ST ¥18.11
N76E003AT20 NUVOTON ¥9.67
Baidu
map