ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 апреля
632804 Топик полностью
Николай Коровин (21.11.2015 14:59, просмотров: 248) ответил AlexG на Есть ли простые способы передать монохромную картинку из буфера в памяти микроконтроллера через UART на экран компьютера и на экране ее регулярно обновлять? (разрешение картинки может быть ориентировочно от 122x32 до 320x240)
А чего там писать-то? Вот, рисует прямо по десктопу. Нуль-терминатор начинает новый экран, символы с кодами выше 127 — семёрки пикселов. Накидал за полчаса, особо не тестил, но выхлоп похож на правду.  #include <iostream.h> #include <conio.h> #include <process.h> #include <stdio.h> #include <fstream.h> #include <windows.h> HANDLE hCom; HDC hDC; int InitCom(const char *Comm, int Baud) { DCB dcb; COMMTIMEOUTS TO; BOOL fSuccess; hCom = CreateFile(Comm, GENERIC_READ | GENERIC_WRITE, 0, // comm devices must be opened w/exclusive-access NULL, // no security attrs OPEN_EXISTING, // comm devices must use OPEN_EXISTING 0, // not overlapped I/O NULL); // hTemplate must be NULL for comm devices if (hCom == INVALID_HANDLE_VALUE) return 0; GetCommState(hCom,&dcb); dcb.BaudRate = Baud; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; fSuccess = SetCommState( hCom, &dcb); if(!fSuccess) return 0; PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); GetCommTimeouts( hCom,&TO); TO.ReadIntervalTimeout=MAXDWORD; //This magic combiantion means "return received data only"; TO.ReadTotalTimeoutMultiplier=0; TO.ReadTotalTimeoutConstant=0; SetCommTimeouts( hCom,&TO); return 1; } int Pos=0; #define HSIZE 320 void UpdatePixel (char Pixel) { if (!Pixel) Pos=0; //sorta null-term else if (Pixel>127) { SetPixel (hDC, Pos%HSIZE, Pos/HSIZE, 0xFFFFFF * (Pixel &1)); Pos++; SetPixel (hDC, Pos%HSIZE, Pos/HSIZE, 0xFFFFFF * (Pixel>>1&1)); Pos++; SetPixel (hDC, Pos%HSIZE, Pos/HSIZE, 0xFFFFFF * (Pixel>>2&1)); Pos++; SetPixel (hDC, Pos%HSIZE, Pos/HSIZE, 0xFFFFFF * (Pixel>>3&1)); Pos++; SetPixel (hDC, Pos%HSIZE, Pos/HSIZE, 0xFFFFFF * (Pixel>>4&1)); Pos++; SetPixel (hDC, Pos%HSIZE, Pos/HSIZE, 0xFFFFFF * (Pixel>>5&1)); Pos++; SetPixel (hDC, Pos%HSIZE, Pos/HSIZE, 0xFFFFFF * (Pixel>>6&1)); Pos++; } } void main (int argc, char *argv[]) { char i,o,name[]="COM1"; unsigned long ret; int speed=115200; hDC=GetDC(0); if (argc == 2) speed = atoi (argv[1]); for (name[3]='9';name[3]>'0';name[3]--) if (InitCom (name, speed)) { cout<<"COMM Port found on "<<name<<endl; break; } for (;;) { if (kbhit()) { i=getch(); WriteFile(hCom,&i,1,&ret,NULL); } ReadFile(hCom,&o,1,&ret,NULL); if (ret) { cout<<o; UpdatePixel(o); } flushall(); } ReleaseDC(0,hDC); }