基于单片机微型打印机系统控制设计Word格式.docx
《基于单片机微型打印机系统控制设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机微型打印机系统控制设计Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
图1-1总体设计框图
1.2系统功能简介
1、温度传感器测量的当前温度值,通过主控制器在液晶屏上显示当前温度和时间。
2、按键操作可以决定微型打印机的开始,即按键后打印机开始打印。
第2章系统硬件设计
2.1主控制器部分的设计
2.1.1主控芯片的选择
P80C51基于80C51内核采用高密度CMOS技术设计制造,包含中央处理单元、片内4k程序存储器,128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、3个16位定时/计数器和6个中断源,4层优先级中断嵌套结构,可用于多机通信的串行I/O口,I/O扩展或全双工UART,片内时钟振荡电路。
此外,P80C51采用低功耗静态设计,宽工作电压范围(2.7-5.5V),宽工作频率(可为0Hz),两种软件方式选择电源空闲和掉电模式。
空闲模式下,冻结CPU而RAM定时器、串行口和中断系统维持其功能。
由于是静态设计。
所以掉电模式下,时钟振荡停止,RAM数据会得以保存,停止芯片内其它功能。
CPU唤醒后,从时钟断点处恢复执行程序。
其引脚及各引脚功能如下图2-1
2-1引脚图
单片机的40个引脚大致可分为4类:
电源、时钟、控制和I/O引脚。
⒈电源:
⑴VCC-芯片电源,接+5V;
⑵VSS-接地端;
⒉时钟:
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
⒊控制线:
控制线共有4根,
⑴ALE/PROG:
地址锁存允许/片内EPROM编程脉冲
①ALE功能:
用来锁存P0口送出的低8位地址
②PROG功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
2PSEN:
外ROM读选通信号。
3RST/VPD:
复位/备用电源。
RST(Reset)功能:
复位信号输入端。
②VPD功能:
在Vcc掉电情况下,接备用电源。
4EA/Vpp:
内外ROM选择/片内EPROM编程电源。
5EA功能:
内外ROM选择端。
b)Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
⒋I/O线
80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
(b)单片机接口电路如图2-2
图2-2单片机接口电路
2.1.2复位电路
在P80C51单片机中的振荡器运行时,RST非引脚上保持到少2个机器周期的高电平输入信号,复位过程即可完成。
根据此原理,本设计采用上系统的实用性。
本设计的具体复如下图2-3。
图2-3复位电路
2.1.3晶振电路
P80C51在工作时需要外部提供时钟信号,因此,本设计选择在其18脚19脚之间接上12MHz的晶振,为单片机提供1μs的机器振荡周期。
其电路连接图如图所示。
在图中,电容器C3、C4起稳定振荡频率、快速起振的作用,其电容值一般在20~50pF。
晶振电路图如下图2-4。
图2-4晶振电路图
2.2显示系统的设计
2.2.1显示系统的方案的选择
方案1:
用数码管或点阵LED显示。
方案2:
用液晶1602显示。
方案3:
用液晶12864显示。
时钟和温度的显示可以用数码管或LED,而且价格便宜。
但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。
有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用1602液晶显示数据有限,1602不能够显示指针时钟,只能够显示一些基本的西文字符,显示数据的可读性不好,用可以显示汉字的12864液晶显示器还可以增加显示信息的可读性,用12864的绘图功能即可绘制出指针时钟的框架,至于指针的转动则才12864加ds1302同步控制,让人看起来会很方便。
虽然它们在价格上差距很大,但是1602不能够实现我们的要求,12864.是我们唯一的选择。
2.2.212864F简介
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;
其显示分辨率为128×
64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×
4行16×
16点阵的汉字.也可完成图形显示.低电压低功耗是其显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
2.2.312864F引脚说明
管脚号
管脚名
电平
管脚功能描述
1
VSS
0V
电源地
2
VCC
3.0+5V
电源正
3
V0
-
对比度(亮度)调整
4
RS(CS)
H/L
RS=“H”,表示DB7——DB0为显示数据RS=“L”,表示DB7——DB0为显示指令数据
5
R/W(SID
R/W=“H”,E=“H”,数据被读到DB7——DB0R/W=“L”,E=“H→L”,DB7——DB0的数据被写到IR或DR
6
E(SCLK)
使能信号
7
DB0
三态数据线
8
DB1
9
DB2
10
DB3
11
DB4
三态数据线
12
DB5
13
DB6
14
DB7
15
PSB
H:
8位或4位并口方式,L:
串口方式(见注释1)
16
NC
空脚
17
/RESETH/L
复位端,低电平有效(见注释2)
18
VOUT-LCD
-LCD
驱动电压输出端
19
A
VDD
背光源正端(+5V)(见注释3)
20
K
背光源负端(见注释3)
2.2.412864F液晶显示电路
图2-5液晶显示电路图
设计中采用LCD12864液晶显示。
它一般串口、并口两种方式显示,而我们一般采用并口显示。
12864的4、5、6、15、17脚分别与单片机的P3.0~P3.4相连。
7~14脚与单片机的P0口相连。
1、20号脚接地,2号脚接电源,19号脚背光灯正端串一个电阻与电源相连,电阻起限流的作用,我们取R=10K。
3号脚是对比度(亮度)调整,这里要用一个滑动变阻器来调整亮度,这里我们取电位器大小为10K。
2.3温度系统设计
2.3.1方案的选择
用热敏电阻等测温元件测出电压,再转换成对应的温度。
需要比较多的外部元件(A/D转换)支持,且硬件电路复杂,制作成本相对较高。
用DS18B20直接测温。
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
经比较,我们选择方案2。
温度实现只能通过外部的温度传感器来实现。
经上网查阅及市场考察,DS18b20体积小,只有3只脚,电路接法简单。
内部含有寄存器为我们设计实现上下限报警功能提供保障。
精度为0.5°
C,也符合我们设计的要求。
DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。
2.3.2温度芯片的选择
经上网查阅资料及市场考察,DS18b20体积小,只有3只脚,电路接法简单。
它能够直接读出被测温度。
内部含有寄存器为我们设计实现上下限报警功能提供保障。
用户可定义的非易失性温度报警设置;
报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
C,也符合我们设计的要求。
DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。
2.3.2DS18B20内部结构描述
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
高速暂存RAM的结构为8个字节的存储器,结构如图4.1所示。
头两个字节包含测得的温度信息,第三和第四字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第五个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。
该字节各位的定义如图4.2所示。
低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
表2.1高速暂存RAM结构图
温度LSB
1字节
温度MSB
2字节
TH用户字节1
3字节
TL用户字节2
4字节
TH用户字节1
配置寄存器
5字节
TL用户字节2
保留
6字节
7字节
EEROM
8字节
CRC
9字节
表2.2配置寄存器
TM
R1
R0
2.3.3DS18b20温度系统电路
图2-6温度接口电路图
2.4时钟系统电路设计
2.4.1时钟芯片选择
我们采用具有涓细电流充电能力的低功耗实时时钟电路DS1302。
它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。
它采用主电源和备用电源双电源供电。
它的工作电压范围2.0~5.5V,在2.2V时,小于300nA。
它内部含有31个字节的静态RAM,可提供用户访问。
DS1302可以对年、月、日、周日、时、分、秒进行计时,可以达到我们设计的基本的要求。
内部的寄存器为我们调时,闹钟定时提供了寄存空间。
备用用电源也实现了当系统断电后,时钟仍然可以保持。
而且它是串行接口,与单片机通信所需要的接口少。
不像DS12887等芯片并行通信需要很多IO口。
2.4.2DS1302管脚及寄存器说明
DS1302的引脚排列Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
因此,我们vcc1用3V的纽扣电池作为备用电源,vcc2用系统电源作为主电源。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向)。
SCLK为时钟输入端。
DS1302的寄存器说明DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;
另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
2.4.3DS1302时钟电路
图2-7时钟接口电路图
2.5键盘
只需要选择一个开始打印键接口电路
图2-8按键接口电路图
2.6微型打印机
2.6.1特点与性能
RD-E型热敏微型打印机专为仪器仪表面板安装而设计,采用独特的面板式嵌入结构,便可将整个打印机固定在仪表面板上。
RD-E型为前面板易上纸结构设计,拥有多项专利技术,实现打印机上纸变革。
E型壳体超小、超薄,外观精巧;
安装开孔尺寸仅为76mm×
76mm,深度仅:
45mm;
但可容纳直径为33mm的打印纸卷。
控制板为防尘设计安装,采用原装进口打印头有效确保打印效果与打印机的使用寿命。
2.7打印机接口电路
图2-9打印机接口电路图
2.8硬件原理图
图2-10硬件原理图
第3章软件设计
3.1并口连接方式例程
#include<
reg52.h>
string.h>
INTRINS.H>
bitSTB=P1.1;
sbitBUSY=P1.0;
/**************并口打印子程序**************/
voidpprint(unsignedcharch)
{
while(BUSY)
{};
P0=ch;
STB=0;
_nop_();
STB=1;
sbitSTB=P1.1;
/**************主函数**************/
main()
inti;
charch[]="
北京荣达测试程序"
;
pprint(0x1b);
pprint(0x38);
pprint(0x00);
//调用汉字出库指令
for(i=0;
i<
strlen(ch);
i++)
pprint(ch[i]);
pprint(0x0d);
//回车
3.2按键接口设计
//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbitKEY=P3^3;
//定义按键输入端口
sbitLED=P1^2;
//定义led输出端口
/*------------------------------------------------
主函数
------------------------------------------------*/
voidmain(void)
KEY=1;
//按键输入端口电平置高
while
(1)//主循环
{
if(!
KEY)//如果检测到低电平,说明按键按下
LED=0;
else
LED=1;
//这里使用if判断,如果按键按下led点亮,否则熄灭
//上述4句可以用一句替代LED=KEY;
//主循环中添加其他需要一直工作的程序
}
}
3.312864,DS1302,DS18B20的接口程序
/****************************************************************
程序名称:
时钟+温度通过LCD12864显示默认时间:
从12:
00开始
版本:
VER1.0
适用板本:
PL-51学习板
*****************************************************************/
/*头文件*/#include<
#include<
intrins.h>
#defineuintunsignedint#defineucharunsignedchar#defineNop()_nop_()#define_Nop()_nop_()
/*引脚端口定义*/
sbitLCD12864_RS_PORT=P2^4;
/*LCD12864引脚定义*/
sbitLCD12864_RW_PORT=P2^65;
sbitLCD12864_E_PORT=P2^6;
#defineLCD12864_DA_PORTP0
///////////////////////////////////////
sbitdula=P2^3;
//数码管的段选信号
sbitwela=P2^2;
//数码管的位选信号
voiddelay1(void)//关闭数码管延时程序
{intk;
for(k=0;
k<
1000;
k++);
}
//////////////////////////////////////
sbitDQ=P3^7;
//定义DS18B20通信端口
sbitT_CLK=P3^5;
/*实时时钟时钟线引脚*/
sbitT_IO=P3^4;
/*实时时钟数据线引脚*/
sbitT_RST=P