看看有沒有需要的
單片機源程序如下:
- #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 上傳
點擊文件名下載附件
無
|