ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
440205 Топик полностью
Vladimir Ljaschko (10.09.2013 03:55 - 04:18, просмотров: 92) ответил Юра на Выкиньте свой компилер - это первое. Чтоб не пропускал такие вещи как ';' в декларации размера массива. (Даю наводку: уберите точку с запятой из дифайнов). Во-вторых - зачем одели массивы в структуры? Вы их копировать что ли хотите? Можно же
обращаться пора уже с помощью printf и SetLcdPos, иначе никаких преимуществ по сравнению с ассемблером он не получит. И тогда проще иметь одномерный массив, с переносом в putchar. И вообще массив не нужен. Только для обновления экрана в случае помех, сбивающих сам экран. __no_init char lcd_buf[MaxX*MaxY]; __no_init char x,y; // current position can be modified by any function here void ClrScr(void) { char i; WriteLcdControl(0x01); Delay(2); for (i=0; i<MaxX*MaxY; i++) lcd_buf[i]=0x20; x=1; y=1; } void SetLcdPos(char new_x, char new_y) { x=new_x; y=new_y; if (new_y==1) WriteLcdControl(0x80+(x-1)); else WriteLcdControl(0x80+39+x); } void InitLcd(void) { char i; for (i=0; i<MaxX*MaxY; i++) lcd_buf[i]=0x20; InitLcdWithoutBuffer(); } void InitLcdWithoutBuffer(void) { зависит от дисплея : WriteLcdControl( 0x39 ); // 8 bit, 2 line, instruction table 1 WriteLcdControl( 0x14 ); // bias 1/5 SetContrast ( 0x18 ); // set contrast to 011000b WriteLcdControl( 0x6d ); // Fon=1, Rab2=1, Rab0=1 WriteLcdControl( 0x06 ); // autoincrement on, shift off WriteLcdControl( 0x80 ); // set DDRAM = 0 WriteLcdControl( 0x0c ); // display on, cursor off, position off ClrScr(); } void UpdateScreen(void) { char i; SetLcdPos(1,1); for (i=0;i<MaxX; i++) WriteLcdData(lcd_buf[i]); SetLcdPos(1,2); for (i=MaxX;i<MaxX*2; i++) WriteLcdData(lcd_buf[i]); } void ClearLine(char line) { SetLcdPos(1,line); printf("%s"," "); SetLcdPos(1,line); } int putchar(int c) { WriteLcdData(с); if ((x>=1)&&(x<=MaxX)&&(y>=1)&&(y<=MaxY)) lcd_buf[(x-1)+MaxX*(y-1)]=с; x++; if(x>MaxX) { x=1; y++; if (y>MaxY) y=1; SetLcdPos(x,y); } return(c); }