|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 12:43 pm
|
Страница 1 от 1
|
[ 12 мнения ] |
|
| Автор |
Съобщение |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
 LCD & CCS PIC C
Реших и аз да се прехвърля на CCS C-то.
Опитвам се да пусна LCD-то ми в следния вариант:
PortD.4-7 : data lines
PortE.0 : rs
PortE.1 : enable
PortE.2 : rw
Оригиналния lcd.c файл дава възможност да си закача дисплея на ПортА или ПортБ. На мен обаче ми трябва, както съм го описал горе. Изтеглих един файл от форума, който уж дава възможност да си направя каквата искам комбинация, но нещо не се получава. При компилация получавам съобщение за грешка в lcdd.c файла още на първия ред: "illegal C character in input file 0xA0"
Ето го lcdd.c (променял съм само първите 2 структури)
 |  |  |  | Код: //////////////////////////////////////////////////////////////////////////// //// LCDD.C //// //// Driver for common LCD modules //// //// //// //// lcd_init() Must be called before any other function. //// //// //// //// lcd_putc(c) Will display c on the next position of the LCD. //// //// The following have special meaning: //// //// \f Clear display //// //// \n Go to start of second line //// //// \b Move back one position //// //// //// //// lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1) //// //// //// //// lcd_getc(x,y) Returns character at position x,y on LCD //// //// //// //////////////////////////////////////////////////////////////////////////// //// (C) Copyright 1996,1997 Custom Computer Services //// //// This source code may only be used by licensed users of the CCS C //// //// compiler. This source code may only be distributed to other //// //// licensed users of the CCS C compiler. No other use, reproduction //// //// or distribution is permitted without written permission. //// //// Derivative programs created using this software in object code //// //// form are not restricted in any way. //// ////////////////////////////////////////////////////////////////////////////
// This structure is overlayed onto the data ports so that you may use // whatever ports you desire struct lcd_pin_map { int unusedA; int unusedB; int unusedC; int unusedD : 4; //lower nibble of portD is not used int data : 4; //high nibble of portD data BOOLEAN rs; //portE.0 -> rs BOOLEAN enable; //portE.1 -> enable BOOLEAN rw; //portE.2 -> rw int unusedE : 5; //rest of portE unused
} lcd;
#if defined(__PCH__) #locate lcd = 0xF80 #else #locate lcd = 5 #endif
struct lcd_tris_map {
int unusedA; int unusedB; int unusedC; int unusedD : 4; //lower nibble of portD int data : 4; //high nibble of portD int control : 3; int unusedE : 5;
} lcdtris;
#if defined(__PCH__) #locate lcdtris = 0xF92 #else #locate lcdtris = 0x85 #endif
#define set_tris_lcd(x) lcdtris.data = (x); lcdtris.control = 0;
#define lcd_type 2 #define lcd_line_two 0x40
Byte const LCD_INIT_STRING[4] = {8, 0xc, 1, 6};
#define LCD_WRITE 0 #define LCD_READ 0xFF
BYTE lcd_read_byte() {
BYTE data; set_tris_lcd(LCD_READ); lcd.rw = 1; delay_cycles(1); lcd.enable = 1; delay_cycles(1); data = lcd.data; lcd.enable = 0; set_tris_lcd(LCD_WRITE); return(data);
}
void lcd_send_nibble(BYTE n) {
lcd.data = n; delay_cycles(1); lcd.enable = 1; delay_us(2); lcd.enable = 0;
}
void lcd_send_byte(BYTE adress, BYTE n) {
lcd.rs = 0 while(bit_test(lcd_read_byte(),7)); lcd.rs = adress; delay_cycles(1); lcd.rw = 0; delay_cycles(1); lcd.enable = 0; lcd.data = n; delay_cycles(1); lcd.enable = 1; delay_us(2); lcd_enable = 0;
}
void lcd_init() {
BYTE i; set_tris_lcd(LCD_WRITE); lcd.rs = 0; lcd.rw = 0; lcd.enable = 0; delay_ms(15); for(i=1; i<=3; ++i) { lcd_send_byte(0, 0x38); delay_ms(5); } for(i=0; i<=3; ++i) lcd_send_byte(0,LCD_INIT_STRING[i]); }
void lcd_gotoxy(BYTE x, BYTE y) {
BYTE adress; if (y!=1) adress = lcd_line_two; else adress = 0; adress += x-1; lcd_send_byte(0, 0x80|adress);
}
void lcd_putc(char c) { switch(c) { case '\f' : lcd_send_byte(0, 1); delay_ms(2); break; case '\n' : lcd_gotoxy(1, 2); break; case '\b' :lcd_send_byte(0, 0x10); break; default : lcd_send_byte(1, c); break; } }
char lcd_getc(BYTE x, BYTE y) { char value;
lcd_gotoxy(x,y); lcd.rs = 1; value = lcd_read_byte(); lcd.rs = 0; return(value);
}
|  |  |  |  |
Ето и тестовата програма
Имате ли идея какво не е наред?
Пробвах с 3.190 и 3.206
_________________ Adios
Mozfet
|
| Вто Ное 30, 2004 2:25 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Ся щи кажа ве  На мене подобно нещо ми прави като напиша "#use fast_io(C)", обаче не го прави ако напиша В или А вместо С. Има някакъв бъг, ако не се лъжа е свързано с шрифта с който пишеш. Това го има и в MPLAB  Решавам си проблема, като избягвам да го пиша 
|
| Вто Ное 30, 2004 3:26 pm |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Открих проблемите. Сега мога да си пускам LCD-то на произволни крачета в 4 и 8-битов режим.
В двете програми, които съм дал горе има грешки. Сега са ОК.
_________________ Adios
Mozfet
|
| Сря Дек 01, 2004 12:03 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
A на моя проблем имаш ли някакъв отговор???
|
| Сря Дек 01, 2004 12:04 pm |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Ами глупавото съoбщение за грешка изчезна, когато върнах редовете в началото им. При копи и паст на някои редове, които са по-навътре се получава този бъг. Върнах всички до началото после пак навътре и се оправи.
Странно е.
Така, че пробвай и ти така. Няколко интервала на ляво и на дясно докато стане. Много професиоанелн продукт от CCS 
_________________ Adios
Mozfet
|
| Сря Дек 01, 2004 12:24 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Бе, да ги и*ъ....Добре че не съм плащал за CCS... 
|
| Сря Дек 01, 2004 12:26 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
това е често срещано явление при копи-пейст, при всички IDE-та с които съм имал работа. Шитовете на Борланд, например, е почти невъзможно да им копи-пейстнеш от собствениуя им хелп без да се налага да връщаш редове, да триеш от зад и т.н.
|
| Сря Дек 01, 2004 12:46 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
IAR-а даже възприема 'я' за край на файл, та винаги се налага да го пиша като 0xFF  .
|
| Сря Дек 01, 2004 1:07 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Верно е  . Само че на времето, докато го открия си застрелях един ден.
|
| Сря Дек 01, 2004 1:26 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Той го пише бе - само трябва да си знаел, че 0xFF е 'я'  .
|
| Сря Дек 01, 2004 1:37 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
някои програмисти са за публичен линч. 
|
| Сря Дек 01, 2004 1:43 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
както и някой хардуеристи от въпросните програмисти  , ама това вече въпрос на друга тема, щото на тая и е***ме мамата  .
|
| Сря Дек 01, 2004 1:54 pm |
|
|
|
Страница 1 от 1
|
[ 12 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|