蓝牙打印机程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥师范学院
蓝牙打印机
课程设计
专业: 计算机科学与技术班级: 嵌入式应用技术学号: 1410441060姓名: 李棒棒
设计题目: 蓝牙打印机程序设计
2016年6月
1。
绪论............................................................................ 错误!未定义书签。
1。
1概要 ..................................................................... 错误!未定义书签。
1。
2设计内容ﻩ3
2、开发环境的搭建ﻩ错误!未定义书签。
3、蓝牙打印机原理ﻩ错误!未定义书签。
3。
1蓝牙打印机的种类和工作原理........................ 错误!未定义书签。
3。
2蓝牙打印机原理图分析ﻩ错误!未定义书签。
4总体设计ﻩ错误!未定义书签。
4。
1设计思路 ............................................................. 错误!未定义书签。
4、2设计步骤 ............................................................. 错误!未定义书签。
5。
驱动及测试程序ﻩ错误!未定义书签。
5、1主程序 ................................................................ 错误!未定义书签。
5。
2生成字模 ........................................................ 错误!未定义书签。
综合设计总结与考虑 ..................................................... 错误!未定义书签。
1、绪论
1、1概要
嵌入式系统(Embeddedsystem),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统",依照英国电气工程师协会(U、K、Institution of Electrical Enginee r)的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。
与个人计算机如此的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。
由于嵌入式系统只针对一项特别的任务,设计人员能够对它进行优化,减小尺寸降低成本。
嵌入式系统通常进行大量生产,因此单个的成本节约,能够随着产量进行成百上千的放大。
[1]嵌入式系统是用来控制或者监视机器、装置、工厂等大规模设备的系统、国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,习惯应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。
事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
嵌入式系统的核心是由一个或几个预先编程好以用来执行少数几项任务的微处理器或者单片机组成。
与通用计算机能够运行用户选择的软件不同,嵌入式系统上的软件通常是暂时不变的;因此经常称为“固件"。
蓝牙是一种低成本大容量的短距离无线通信规范。
蓝牙打印机(Bluetooth printer)就是将蓝牙技术应用在打印机上,摆脱打印机连线所带来的不便,实现无线打印,能够减少桌面上令人不快的电缆,同时能够将打印机远离主机任意搬动,摆放在房间中适合的位置。
1、2设计内容
2、开发环境的搭建
3。
蓝牙打印机原理
3、1蓝牙打印机的种类和工作原理
蓝牙打印机的种类:
依照机器大小可分为:台式蓝牙打印机、便携式蓝牙打印机。
依照打印方式,可分为:针式蓝牙打印机、热敏蓝牙打印机。
蓝牙打印机的工作原理:
所谓蓝牙打印机,就是指在主机端用一单片机来仿真打印机进行工作,截取从主机并口传出的数据及控制信号,并通过蓝牙无线连接传送到打印机端。
在打印机侧的单片机则依照所收到的蓝牙数据来仿真主机对打印机进行控制操作,从而实现打印机与主机的蓝牙无线连接。
由于大部分的移动设备(手机、笔记本、平板电脑)都置有蓝牙芯片,不需要数据线连接即可快速被识别,操作简单,连接方便。
热敏打印机的原理是用加热的方式使涂在打印纸上的热敏介质变色。
热敏微型打印机式也式比较常见的微型打印机,但比针式微型打印机出来得要晚、热敏打印机打印速度快,噪音小,打印头特别少出现机械损耗,并且不需要色带,免去了更换色带的麻烦。
但它也有缺点,因为其使用的是热敏纸,因此不能无限期保存,在避光的条件下能够保存一年到五年,也有长效热敏纸能够保存十年。
3。
2蓝牙打印机原理图分析3。
21热敏打印头内部
硬件框图:
4总体设计
4、1设计思路
在主机端用一单片机来仿真打印机进行工作,截取从主机并口传出的数据及控制信号,并通过蓝牙无线连接传送到打印机端。
在打印机侧的单片机则依照所收到的蓝牙数据来仿真主机对打印机进行控制操作,从而实现打印机与主机的蓝牙无线连接。
主机端的蓝牙作为主设备进行查询和发起连接,打印机端的蓝牙则作为从设备等待连接的建立。
单片机采纳89C2051,蓝牙芯片采纳爱立信公司生产的支持点对点连接的ROK101—008。
该模块内包括了无线部分、基带控制器、闪存、电源控制模块和内部时钟这五个主要部分,提供UART、PCM、I2C标准接口并内置晶振、
4。
2设计步骤
4、21 项目系统框架图设计
4、22 项目器件选型可行性成本
1) CPU:stm32f103c8t648pin 72MHZflash:64k
RAM: 20K2) 打印头:富士通58mm短排线----外壳
3) 蓝牙模块:HC-05
4)存储器(FLASH):w25q648MB 0816 32 64 1
28
5) 电机驱动:LB19636)DC-DC电源:2307(7。
4v),2359(5v),1117(3。
3v)
4、23 原理图、PCB 设计;
4、24 项目软件分模块编写,测试
4。
25 字库烧录
4。
26系统软件下载,综合调试
5。
驱动及测试程序
主程序
#include "delay、h"
#include”sys、h"
#include ”usart、h"
#include "motor。
h"
#include "printer。
h"
#include"FONT。
H”
u8uart_buf[100];
u8 uart_flag=0;
u8 en_dat[48*32];
void SYS_INT(void)
{
ﻩStm32_Clock_Init(9); //ʱÖÓ³õʼ»¯
delay_init(72); ﻩ//ÑÓʱ³õʼ»¯
init_printer_gpio();
init_motor_gpio();
uart1_init(72,9600);
ﻩuart2_init(36,9600);
}
void send_str(char*s)
{
ﻩfor(;*s!='\0';s++)
ﻩ{
while(!(USART2—>SR&(1〈<6)));
USART2—〉DR =*s;ﻩ
}
}
void print_hzs(void)
{
ﻩu8 beat_cnt=2,line=0,hz_line=0;
ﻩfor(line=0;line〈48;line++)
ﻩ{
ﻩrun_motor();
ﻩdelay_us(800);
}
ﻩ
ﻩfor(hz_line=0;hz_line<get_hz_num();hz_line++) {
for(line=0;line<48;line++)
ﻩ{
ﻩif(beat_cnt==2)
ﻩ{
ﻩﻩﻩﻩHEAT_OFF();//±ÜÃâwriter_printer();¹ý³ÌÖмÓÈÈ
ﻩﻩﻩbeat_cnt=0;
ﻩﻩﻩwriter_printer((constu8*)hz_str[hz_line]);//ËÍÊý¾Ýﻩﻩ
ﻩ}
if(beat_cnt==0)HEAT_RIGHT();
ﻩif(beat_cnt==1)HEAT_LEFT();ﻩﻩ
ﻩﻩbeat_cnt++;
ﻩﻩrun_motor();
ﻩdelay_us(800+300);
ﻩﻩﻩ
ﻩﻩ}
ﻩfor(line=0;line〈12;line++)
ﻩ{
run_motor();
ﻩdelay_us(800);
}
}
HEAT_OFF();ﻩ
for(line=0;line〈150;line++)
{
ﻩﻩrun_motor();
ﻩdelay_us(800);
}ﻩ
}
s8en_one_line(char*s,u16 len)
{
u8 *p;
u16i=0,j=0,wr_len=0;
u8beat_cnt=2,line=0,hz_line=0;
//ﻩlen=strlen(s);
if(len>32)len=32;
ﻩwr_len=len;
for(i=0;i<48*32;i++) en_dat[i]=0;//ÇåÊý¾Ý ﻩfor(i=0;i〈len;i++)
{
if((s[i]==’\n')||(s[i]==’'))
ﻩ{
ﻩwr_len=i+1;
ﻩbreak;
ﻩﻩ}
ﻩp=(u8*)&en_str[ (s[i]—'') ]; ﻩ
ﻩﻩfor(j=0;j<48;j++)
ﻩ{
ﻩen_dat[j+i*48]=p[j]; ﻩﻩ
ﻩﻩ}
}
ﻩfor(line=0;line<48;line++)
{
ﻩﻩif(beat_cnt==2)
ﻩ{
ﻩﻩHEAT_OFF();
ﻩﻩbeat_cnt=0;ﻩ
ﻩﻩﻩwr_line_en((constu8*)en_dat);
}
ﻩﻩif(beat_cnt==0)HEAT_RIGHT();
ﻩif(beat_cnt==1)HEAT_LEFT(); ﻩ
ﻩbeat_cnt++;
ﻩﻩrun_motor();
ﻩﻩdelay_us(800+300);
ﻩﻩ
}
HEAT_OFF();ﻩ
return wr_len;
}
voidwrite_en_str(char *s)
{
u16 wr_len=0,len=0,i=0;
char*p=s;
ﻩlen=strlen(p);
for(i=0;i<48;i++)
ﻩ{
run_motor();
ﻩﻩdelay_us(800);
}ﻩ
ﻩwhile(1)
{
ﻩwr_len=en_one_line(p,len);ﻩﻩif(wr_len<len)
ﻩ{
ﻩﻩlen=(len-wr_len);
p+=wr_len;
}
ﻩﻩelse break;
}
ﻩfor(i=0;i<150;i++)
{
ﻩrun_motor();
delay_us(800);
ﻩ} ﻩ
ﻩ
}
int main()
{
ﻩu8 beat_cnt=2,line=0;
ﻩSYS_INT();
ﻩprint_hzs();
write_en_str(
"No Sweet Without Sweat\n”
ﻩ);
ﻩwhile(1)
{
if(uart_flag)
ﻩ{
ﻩuart_flag=0;
ﻩﻩwrite_en_str(uart_buf);
ﻩ}
}
}
voidUSART2_IRQHandler(void) {
ﻩstatic u8 i=0,dat=0;
if(USART2—>SR&(1<〈5))
{
dat=USART2->DR;
ﻩuart_buf[i++]=dat;
if(dat=='#')
ﻩﻩ{
ﻩﻩuart_buf[i-1]=’\0';
ﻩﻩi=0;
ﻩﻩﻩuart_flag=1;ﻩ
}
}
}
生成字模
0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC,0x2
1,0x08,0x21,0x08,0x21,0x08,0x21,0x08,
0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x
00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,/*"中",0*/ 0x08,0x80,0x0C,0x88,0x10,0x9C,0x30,0xE0,0x53,0x80,0x90,0x84,0x10,0x84,0x10,0x7C,
0x11,0x00,0x01,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,/*”华”,1*/
0x01,0x00,0x01,0x80,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x02,0x80,0x02,0x80,
0x04,0x80,0x04,0x40,0x08,0x60,0x08,0x30,0x10,0x18,0x20,0x0E,0x40,0x04,0x00,0x00,/*"人”,2*/
0x00,0x00,0x3F,0xF0,0x20,0x10,0x20,0x10,0x3F,0xF0,0x21,0x00,0x21,0x00,0x3F,0xFC,
0x20,0x80,0x20,0x80,0x20,0x40,0x20,0x40,0x24,0x24,0x28,0x14,0x30,0x0C,0x20,0x04,/*"民",3*/
0x00,0x00,0x04,0x20,0x04,0x20,0x04,0x20,0x7F,0xFC,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0xFF,0xFE,0x04,0x40,0x06,0x20,0x0C,0x10,0x 08,0x18,0x10,0x0C,0x20,0x08,/*”共",4*/
0x00,0x00,0x07,0x00,0x78,0x00,0x08,0x7C,0x08,0x44,0x7F,0x44,0x08,0x44,0x18,0x44,
0x1C,0x44,0x2A,0x44,0x2B,0x44,0x4A,0x44,0x88,0x7C,0x08,0x44,0x08,0x00,0x08,0x00,/*和",5*/
0x00,0x00,0x7F,0xFC,0x40,0x04,0x5F,0xF4,0x41,0x04,0x41,0x04,0x41,0x04,0x4F,0xE4,
0x41,0x44,0x41,0x24,0x41,0x24,0x5F,0xF4,0x40,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,/*"国",6*/
显示汉字所需代码:
void show_1hz(u16x,u16y,unsigned char hz[])
{
unsigned char i=0,j=0;
unsignedchar h=0;
ﻩu16 x0=x;
for(j=0;j<2*16;j++)
{
h=hz[j];
for(i=0;i<8;i++)
{
if(h&(0x80))
ﻩ{
ﻩLCD_DrawPoint(x,y);
ﻩﻩ}
h<〈=1;
x++;
}
if(j%2==1)
ﻩ{
x=x0;
ﻩﻩﻩy++;
ﻩ}
}
}
voidshow_hzs(u16 x,u16y,unsignedcharp[][32]) {
unsigned char i=0;
for(i=0;i〈sizeof(hz)/32;i++)
{
show_1hz(x,y,p[i]);ﻩ
ﻩﻩx+=16;
}
}
void initiation(void)
{
u8lcd_id[12]; ﻩ//存放LCD ID字符串
ﻩStm32_Clock_Init(9);//时钟初始化
delay_init(72); //延时初始化
ﻩled_init();
key_init();
beep_init();
ﻩuart1_init(72,9600);
LCD_Init();
POINT_COLOR=RED;
sprintf((char*)lcd_id,”LCD ID:%04X",lcddev、id);//将LCDID打印到lcd_id数组ﻩ
}
6、运行结果及截图
综合设计总结与考虑
这次小学期的实训,老师带着我们学习了部分单片机的知识和蓝牙打印机的项目、尽管计算机的基础有点薄弱,但跟着老师的教导依然收获了不少。
在做蓝牙打印机的过程中,老师首先让我们安装三个软件,一开始我的电脑上连安装都可不能,然而在不断的探究中,成功的完成了别人特别轻易能做到的情况。
老师用主机控制我们的电脑,教的特别细致,同时不断的下来巡视,以便大伙儿有问题能够立刻解答。
然后在老师的教学中和请教同学之后,能够成功的打印自己想打印的内容,有着满满的满足感。
在这次学习过程中,发现C语言里面的知识是特别重要的基础知识,自我感受掌握的还不到位,我觉得必须要将所学知识融汇到实践操作中,才是自己真正的突破,那种成功运行程序满足感也是特别实在的、在这过程中,学到了特别多,也明白了自己特别多不足的地方,我会在以后的学习过程中好好努力,突破自我。
教师评阅
ﻩﻩﻩ
成绩:。