我来发一个完整的测试程序, 有些地方不是很完善.
(原文件名:打印机.jpg)
点击此处下载 Printer_Test_V0.0.rar
#include "CPU_Config.h"
#include "Printer.h"
#include "init.h"
#define StopMoto() PORTE |= (1<<PE3)
#define StartMoto() PORTE &=~(1<<PE3) //低电平有效
#define ClrAllDot() PORTF |= 0x0F
#define PrintDotA() PORTF &=~(1<<PF0) //低电平有效
#define PrintDotB() PORTF &=~(1<<PF1)
#define PrintDotC() PORTF &=~(1<<PF2)
#define PrintDotD() PORTF &=~(1<<PF3)
#define RstIntOn() EIMSK |= (1<<INT5) //允许复位信号中断
#define RstIntOff() EIMSK &=~(1<<INT5) //禁止复位信号中断
#define TimIntOn() EIMSK |= (1<<INT4) //允许同步信号中断
#define TimIntOff() EIMSK &=~(1<<INT4) //禁止同步信号中断
__flash uchar ASCII[128][10] = {
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 0
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 1
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 2
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 3
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 4
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 5
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 6
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 7
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 8
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 9
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 10
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 11
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 12
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 13
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 14
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 15
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 16
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 17
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 18
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 19
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 20
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 21
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 22
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 23
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 24
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 25
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 26
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 27
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 28
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 29
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 30
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 31
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},// ' ' 0
{0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00},// '!' 1
{0x00,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00},// '"' 2
{0x00,0x00,0x00,0x50,0xF8,0x50,0x50,0xF8,0x50,0x00},// '#' 3
{0x00,0x00,0x20,0x78,0xA0,0x70,0x28,0xF0,0x20,0x00},// '$' 4
{0x00,0x00,0xC0,0xC0,0x10,0x20,0x40,0x98,0x18,0x00},// '%' 5
{0x00,0x00,0x40,0xA0,0xA0,0x40,0xA8,0x90,0x68,0x00},// '&' 6
{0x00,0x30,0x30,0x20,0x00,0x00,0x00,0x00,0x00,0x00},// ''' 7
{0x10,0x20,0x20,0x40,0x40,0x40,0x40,0x20,0x20,0x10},// '(' 8
{0x40,0x20,0x20,0x10,0x10,0x10,0x10,0x20,0x20,0x40},// ')' 9
{0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00},// '*' 10
{0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00},// '+' 11
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0xC0},// ',' 12
{0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00},// '-' 13
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00},// '.' 14
{0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80},// '/' 15
{0x00,0x00,0x70,0x88,0x98,0xA8,0xC8,0x88,0x70,0x00},// '0' 16
{0x00,0x00,0x20,0x60,0xA0,0x20,0x20,0x20,0xF8,0x00},// '1' 17
{0x00,0x00,0x70,0x88,0x08,0x30,0x40,0x80,0xF8,0x00},// '2' 18
{0x00,0x00,0x70,0x88,0x08,0x30,0x08,0x88,0x70,0x00},// '3' 19
{0x00,0x00,0x10,0x30,0x50,0x90,0xF8,0x10,0x10,0x00},// '4' 20
{0x00,0x00,0xF8,0x80,0xF0,0x08,0x08,0x88,0x70,0x00},// '5' 21
{0x00,0x00,0x70,0x88,0x80,0xF0,0x88,0x88,0x70,0x00},// '6' 22
{0x00,0x00,0xF8,0x08,0x10,0x10,0x20,0x20,0x20,0x00},// '7' 23
{0x00,0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x70,0x00},// '8' 24
{0x00,0x00,0x70,0x88,0x88,0x78,0x08,0x88,0x70,0x00},// '9' 25
{0x00,0x00,0x00,0x60,0x60,0x00,0x60,0x60,0x00,0x00},// ':' 26
{0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x60,0x60,0xC0},// ';' 27
{0x00,0x00,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x00},// '<' 28
{0x00,0x00,0x00,0x00,0xF8,0x00,0xF8,0x00,0x00,0x00},// '=' 29
{0x00,0x00,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x00},// '>' 30
{0x00,0x70,0x88,0x08,0x10,0x20,0x20,0x00,0x20,0x00},// '?' 31
{0x00,0x00,0x70,0x88,0xA8,0xA8,0xB0,0x80,0x70,0x00},// '@' 32
{0x00,0x00,0x20,0x50,0x88,0x88,0xF8,0x88,0x88,0x00},// 'A' 33
{0x00,0x00,0xF0,0x88,0x88,0xF0,0x88,0x88,0xF0,0x00},// 'B' 34
{0x00,0x00,0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x00},// 'C' 35
{0x00,0x00,0xF0,0x88,0x88,0x88,0x88,0x88,0xF0,0x00},// 'D' 36
{0x00,0x00,0xF8,0x80,0x80,0xF0,0x80,0x80,0xF8,0x00},// 'E' 37
{0x00,0x00,0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0x00},// 'F' 38
{0x00,0x00,0x70,0x88,0x80,0x80,0x98,0x88,0x70,0x00},// 'G' 39
{0x00,0x00,0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00},// 'H' 40
{0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00},// 'I' 41
{0x00,0x00,0x08,0x08,0x08,0x08,0x88,0x88,0x70,0x00},// 'J' 42
{0x00,0x00,0x88,0x90,0xA0,0xC0,0xA0,0x90,0x88,0x00},// 'K' 43
{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xF8,0x00},// 'L' 44
{0x00,0x00,0x88,0xD8,0xA8,0xA8,0x88,0x88,0x88,0x00},// 'M' 45
{0x00,0x00,0x88,0x88,0xC8,0xA8,0x98,0x88,0x88,0x00},// 'N' 46
{0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00},// 'O' 47
{0x00,0x00,0xF0,0x88,0x88,0xF0,0x80,0x80,0x80,0x00},// 'P' 48
{0x00,0x00,0x70,0x88,0x88,0x88,0xA8,0x90,0x68,0x00},// 'Q' 49
{0x00,0x00,0xF0,0x88,0x88,0xF0,0xA0,0x90,0x88,0x00},// 'R' 50
{0x00,0x00,0x70,0x88,0x80,0x70,0x08,0x88,0x70,0x00},// 'S' 51
{0x00,0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x00},// 'T' 52
{0x00,0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00},// 'U' 53
{0x00,0x00,0x88,0x88,0x88,0x88,0x88,0x50,0x20,0x00},// 'V' 54
{0x00,0x00,0x88,0x88,0x88,0xA8,0xA8,0xD8,0x88,0x00},// 'W' 55
{0x00,0x00,0x88,0x88,0x50,0x20,0x50,0x88,0x88,0x00},// 'X' 56
{0x00,0x00,0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x00},// 'Y' 57
{0x00,0x00,0xF8,0x08,0x10,0x20,0x40,0x80,0xF8,0x00},// 'Z' 58
{0x00,0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70},// '[' 59
{0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08},// '\' 60
{0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70},// ']' 61
{0x00,0x00,0x00,0x00,0x20,0x50,0x88,0x00,0x00,0x00},// '^' 62
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC},// '_' 63
{0x00,0x30,0x30,0x10,0x00,0x00,0x00,0x00,0x00,0x00},// '`' 64
{0x00,0x00,0x00,0x00,0x70,0x08,0x78,0x88,0x78,0x00},// 'a' 65
{0x00,0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0xF0,0x00},// 'b' 66
{0x00,0x00,0x00,0x00,0x78,0x80,0x80,0x80,0x78,0x00},// 'c' 67
{0x00,0x00,0x08,0x08,0x78,0x88,0x88,0x88,0x78,0x00},// 'd' 68
{0x00,0x00,0x00,0x00,0x70,0x88,0xF8,0x80,0x70,0x00},// 'e' 69
{0x00,0x00,0x30,0x40,0x40,0xF0,0x40,0x40,0x40,0x00},// 'f' 70
{0x00,0x00,0x00,0x00,0x70,0x88,0x88,0x88,0x78,0x08},// 'g' 71
{0x00,0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x88,0x00},// 'h' 72
{0x00,0x00,0x20,0x00,0x60,0x20,0x20,0x20,0x70,0x00},// 'i' 73
{0x00,0x00,0x10,0x00,0x30,0x10,0x10,0x10,0x10,0x10},// 'j' 74
{0x00,0x00,0x80,0x80,0x88,0x90,0xE0,0x90,0x88,0x00},// 'k' 75
{0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00},// 'l' 76
{0x00,0x00,0x00,0x00,0xD0,0xA8,0xA8,0xA8,0xA8,0x00},// 'm' 77
{0x00,0x00,0x00,0x00,0xB0,0xC8,0x88,0x88,0x88,0x00},// 'n' 78
{0x00,0x00,0x00,0x00,0x70,0x88,0x88,0x88,0x70,0x00},// 'o' 79
{0x00,0x00,0x00,0x00,0xF0,0x88,0x88,0x88,0xF0,0x80},// 'p' 80
{0x00,0x00,0x00,0x00,0x78,0x88,0x88,0x88,0x78,0x08},// 'q' 81
{0x00,0x00,0x00,0x00,0xB0,0xC8,0x80,0x80,0x80,0x00},// 'r' 82
{0x00,0x00,0x00,0x00,0x78,0x80,0x70,0x08,0xF0,0x00},// 's' 83
{0x00,0x00,0x20,0x20,0x78,0x20,0x20,0x20,0x18,0x00},// 't' 84
{0x00,0x00,0x00,0x00,0x88,0x88,0x88,0x98,0x68,0x00},// 'u' 85
{0x00,0x00,0x00,0x00,0x88,0x88,0x88,0x50,0x20,0x00},// 'v' 86
{0x00,0x00,0x00,0x00,0x88,0xA8,0xA8,0xA8,0x50,0x00},// 'w' 87
{0x00,0x00,0x00,0x00,0x88,0x50,0x20,0x50,0x88,0x00},// 'x' 88
{0x00,0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x78,0x08},// 'y' 89
{0x00,0x00,0x00,0x00,0xF8,0x10,0x20,0x40,0xF8,0x00},// 'z' 90
{0x00,0x10,0x20,0x20,0x20,0xC0,0x20,0x20,0x20,0x10},// '{' 91
{0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20},// '|' 92
{0x00,0x80,0x40,0x40,0x40,0x30,0x40,0x40,0x40,0x80},// '}' 93
{0x00,0x00,0x00,0x00,0x68,0xB0,0x00,0x00,0x00,0x00},// '~' 94
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},// '' 95
};
//uchar * PtrPrint[16];
//PrtPrint[1] = ASCII[32];
__flash uchar code[16][10] = {
{0x00,0x00,0x70,0x88,0x98,0xA8,0xC8,0x88,0x70,0x00},
{0x00,0x00,0x20,0x60,0xA0,0x20,0x20,0x20,0xF8,0x00},
{0x00,0x00,0x70,0x88,0x08,0x30,0x40,0x80,0xF8,0x00},
{0x00,0x00,0x70,0x88,0x08,0x30,0x08,0x88,0x70,0x00},
{0x00,0x00,0x10,0x30,0x50,0x90,0xF8,0x10,0x10,0x00},
{0x00,0x00,0xF8,0x80,0xF0,0x08,0x08,0x88,0x70,0x00},
{0x00,0x00,0x70,0x88,0x80,0xF0,0x88,0x88,0x70,0x00},
{0x00,0x00,0xF8,0x08,0x10,0x10,0x20,0x20,0x20,0x00},
{0x00,0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x70,0x00},
{0x00,0x00,0x70,0x88,0x88,0x78,0x08,0x88,0x70,0x00},
{0x00,0x00,0x20,0x50,0x88,0x88,0xF8,0x88,0x88,0x00},
{0x00,0x00,0xF0,0x88,0x88,0xF0,0x88,0x88,0xF0,0x00},
{0x00,0x00,0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x00},
{0x00,0x00,0xF0,0x88,0x88,0x88,0x88,0x88,0xF0,0x00},
{0x00,0x00,0xF8,0x80,0x80,0xF0,0x80,0x80,0xF8,0x00},
{0x00,0x00,0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0x00},
};
void Print_Init(void)
{
DDRF |= ((1<<PF0)|(1<<PF1)|(1<<PF2)|(1<<PF3));
DDRE |= (1<<PE3);
DDRE &= ~((1<<PE4)|(1<<PE5));
PORTE &= ~((1<<PE4)|(1<<PE5));
RstIntOff();
TimIntOff();
ClrAllDot();
StopMoto();
}
void PrintStart(void)
{
StartMoto();
ClrAllDot();
RstIntOn();
TimIntOn();
}
void PrintStop(void)
{
StopMoto();
ClrAllDot();
RstIntOff();
RstIntOff();
}
uchar __flash *CodePtr[16];
uchar TimingCount = 0;
uchar PrintFlag = 0;
#pragma vector=INT4_vect
__interrupt void TimingDectInt(void)
{
uchar x, z, w;
static uchar y = 0;
if (PrintFlag == 2)
{
x = TimingCount/24;
w = TimingCount%4; //对应ABCD四个打印头
z = (TimingCount/4)%6; //每个字符点阵移位
ClrAllDot();
//if ((TimingCount<96)&&(code[4*w+x][y] & (0x80>>z))) //判断该点是否需要打印
if ((TimingCount<96) && (*(CodePtr[4*w+x]+y)&(0x80>>z)) )
{
switch (w)
{
case 0:
PrintDotA();
break;
case 1:
PrintDotB();
break;
case 2:
PrintDotC();
break;
case 3:
PrintDotD();
break;
default:
break;
}
}
}
TimingCount++;
if (TimingCount>167) //判断一行到头
{
TimingCount = 0;
y++;
if (y == 10)
{
PrintStop();
PrintFlag = 0;
y = 0;
}
}
}
#pragma vector=INT5_vect
__interrupt void ResetDectInt(void)
{
if ((PrintFlag==0)&&(TimingCount == 0x2B))
{
PrintFlag = 1;
}
if ((PrintFlag==1)&&(TimingCount == 0x7D))
{
PrintFlag = 2;
RstIntOff();
TimIntOn();
}
TimingCount = 0;
}
void PrintLine(uchar *str)
{
uchar c=0, i=0;
while (*str)
{
c = *str++;
CodePtr[i++] = ASCII[c];
}
for (; i< 16; i++)
{
CodePtr = ASCII[' '];
}
PrintStart();
}
void main(void)
{
mcu_init();
Print_Init();
//TransmitLine("Uart0 Test...");
//PrintStart();
while(1)
{
PrintLine("Hello!Print!");
delay_ms(2000);
}
} |