![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 2 túi
Tham gia ngày: Nov 2010
Bài gửi: 38
: |
Không hiển thị được LCD, giúp mình với
Mình làm mạch hiển thị theo sơ đồ nguyên lý sau
![]() và sử dụng file lcd_lib_4bit.c đã được post ở diễn đàn Code:
#include <stddef.h> #define LCD_RS PIN_D0 #define LCD_RW PIN_D1 #define LCD_EN PIN_D2 #define LCD_D4 PIN_D4 #define LCD_D5 PIN_D5 #define LCD_D6 PIN_D6 #define LCD_D7 PIN_D7 // misc display defines- #define Line_1 0x80 #define Line_2 0xC0 #define Clear_Scr 0x01 #separate void LCD_Init ();// ham khoi tao LCD #separate void LCD_SetPosition ( unsigned int cX );//Thiet lap vi tri con tro #separate void LCD_PutChar ( unsigned int cX );// Ham viet1kitu/1chuoi len LCD #separate void LCD_PutCmd ( unsigned int cX) ;// Ham gui lenh len LCD #separate void LCD_PulseEnable ( void );// Xung kich hoat #separate void LCD_SetData ( unsigned int cX );// Dat du lieu len chan Data // prototype statements // D/n Cong #use standard_io (D) //#use standard_io (D) //khoi tao LCD********************************************** #separate void LCD_Init () { LCD_SetData ( 0x00 ); delay_ms(20); /* wait enough time after Vdd rise >> 15ms */ output_low ( LCD_RS );// che do gui lenh LCD_SetData ( 0x03 ); /* init with specific nibbles to start 4-bit mode */ LCD_PulseEnable(); LCD_PulseEnable(); LCD_PulseEnable(); LCD_SetData ( 0x02 ); /* set 4-bit interface */ LCD_PulseEnable(); /* send dual nibbles hereafter, MSN first */ LCD_PutCmd ( 0x2C ); /* function set (all lines, 5x7 characters) */ LCD_PutCmd ( 0x0C ); /* display ON, cursor off, no blink */ LCD_PutCmd ( 0x06 ); /* entry mode set, increment & scroll left */ LCD_PutCmd ( 0x01 ); /* clear display */ // Init for BarGraph } #separate void LCD_SetPosition ( unsigned int cX ) { /* this subroutine works specifically for 4-bit Port A */ LCD_SetData ( swap ( cX ) | 0x08 ); LCD_PulseEnable(); LCD_SetData ( swap ( cX ) ); LCD_PulseEnable(); } #separate void LCD_PutChar ( unsigned int cX ) { /* this subroutine works specifically for 4-bit Port A */ output_high ( LCD_RS ); LCD_PutCmd( cX ); output_low ( LCD_RS ); } #separate void LCD_PutCmd ( unsigned int cX ) { /* this subroutine works specifically for 4-bit Port A */ LCD_SetData ( swap ( cX ) ); /* send high nibble */ LCD_PulseEnable(); LCD_SetData ( swap ( cX ) ); /* send low nibble */ LCD_PulseEnable(); } #separate void LCD_PulseEnable ( void ) { output_high ( LCD_EN ); delay_us ( 3 ); // was 10 output_low ( LCD_EN ); delay_ms ( 3 ); // was 5 } #separate void LCD_SetData ( unsigned int cX ) { output_bit ( LCD_D4, cX & 0x01 ); output_bit ( LCD_D5, cX & 0x02 ); output_bit ( LCD_D6, cX & 0x04 ); output_bit ( LCD_D7, cX & 0x08 ); } Code:
#include <16F887.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=4000000) #include "lcd_lib_4bit.c" void main() { set_tris_d(0x00); LCD_init(); LCD_putchar('X'); delay_ms(100); LCD_putchar('I'); delay_ms(100); LCD_putchar('N'); delay_ms(100); LCD_putchar(' '); delay_ms(100); LCD_putchar('C'); delay_ms(100); LCD_putchar('H'); delay_ms(100); LCD_putchar('A'); delay_ms(100); LCD_putchar('O'); delay_ms(100); } thay đổi nội dung bởi: ngdnhanbk, 06-01-2012 lúc 10:38 AM. |
![]() |
![]() |
|
|