11-01-2012, 12:58 PM
|
#7
|
Đệ tử 5 túi
Tham gia ngày: Dec 2010
Bài gửi: 101
:
|
Trích:
Nguyên văn bởi ngdnhanbk
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 );
}
chương trình hiển thị
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);
}
nhưng chỉ hiện ra cái màn hình trắng trơn, ai chỉ giúp mình sai chỗ nào. Cảm ơn
|
cách này quá thủ công .bạn cho vào mảng rồi dùng vòng lặp ghi ra một lượt cho dễ
|
|
|