Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
// Подключение индикатора:
// PB1 - RS (A)
// PB2 - RW
// PB3 - EN
// PB4 - D4
// PB5 - D5
// PB6 - D6
// PB7 - D7#define lcd_port (PORTB)
#define lcd_ddr (DDRB)
#define lcd_pin (PINB)
#define lcd_rs 1
#define lcd_rw 2
#define lcd_en 3void lcd_delay(int t) {
while(t--);
}
// Выдача импульса EN
//
void lcd_pulse(void) {
lcd_port |= (1 << lcd_en);
lcd_delay(8);
lcd_port &= ~(1 << lcd_en);
}
// Ожидание готовности
//
void lcd_wait(void) {
unsigned char st;
lcd_ddr = 0x0f; lcd_port = (1 << lcd_rw); // Чтение команд
while(1) {
lcd_port |= (1 << lcd_en);
lcd_delay();
st = lcd_pin;
lcd_port &= ~(1 << lcd_en);
lcd_pulse();
if ((st&0x80)==0) break;
}
lcd_ddr = 0xff; lcd_port = 0;
}
// Запись команд в индикатор
//
void lcd_wrc(unsigned char d) {
lcd_wait();
lcd_port = (d&0xf0); lcd_pulse();
lcd_port = (d<<4)&0xf0; lcd_pulse();
}
// Запись данных в индикатор
//
void lcd_wr(unsigned char d) {
lcd_wait();
lcd_port = (d&0xf0)|(1 << lcd_rs); lcd_pulse();
lcd_port = ((d<<4)&0xf0)|(1 << lcd_rs); lcd_pulse();
}
// Инициализация индикатора
//
void lcd_init(void) {
lcd_wrc(0x28); lcd_wrc(0x28); lcd_wrc(0x28);
lcd_wrc(0x0c); lcd_wrc(0x06); lcd_wrc(0x01);
}