![]() |
|
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. |
![]() |
![]() |
![]() |
#2 |
Đệ tử 2 túi
Tham gia ngày: Nov 2010
Bài gửi: 38
: |
![]() Mình viết chương trình hiển thị dòng WELCOME TO VIETNAM bằng file lcd.c có sẵn trong ccs nhưng không được. Mọi người xem giúp mình sai chỗ nào Code:
#include <16F877A.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=4000000) #include <lcd.c> #define LCD_DB4 PIN_D4 #define LCD_DB5 PIN_D5 #define LCD_DB6 PIN_D6 #define LCD_DB7 PIN_D7 #define LCD_RS PIN_D0 #define LCD_RW PIN_D1 #define LCD_E PIN_D2 void main() { lcd_init(); lcd_putc("Welcome to VIETNAM"); } thay đổi nội dung bởi: ngdnhanbk, 08-01-2012 lúc 01:20 AM. |
![]() |
![]() |
![]() |
#3 |
Đệ tử 4 túi
|
Hiện tượng là như thế nào bạn nói rõ hơn được không! coi code ko thì cũng khó biết
__________________
My blog: http://autumnneverreturn.blogspot.com/ Đối thủ khó chiến thắng nhất là bản thân !!! |
![]() |
![]() |
![]() |
#4 |
Đệ tử 2 túi
Tham gia ngày: Nov 2010
Bài gửi: 38
: |
Mình cần code để hiển thị dòng kí tự lên LCD như mô phỏng trong proteus như hình trên.
DÙng lcd.c có sẵn trog CCS |
![]() |
![]() |
![]() |
#5 |
Đệ tử 2 túi
Tham gia ngày: Nov 2010
Bài gửi: 38
: |
Mình đã làm được lcd.c như chỉ khi đổi nối thành
E RD0 RS RD1 RW RD2 còn trường hợp nối RS RD0 RW RD1 E RD2 thì không được mặc dù mình đã define lại chân như sau trong chương trình #define LCD_RS PIN_D0 #define LCD_RW PIN_D1 #define LCD_E PIN_D2 |
![]() |
![]() |
![]() |
#6 |
Nhập môn đệ tử
Tham gia ngày: Aug 2009
Bài gửi: 5
: |
bạn viết 1 đoạn code đơn giản thui tets thử theo cách đố sem
|
![]() |
![]() |
![]() |
#7 | |
Đệ tử 5 túi
Tham gia ngày: Dec 2010
Bài gửi: 101
: |
Trích:
|
|
![]() |
![]() |
![]() |
#8 |
Đệ tử 2 túi
Tham gia ngày: Aug 2010
Bài gửi: 27
: |
bạn đưa code và mạch mô phỏng proteus lên diễn đàn đi...Mình đoán là do bạn chọn tần số thạch anh không chính xác...chuẩn là 20Mhz
|
![]() |
![]() |
![]() |
#9 |
Đệ tử 2 túi
Tham gia ngày: Nov 2010
Bài gửi: 38
: |
Tức là trong mô phỏng Proteus phải chọn tần số thạch anh của chip là 20MHz mới được hả
__________________
Email:nguyennhan612@gmail.com |
![]() |
![]() |
![]() |
#10 | |
Đệ tử 6 túi
Tham gia ngày: Feb 2009
Bài gửi: 127
: |
Trích:
code này thiếu lệnh: lcd_gotoxy(0,0); // lệnh này đặt trước LCD_putchar('X'); lệnh này có tác dụng là thiết lập vị trí hiển thị |
|
![]() |
![]() |
![]() |
|
|