Код
Помимо вывода графики побайтно также существует возможность установки или сброса одного бита в байте по заданному адресу. Это позволяет управлять отдельными точками на экране. Ниже приведена функция, позволяющая засвечивать или гасить отдельный бит по заданному адресу.
void PutPixelXYLCD(unsigned char X,unsigned char Y,unsigned char bt)
{
unsigned int i;
i=(unsigned int)X/6;
i=(unsigned int)(LCD_GraphicHome)+(unsigned int)X/6+(unsigned int)Y*0x28;
SetAddrLCD((unsigned int)(LCD_GraphicHome)+(unsigned int)X/6+(unsigned int)Y*0x28);//Установка адреса
while ((GetStatusLCD()&0x03)!=0x03);
//Вывод точки.
if (bt)
Send8LCD(1,(0xf8|(5-(X-(X/6)*6))));
else
Send8LCD(1,(0xf0|(5-(X-(X/6)*6))));
}
В этой функции используется функция установки указателя адреса, позволяющая выполнять эту операцию в одной строке, что облегчает читаемость программы. Вот ее текст:
void SetAddrLCD(unsigned int addr)
{
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,(unsigned char)addr);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,(unsigned char)(addr>>8));
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x24);
}
void PutPixelXYLCD(unsigned char X,unsigned char Y,unsigned char bt)
{
unsigned int i;
i=(unsigned int)X/6;
i=(unsigned int)(LCD_GraphicHome)+(unsigned int)X/6+(unsigned int)Y*0x28;
SetAddrLCD((unsigned int)(LCD_GraphicHome)+(unsigned int)X/6+(unsigned int)Y*0x28);//Установка адреса
while ((GetStatusLCD()&0x03)!=0x03);
//Вывод точки.
if (bt)
Send8LCD(1,(0xf8|(5-(X-(X/6)*6))));
else
Send8LCD(1,(0xf0|(5-(X-(X/6)*6))));
}
В этой функции используется функция установки указателя адреса, позволяющая выполнять эту операцию в одной строке, что облегчает читаемость программы. Вот ее текст:
void SetAddrLCD(unsigned int addr)
{
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,(unsigned char)addr);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,(unsigned char)(addr>>8));
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x24);
}
конкретно интересует
вот этот
Код
5-(X-(X/6)*6)))
момент ?? Для чего эти вычисления?