哈Ha!
一旦我有了“工作”,就必须管理收银台Shtrikh-FR-K。 由于我的职业生涯始于KKT的维修,因此我决定从事这项工作。

这是票房本身和我的同事的试用图像的样子:

另外,除了控制引擎和设备中的热敏头外,我还必须使用OpenCV库编写一个小的python脚本。 所以走吧
这一切都始于对雷姆的研究。 码头。 到此收银台,然后将逻辑分析仪连接至热敏头引脚。 我发送了字母“ C”以通过条形测试打印。 这是我得到的:

根据DATA,点的值(每行432点),SCK(时钟信号),STB0,STB1,STB2(用于加热热敏头的闪光灯),LATCH(锁存器)-数据锁存器。 我把一行插入移位寄存器,烧掉了,然后继续。
下一步是最终确定董事会,以加快开发过程。

现在让我们继续执行代码。
void go(int n, int shag) { switch (shag) { case 0: PORTA=0b10001000; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 1: PORTA=0b10101010; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 2: PORTA=0b00100010; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 3: PORTA=0b01100110; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 4: PORTA=0b01000100; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 5: PORTA=0b01010101; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 6: PORTA=0b00010001; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 7: PORTA=0b10011001; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; } }
该票房有两个步进电机控制电路。 4步和8步。 我选择了8个,因为引擎效果更好。
#define DATA 2 #define SCK 1 #define LATCH 3 #define STB0 2 #define STB1 3 #define STB2 4 #define DATA_IN PORTB #define STB_IN PORTE int sck() { _delay_us(3); DATA_IN|= (1<<SCK); DATA_IN&= 0b11111101; } int x; int bit; void bait(int bait1) { x=0; while(x<8) { bit|= (1<<x); bit =bait1&bit; if (bit>0) { DATA_IN|=(1<<DATA); } else {DATA_IN&=0b11111011;} sck(); x++; } } void latch() { DATA_IN&=0b11110111; DATA_IN|=(1<<LATCH); }
用于将数据发送到热敏头的代码。 热敏头用作移位寄存器。 我如何在上面写道。
void print_all_pixel() { while(n<55) { print_stroka(str[n]); _delay_us(3); n++; } latch(); n=0; STB_IN&=0b11111011; _delay_us(500); STB_IN|=(1<<STB0); STB_IN&=0b11110111; _delay_us(500); STB_IN|=(1<<STB1); STB_IN&=0b11101111; _delay_us(500); STB_IN|=(1<<STB2);
印刷和刻录线的功能。
void recieve() {
旋转到永恒文件中的主要功能。 当字母“ P”进入时,我打开打印模式。 此外,所有其他字符开始输入到缓冲区中。 此外,当缓冲区中填充了54个字节(或432位)时,我们将打印该行并通过USART发送单词PRINTED。
好吧,这就是铁的部分。 在下一部分中,我将介绍软件部分,即python中的程序。
资料来源 。
