реклама на сайте
подробности

 
 
> Подключение HD44780 к МК по 3 проводной схеме.
TamTam
сообщение Jul 4 2006, 17:38
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254



Товарищи если кто делал поделитесь кодом на си, катострафически нехватает ног у мк.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
TamTam
сообщение Jul 5 2006, 01:00
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254



Разберающиеся в асм и си проверте плиз

Код
//                                C


#define LCDE     =  0;
#define LCDDATA  =  1;
#define LCDCLK   =  2;

void init_lcd_2wire();
void send_lcd_reg_2wire(unsigned char send_data);

void init_lcd_2wire()

{
PORTB.0 = 0;              
PORTB.1 = 0;
PORTB.2 = 0;
delay_ms(400);              // для правильного функционирования
delay_ms(15);
send_lcd_reg_2wire(0x30);   //
delay_ms(5);
send_lcd_reg_2wire(0x30);   //
delay_us(255);
send_lcd_reg_2wire(0x30);   //
delay_us(255);
send_lcd_reg_2wire(0x38);   // 8 проводной интерфейс, 2 строки, размер символа 5Х7.
delay_us(255);
send_lcd_reg_2wire(0x08);   // дисплей выкл, курсор выкл, мерцание выкл.                    
delay_us(255);
send_lcd_reg_2wire(0x01);   // очистка дисплея
delay_us(255);
send_lcd_reg_2wire(0x06);   // Increment cursor to the right when writing, don't shift screen
delay_us(255);
send_lcd_reg_2wire(0x0C);   // дисплей вкл, курсор выкл, мерцание выкл.                    
delay_us(255);
}

void send_lcd_reg_2wire(unsigned char send_data)
{
unsigned int i;

PORTB.1 = 0;
PORTB.2 = 0;
PORTB.0 = 1;              
for (i=0; i<8; i++)
   {
      if ((send_data & 0x08) != 0)
         PORTB.1 = 0;
      else
         PORTB.1 = 1;
      PORTB.2 = 1;
      PORTB.2 = 0;
      send_data = send_data << 1;
   }  
PORTB.1 = 0;  
PORTB.0 = 1;
PORTB.0 = 0;
}


Код
//                                     ASM


;**********************************************
;* Setup                                      *
;* Initialize the timer, LCD port and LCD     *
;**********************************************
Setup:              

;** Timer setup **
        ldi    AReg,TCK64
        sts    ClkDiv,AReg
        ldi    AReg,TSTOP    ;Timer 0 off (just in case)
        out    TCCR0,AReg    ;Stop timer
        ldi    AReg,0b00000010;Enable Timer 0 interrupt
        out    TIMSK,AReg
        sei                  ;enable interrupts

;** LCD port setup and HD44780 LCD setup **
        sbi    DDRB,LCDE     ;DDRB bit 5 = 1 = output
        sbi    DDRB,LCDDat;DDRB bit 6 = 1 = output
        sbi    DDRB,LCDClk;DDRB bit 7 = 1 = output
        cbi    PORTB,LCDE    ;set E low
        cbi    PORTB,LCDDat  ;set Data bit low
        cbi    PORTB,LCDClk  ;set Clk low
        
        ldi    BReg,TCK1024  ;switch to a 1024 clock divisor
        sts    ClkDiv,BReg
        ldi    DelayVal,d15ms;15ms delay
        rcall  Delay

        ldi    AReg,$30
        rcall  LCDCmd

        ldi    DelayVal,d4x1ms;4.1ms countdown
        rcall  Delay

        ldi    AReg,$30
        rcall  LCDCmd

        ldi    BReg,TCK64    ;switch to a 64 clock divisor
        sts    ClkDiv,BReg

        ldi    DelayVal,d100us
        rcall  Delay

        ldi    AReg,$30
        rcall  LCDCmd


        ldi    BReg,TCK1024  ;switch to a 1024 clock divisor
        sts    ClkDiv,BReg

        ldi    DelayVal,d4x1ms
        rcall  Delay

        ldi    AReg,$38      ;RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
        rcall  LCDCmd        ;0   0   0   1   1   1   0   x   x
                             ;8-bit operation, 1/16 duty cycle
                             ;5x8 dot matrix

        ldi    BReg,TCK64    ;switch to a 64 clock divisor
        sts    ClkDiv,BReg
        ldi    DelayVal,d40us
        rcall  Delay

        ldi    AReg,$08      ;RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
        rcall  LCDCmd        ;0   0   0   0   0   1   0   0   0
                             ;Display off, cursor off, blink off
        ldi    DelayVal,d40us
        rcall  Delay

        ldi    AReg,$01      ;RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
        rcall  LCDcmd        ;0   0   0   0   0   0   0   0   1
                             ;Clear screen, cursor home
        ldi    DelayVal,d1ms
        rcall  Delay
        rcall  Delay

        ldi    AReg,$06      ;RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
        rcall  LCDCmd        ;0   0   0   0   0   0   1   1   0
                             ;Increment cursor to the right when writing, don't shift screen
        ldi    DelayVal,d40us
        rcall  Delay

        ldi    AReg,$0c      ;RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
        rcall  LCDCmd        ;0   0   0   0   0   0   1   1   0
                             ;Display on, cursor off, blink off
        ldi    DelayVal,d40us
        rcall  Delay

        ret
            
;**********************************************
;* Write byte to LCD bus                      *
;**********************************************

;**********************************************
;* PutByte clock byte into 74hc164.           *
;* Data is in AReg                            *
;* BReg is used as acounter                   *
;**********************************************
PutByte:
        ldi    BReg,8        ;bit counter
ShiftB:
        cbi    PORTB,LCDDat  ;set LCD Data bit to 0
        lsl    AReg          ;shift bits in AReg into carry
        brcc   CLKBit        ;if zero, clock it out
        sbi    PORTB,LCDDat  ;if 1, set LCD Data bit to 1
CLKBit:
        sbi    PORTB,LCDClk  ;bit clocks on rising edge
        cbi    PORTB,LCDClk  ;bring clock back to 0
NextB:
        dec    BReg          ;shift out 8 bits
        brne   ShiftB
        ret

;**********************************************
;* LCDCmd - Send a command to the LCD         *
;* data in AReg                               *
;**********************************************
LCDCmd:
        rcall  PutByte
        cbi    PORTB,LCDDat  ;set RS low
        sbi    PORTB,LCDE    ;set E High
        cbi    PORTB,LCDE    ;set E low
        ret

;**********************************************
;* LCDChr - Display a character on the LCD    *
;* data in AReg                               *
;**********************************************
LCDChr:
        rcall  PutByte
        sbi    PORTB,LCDDat  ;set RS High
        sbi    PORTB,LCDE    ;set E High
        cbi    PORTB,LCDE    ;set E low
        ret
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- TamTam   Подключение HD44780 к МК по 3 проводной схеме.   Jul 4 2006, 17:38
- - Nanobyte   Ну так возьмите код на ASM и перепишите его на C. ...   Jul 4 2006, 17:45
- - TamTam   Цитата(Nanobyte @ Jul 4 2006, 21:45) Ну т...   Jul 4 2006, 17:47
- - Nanobyte   Может, все-таки Вам попробовать ASM ? Хороший пово...   Jul 4 2006, 18:00
- - Nanobyte   Кстати, на нашем форуме эта тема уже обсуждалась: ...   Jul 4 2006, 20:27
- - TamTam   Только сейчас я начал понемать, когда посмотрел на...   Jul 5 2006, 02:16
|- - otrog   Цитата(TamTam @ Jul 5 2006, 06:16) Только...   Jul 5 2006, 06:29
- - ILYCHOFF   Мне кажется что сделать можно легко на 74HC595. Во...   Jul 5 2006, 06:28
- - vet   да, с Two-Wire (I2C) эта схема ничего общего не им...   Jul 5 2006, 06:30
- - otrog   но ведь 2wire(Two-Wire) это не обязательно I2C.   Jul 5 2006, 06:43
- - TamTam   Блин ну помогите плиз, почемуто не работает, вроде...   Jul 6 2006, 01:33
- - TamTam   И может это все былобы не так сложно еслибы не был...   Jul 6 2006, 02:40
- - TamTam   Как вывести строку пробовал так Кодvoid lcd_puts...   Jul 6 2006, 04:48
- - otrog   Я вывожу так:Кодvoid OutStrRam(unsigned char *...   Jul 6 2006, 05:15
- - TamTam   Тема закрыта. Проэкт с исходниками и моделью в Pro...   Jul 6 2006, 07:04


Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 17:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01421 секунд с 7
ELECTRONIX ©2004-2016