| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Вывод кириллицы на ЖК-дисплей https://radiokot.ru/forum/viewtopic.php?f=53&t=188657 |
Страница 1 из 1 |
| Автор: | Pinasol [ Ср июн 07, 2023 21:45:49 ] |
| Заголовок сообщения: | Вывод кириллицы на ЖК-дисплей |
Добрый день, необходимо составить функцию putstr для вывода текстовой строки, завершающейся нуль-символом 0, на ЖК-дисплей стенда (ЖКД). Строка может содержать латиницу, символы, и кириллицу в кодировке Windows ср1251. Указание: в знакогенераторе ЖКД кириллические символы представлены в нестандартной кодировке, в функции putstr необходимо предусмотреть: 1) детектор кириллических символов; 2) табличный преобразователь кода кириллицы из Windows ср1251 во внутреннюю кодировку ЖК-дисплея. Используя putstr, составить демонстрационную программу для вывода на ЖКД текста, поступающего из компьютера. Предусмотреть: 1) при заполнении первой строки — автоматический перевод строки; 2) при заполнении второй строки — короткий звуковой сигнал. Платформа х51, микроконтроллер ADuC842, ЖК-дисплей WH1602b, язык программирования С51. Прошу Вас, помогите! (не за бесплатно) |
|
| Автор: | panasonic [ Чт июн 08, 2023 11:45:14 ] |
| Заголовок сообщения: | Re: Вывод кириллицы на ЖК-дисплей |
Вывод строки символов с перекодировкой реализуется несложно,и практически аппаратно независим, при наличии функции вывода на дисплей одного символа, вроде putchar(). А вот она уже зависит от схемы подключения ЖКД. Тестовую строку будете получать с компьютера,через какой интерфейс(UART?)- тоже нужна функция и настройка периферии. Работоспособная тестовая программа получится гораздо больше ,чем функция вывода строки. Как пример: СпойлерКод: #define LCD_E PORTB.5 //6выв #define LCD_RW PORTB.6 //5выв 1-read 0-write #define LCD_A0 PORTB.7 //4выв 0-команда 1-данные(RS) #define LCD0 PORTB.4 //11выв DB4 #define LCD1 PORTB.3 //12выв DB5 #define LCD2 PORTB.2 //13выв DB6 #define LCD3 PORTB.1 //14выв DB7 //LCD_RW=0; //DisplayInit(); //loadfont( &Character[0][0] ); void PutNibble(unsigned char c)//,unsigned char cmdFlag) { char n=c; //LCD_E=1; LCD0=0;if(n&0x1)LCD0=1; LCD1=0;if(n&0x2)LCD1=1; LCD2=0;if(n&0x4)LCD2=1; LCD3=0;if(n&0x8)LCD3=1; //LCD_RW=0; //LCD_A0=1;if (cmdFlag)LCD_A0=0; LCD_E=0; LCD_E=1; } void WriteCmd(char cmd) { LCD_A0=0;//команда PutNibble(cmd>>4); PutNibble(cmd); delay_us(40); } void Lcdchar(char ch) { LCD_A0=1;//данные PutNibble(ch>>4); PutNibble(ch); delay_us(40);//надо! не успевает LCD } void DisplayClear(void) { WriteCmd(1); delay_ms(10); } #define DL8 0x10 //8 разр интерфейс #define P1 0x02 //1 page знакогенератора #define D_ON 0x04 //display ON #define CUR_ON 0x02 //cursor ON #define BLINK 0x01 //blinking cursor //#define //static inline void DisplayInit(void) { void DisplayInit(void) { LCD_A0=0; PutNibble(0x3);delay_us(100); PutNibble(0x3);delay_us(100); PutNibble(0x3);delay_us(100); PutNibble(0x2);delay_us(100); WriteCmd(0x28 );//|P1 | DL8);//4бита 1 страница зн ген // WriteCmd(0x08);// уст парам // WriteCmd(0x0c |0 |0); //0c включ диспл и тип курсора //2-кур есть 1-мигает WriteCmd(0x08 | D_ON );//| CUR_ON | BLINK ); //0c включ диспл и тип курсора WriteCmd(0x04 |2 |0); //2 сдвиг кур вправо 1 сдв диспл DisplayClear(); } //char a_lcd[]={0,0x40,0x14,0x54}; char a_lcd[]={0x80,0xc0}; static void gotoXY(unsigned char x,unsigned char y) { WriteCmd(0x80|(a_lcd[y])+(x&0x1f)); } void at_yx(char y,char x) { WriteCmd(0x80|(a_lcd[y])+(x&0x1f)); //gotoXY(x,y); } //char string[]=("Hello мир! и вся Коммунистическая партия"); void lcd_str(flash char *p)//важно flash, иначе строки в RAM //void puts(char *p) { char c; for(;c = *p++ ;) Lcdchar(c); //while(c = *p++ ) Putchar(c); } //lcd_rus("as\0\1\2f\3\4\5\6\7$");//'$'конец строки void lcd_rus(flash char *p)//выв строки конец '$' { char c; for(;(c = *p++)!='$' ;) Lcdchar(c); } void printYX(char y,char x,flash char *p) {//char *p=ps; //y=*p++;x=*p++; at_yx(y,x); lcd_str(p); } //загрузка фонта в lcd //loadfont( &Character[0][0] ); //loadfont( &Character[8][0] ); void loadfont(flash unsigned char *p) { char i; WriteCmd(0x40);//CGRAM mode for(i=0;i<64;i++) Lcdchar(*p++); WriteCmd(0x80); } |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


