本帖最后由 拿起书本 于 2012-4-2 22:36 编辑
在51单片机应用系统中,微型打印机是主要的硬拷贝输出设备,目前国内流行的微型打印机心要有GP16,TPuP16/40A,PP40等。下面介绍一下以GP16为例介绍打印机在51单片机系统中的扩展设计。
下面是51单片机与GP16微型打印机的连接示意图。
C语言程序及讲解
*****************************************************************************
本程序的主要功能是分三行实现打印内存缓冲区存储的三个温度数据:
打印格式为:
一T: × × × × .× × ℃
二T: × × × × .× × ℃
三T: × × × × .× × ℃
******************************************************************************
uchar table1[3]= {0x54; 0x 3a; 0x 20} 行开头数据
uchar table2[4]= {0x43; 0x 20; 0x 20; 0x 20} 行结尾数据
uvhsr dbuf[9]={12,13,14,15,16,17,18,19,20} 内存9位数据
uchar hanzi[3]={0x81;0x82;0x83} 表头汉字表
uchar t=0x00
#define PNTER XBYTE[0x7fff] //打印机端口地址
void main()
{
IE=0x00; //关闭中断
do
{temp=PNTER;} //读取打印机状态
while((temp&&0x81)=0) //一直到打印机可以响应单片机的新命令
do
{
PNTER=0x91; //送打印命令:送打印命令:打印字符串,点行数为0x0a
temp=PNTER;
}
while(( (temp&&0x80)=0) ) //一直等到打印机收到正确的打印命令
if( (temp&&0x01)!=0))
{
do{temp=PNTER}
while((temp&&0x01h)=0)) //读取打印机状态,一直到打印机空闲
}
PNTER=0x03; //送打印行数:3行
do
{temp=PNTER;}
while(( (temp&&0x01)=0) //读取打印机状态,一直到打印机空闲
//以下为打印三行数据程序段
for{i=0,i<3,i++}
{
PNTER=hanzi; //打印行开头汉字
do{temp=PNTER}
while((temp&&0x01h)=0))
for(m=0;m<3;m++)
{
PNTER=table1[m];
do{temp=PNTER}
while((temp&&0x01h)=0)) //打印行开头T:
}
PNTER=DBUF[t++]
do{temp=PNTER}
while((temp&&0x01h)=0)) //打印前两位整数
PNTER=DBUF[t++]
do{temp=PNTER}
while((temp&&0x01h)=0))
PNTER=0x2e;
do{temp=PNTER}
while((temp&&0x01h)=0)) //打印小数点
PNTER=DBUF[t++]
do{temp=PNTER}
while((temp&&0x01h)=0)) //打印小数位
for(m=0;m<4;m++)
{
PNTER=table2[m];
do{temp=PNTER}
while((temp&&0x01h)=0)) //打印行结尾℃
}
}
} //主程序结束
[localimg=171,150]1[/localimg] |