16+
Четверг
20 сентября
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Средства и методы разработки

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
Николай Коровин  (21.11.2015 14:59) , в ответ на Есть ли простые способы передать монохромную картинку из буфера в памяти микроконтроллера через UART на экран компьютера и на экране ее регулярно обновлять? (разрешение картинки может быть ориентировочно от 122x32 до 320x240) автор: AlexG
А чего там писать-то? Вот, рисует прямо по десктопу. Нуль-терминатор начинает новый экран, символы с кодами выше 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);
}
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7527 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVIII