![]() |
|
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ị |
|
|
|
|
![]() |
|
|