标题:
STM8移植Qrduino打印二维码源码
[打印本页]
作者:
gyh02133
时间:
2018-12-6 15:11
标题:
STM8移植Qrduino打印二维码源码
看看有没有需要的
0.png
(36.6 KB, 下载次数: 34)
下载附件
2018-12-6 20:32 上传
单片机源程序如下:
#include "main.h"
#include "qrencode.h"
#define strcopy(dsr,scr) memcpy(dsr,scr,sizeof(scr))
extern unsigned char WD, WDB;
extern void qrencode();
extern const unsigned char framebase[];
extern const unsigned char framask[];
extern unsigned char ismasked(unsigned char x, unsigned char y);
Uint8 printbuf[64*8];//QR版本不能过高,缓冲不够.
Uint8 temp8;
Uint32 temp32;
//使能放大打印倍数.
#define PRINT_9_MAG
#define PRINT_6_MAG
#define PRINT_3_MAG
/*******************************************************************************
* Function Name : main
* Description : main loop
* Input : None
* Output : None
* Return : None
*******************************************************************************/
//选择不同的version文件实现打印不同版本.
int main( void )
{
Uint8 i,j,k,l,loop;
Uint8 x,y;
Uint8 rowmag;//列放大.
Uint8 data1,data2;
Uint16 printrow;//打印输出的列数.
init_clk();
init_gpio();
// BAUD_57600 BAUD_115200 BAUD_230400 BAUD_460800
init_uart(BAUD_115200);
init_oled();
enable_interrupt();
oled_xy(0,0); //在哪行那列开始显示
//OLED显示QR基本框架.
for(y=0;y<WDB;y++)
{
oled_xy(y,0);
for(x=0;x<WD;x++)
{
data1 = framebase[x*WDB+y];
for(l=0;l<8;l++)
{
data2 <<= 1;
if(data1&0x01) data2|=0x01;
data1 >>= 1;
}
oled_writ_data(data2);
}
}
//计算QR码.
strcopy(strinbuf,"www.hawkbell.com");
qrencode();
//OLED显示QR计算结果.
for (i = 0; i < WDB; i++)
{
oled_xy(i, 0);
for (j = 0; j < WD; j++)
{
data1 = 0;
for (k = 0; k < 8; k++)
{
data1 |= QRBIT(j, ((i*8)+k)) << k;
}
oled_writ_data(data1);
//高低位倒过来.
for(l=0;l<8;l++)
{
data2 <<= 1;
if(data1&0x01) data2|=0x01;
data1 >>= 1;
}
//保存到缓冲中,发送到打印机时可以用.
printbuf[i*WD+j] = data2;
}
}
#ifdef PRINT_9_MAG
///////-----放大9倍--热敏打印机打印-----------------////////
Uint8 mut;
Uint8 ti,tj;
Uint8 table[3]={27,54,72};
Uint8 shik[3]={3,6,0};
Uint16 mutmask = 0x1ff;
mut = 9;
printrow = WD*mut;
for (j = 0; j < WDB; j++)
{
for(ti=0;ti<3;ti++)
{
uart_send_byte(0x1B);
uart_send_byte(0x2A);
uart_send_byte(0x21);
uart_send_byte(printrow);
uart_send_byte(printrow>>8);
rowmag=0;
for (i = 0; i < WD; )
{
tj =0;
temp8 = printbuf[j*WD+i];
temp32 = 0;
for(loop=0;loop<8;loop++)
{
temp32 <<= mut;
if(temp8&0x80) temp32 |= mutmask;
temp8 <<= 1;
tj += mut;
if(tj>=table[ti])
{
temp32 >>= shik[ti];
break;
}
}
uart_send_byte(temp32>>16);
uart_send_byte(temp32>>8);
uart_send_byte(temp32);
if(rowmag >= 8)//水平放大一倍.
{
rowmag = 0;
i++;
} else rowmag++;
}
//打印一行.
uart_send_byte(0x1B);
uart_send_byte(0x4A);
uart_send_byte(0x18);
}
}
////////////////////////////////////////////////
uart_send_byte(0x1B);
uart_send_byte(0x4A);
uart_send_byte(0x18);
//打印空白行
uart_send_byte(0x1B);
uart_send_byte(0x4A);
uart_send_byte(0x18);
////////////////////////////////////////////////
#endif
#ifdef PRINT_6_MAG
///////-----放大6倍----热敏打印机打印-----------------////////
Uint8 bitflag = 0;
printrow = WD*6;
for (j = 0; j < WDB;j++)
{
for(bitflag = 0;bitflag<2;bitflag++)
{
uart_send_byte(0x1B);
uart_send_byte(0x2A);
uart_send_byte(0x21);
uart_send_byte(printrow);
uart_send_byte(printrow>>8);
rowmag=0;
for (i = 0; i < WD; )
{
if(bitflag==0)//前4BIT.
temp8 = printbuf[j*WD+i]&0xf0;
else temp8 = printbuf[j*WD+i]<<4;
temp32 = 0;
for(loop=0;loop<4;loop++)
{
temp32 <<= 6;
if(temp8&0x80) temp32 |= 0x3f;
temp8 <<= 1;
}
uart_send_byte(temp32>>16);
uart_send_byte(temp32>>8);
uart_send_byte(temp32);
if(rowmag >= 5)//水平放大一倍.
{
rowmag = 0;
i++;
} else rowmag++;
}
uart_send_byte(0x1B);
uart_send_byte(0x4A);
uart_send_byte(0x18);
}
}
////////////////////////////////////////////////
uart_send_byte(0x1B);
uart_send_byte(0x4A);
uart_send_byte(0x18);
//打印空白行
uart_send_byte(0x1B);
uart_send_byte(0x4A);
uart_send_byte(0x18);
////////////////////////////////////////////////
#endif
#ifdef PRINT_3_MAG
///////-----放大3倍--------热敏打印机打印-----------------////////
printrow = WD*3;
for (j = 0; j < WDB; j++)
{
uart_send_byte(0x1B);
uart_send_byte(0x2A);
uart_send_byte(0x21);
uart_send_byte(printrow);
uart_send_byte(printrow>>8);
rowmag=0;
for (i = 0; i < WD; )
{
temp8 = printbuf[j*WD+i];
temp32 = 0;
for(loop=0;loop<8;loop++)
{
temp32 <<= 3;
if(temp8&0x80) temp32 |= 0x07;
temp8 <<= 1;
}
uart_send_byte(temp32>>16);
uart_send_byte(temp32>>8);
uart_send_byte(temp32);
if(rowmag >= 2)//水平放大3倍.
{
rowmag = 0;
i++;
}
else rowmag++;
}
uart_send_byte(0x1B);
uart_send_byte(0x4A);
uart_send_byte(0x18);
}
////////////////////////////////////////////////
uart_send_byte(0x1B);
uart_send_byte(0x4A);
uart_send_byte(0x18);
//打印空白行
uart_send_byte(0x1B);
uart_send_byte(0x4A);
uart_send_byte(0x18);
////////////////////////////////////////////////
#endif
//切纸
uart_send_byte(0x1D);
uart_send_byte(0x56);
uart_send_byte(0x42);
uart_send_byte(0x80);
while(1);
}
复制代码
所有资料51hei提供下载:
STM8移植Qrduino打印二维码.rar
(767.61 KB, 下载次数: 12)
2018-12-6 15:09 上传
点击文件名下载附件
无
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1