giao tiếp lcd16x2 bằng 3 dây
1 Attachment(s)
mình vừa làm giao tiếp với lcd16x2 chỉ điều khiển bằng 3 dây, chia cho mọi người cùng sài
code: #include <16F877A.h> #fuses HS, NOWDT ,PROTECT ,NOBROWNOUT ,NOPUT #use delay(clock=20000000) #include <define_pic16f877a.h> #define data74595 RD1 #define clock74595 RD0 #define latch74595 RD2 int8 buffer_data_lcd = 0; void OutPut74595(int8 data); void LCD_STROBE() { bit_set(buffer_data_lcd,2); OutPut74595(buffer_data_lcd); bit_clear(buffer_data_lcd,2); OutPut74595(buffer_data_lcd); } /* write a byte to the LCD in 4 bit mode */ void LCD_DATA(unsigned char c) { buffer_data_lcd = buffer_data_lcd & 0x0F; buffer_data_lcd = buffer_data_lcd | (c << 4); OutPut74595(buffer_data_lcd); } void lcd_write(unsigned char c) { delay_us(40); LCD_DATA(c>>4); LCD_STROBE(); LCD_DATA( c ); LCD_STROBE(); } void lcd_clear(void) { bit_clear(buffer_data_lcd,0); OutPut74595(buffer_data_lcd); lcd_write(0x1); delay_ms(2); } /* write one character to the LCD */ void lcd_putchar(char c) { bit_set(buffer_data_lcd,0); OutPut74595(buffer_data_lcd); lcd_write( c ); } void lcd_gotoxy(unsigned char row,unsigned char col) { bit_clear(buffer_data_lcd,0); OutPut74595(buffer_data_lcd); switch(row) { case 0 : lcd_write( 0x80 + col ) ; break ; case 1 : lcd_write( 0xC0 + col ) ; break ; case 2 : lcd_write( 0x94 + col ) ; break ; case 3 : lcd_write( 0xD4 + col ) ; break ; }; } /* initialise the LCD - put into 4 bit mode */ void lcd_init() { buffer_data_lcd = 0; OutPut74595(buffer_data_lcd); delay_ms(15); // wait 15mSec after power applied, LCD_DATA(0x03); LCD_STROBE(); delay_ms(5); LCD_STROBE(); delay_us(200); LCD_STROBE(); delay_us(200); LCD_DATA(2); // Four bit mode LCD_STROBE(); lcd_write(0x28); // Set interface length lcd_write(0x0C); // Display On, Cursor On, Cursor Blink lcd_clear(); // Clear screen lcd_write(0x6); // Set entry Mode } //------------------------------------------------ void OutPut74595(int8 data) { int8 i ; for(i=0;i<8;i++) { if( bit_test(data,7) ) { data74595=1 ; } else { data74595=0 ; }; clock74595=0; clock74595=1; data = data<<1 ; }; //----------------------------- latch74595 = 1; latch74595 = 0; } //------------------------------------------------------------- void main(void) { TRISA=0xFF; TRISB=0x00; TRISC=0xFF; TRISD=0xF0 ; PORTB = 0x00; lcd_init(); while( true ) { lcd_gotoxy(0,0); printf(lcd_putchar," Hello"); lcd_gotoxy(1,0); printf(lcd_putchar," Hoang Cute"); }; } |
mình định thêm 1 con IC số nữa để bỏ bớt đi 1 dây giao tiếp nữa, khi nào thành công up tiếp
|
Trích:
còn đọc dữ liệu từ LCD về VDK thì không được. |
1 Attachment(s)
sơ đồ giao tiếp lcd chỉ có 2 dây đây . Con IC thêm vào là 74HC164
|
Mình cần LCD hiển thị chữ quang báo nhưng viết mãi không được. Có ai giúp mình với !!!
|
Trích:
|
Trích:
|
Ai kiểm tra giùm hộ tôi với....
Trích:
#include <htc.h> #include "stdio.h" __CONFIG(HS & PWRTEN & BOREN & LVPDIS & WDTDIS ); #define _XTAL_FREQ 20000000 #define data74595 RD1 #define clock74595 RD0 #define latch74595 RD2 #define uchar unsigned char #define bit_set(var,bitno) ((var) |= 1 << (bitno)) #define bit_clear(var,bitno) ((var) &= ~(1 << (bitno))) #define bit_test(data,bitno) ((data>>bitno)&0x01) uchar buffer_data_lcd = 0; void OutPut74595(unsigned char data); void LCD_STROBE() { bit_set(buffer_data_lcd,2); OutPut74595(buffer_data_lcd); bit_clear(buffer_data_lcd,2); OutPut74595(buffer_data_lcd); } /* write a byte to the LCD in 4 bit mode */ void LCD_DATA(unsigned char c) { buffer_data_lcd = buffer_data_lcd & 0x0F; buffer_data_lcd = buffer_data_lcd | (c << 4); OutPut74595(buffer_data_lcd); } void lcd_write(unsigned char c) { __delay_us(40); LCD_DATA(c>>4); LCD_STROBE(); LCD_DATA( c ); LCD_STROBE(); } void lcd_clear(void) { bit_clear(buffer_data_lcd,0); OutPut74595(buffer_data_lcd); lcd_write(0x1); __delay_ms(2); } /* write one character to the LCD */ void lcd_putchar(char c) { bit_set(buffer_data_lcd,0); OutPut74595(buffer_data_lcd); lcd_write( c ); } void lcd_gotoxy(unsigned char row,unsigned char col) { bit_clear(buffer_data_lcd,0); OutPut74595(buffer_data_lcd); switch(row) { case 0 : lcd_write( 0x80 + col ) ; break ; case 1 : lcd_write( 0xC0 + col ) ; break ; case 2 : lcd_write( 0x94 + col ) ; break ; case 3 : lcd_write( 0xD4 + col ) ; break ; }; } /* initialise the LCD - put into 4 bit mode */ void lcd_init() { buffer_data_lcd = 0; OutPut74595(buffer_data_lcd); __delay_ms(15); // wait 15mSec after power applied, LCD_DATA(0x03); LCD_STROBE(); __delay_ms(5); LCD_STROBE(); __delay_us(200); LCD_STROBE(); __delay_us(200); LCD_DATA(2); // Four bit mode LCD_STROBE(); lcd_write(0x28); // Set interface length lcd_write(0x0C); // Display On, Cursor On, Cursor Blink lcd_clear(); // Clear screen lcd_write(0x6); // Set entry Mode } //------------------------------------------------ void OutPut74595(uchar data) { uchar i ; for(i=0;i<8;i++) { if( bit_test(data,7) ) { data74595=1 ; } else { data74595=0 ; }; clock74595=0; clock74595=1; data = data<<1 ; }; //----------------------------- latch74595=1 ; latch74595=0 ; } //------------------------------------------------------------- void main(void) { TRISA=0xFF; TRISB=0x00; TRISC=0xFF; TRISD=0xF0 ; PORTB=0x00; lcd_init(); lcd_gotoxy(1,0); printf(" Hoang Cute"); while( 1 ) { }; } |
Múi giờ GMT. Hiện tại là 10:29 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam