Ðăng Nhập

View Full Version : mọi người xem hộ cái mạch đk LCD


ngosythuat
09-11-2012, 10:56 AM
http://www.picvietnam.com/forum/attachment.php?attachmentid=5443&stc=1&d=1352429560
chương trình
#include <16f887.h>
#device PIC16F877*=16
#fuses hs,NOWDT
#use delay(clock=20000000)
#INCLUDE<LCD4bit.C>
#use fast_io(C)
int16 a=0;

VOID MAIN()
{
set_TRIS_C(0b10000000);
enable_interrupts(int_EXT);
enable_interrupts(global);
LCD_INIT() ;
//......in gioi thieu............
LCD_GOTOXY(1,1) ;
PRINTF(LCD_PUTC,"\f abcd") ;
LCD_GOTOXY(1,2) ;
LCD_PUTC("efgh") ;
delay_ms(2000);
LCD_GOTOXY(1,1) ;

}

file driver lcd 4bit
#define rs PIN_B2
#define enabled PIN_B3
#define DB4 PIN_B4
#define DB5 PIN_B5
#define DB6 PIN_B6
#define DB7 PIN_B7
#byte PORTC =0x07
char const lcd_type=2;
char const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
//=======================================
//=======================================
void make_out_data(char buffer_data)
{
output_bit(DB4,bit_test(buffer_data,0));
output_bit(DB5,bit_test(buffer_data,1));
output_bit(DB6,bit_test(buffer_data,2));
output_bit(DB7,bit_test(buffer_data,3));
}
//===================================
//===================================
void lcd_send_nibble(char buffer_nibble)
{ make_out_data(buffer_nibble);
delay_us(10);
output_high(enabled);
delay_us(10);
output_low(enabled);
}
//====================================
//====================================
void lcd_send_byte( char address, char n )
{
output_low(rs); //rs= = 0;
delay_ms(1);
output_bit(rs,address);//lcd.rs = address;
delay_us(20);
delay_us(20);
output_low(enabled);//lcd.enable = 0;
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
//===============================================
//===============================================
void lcd_init()
{ char i;
//set_tris_lcd(LCD_WRITE);
output_low(rs); //lcd.rs = 0;
//output_low(rw); //lcd.rw = 0;
output_low(enabled); //lcd.enable = 0;
delay_ms(200);
for(i=1;i<=3;++i)
{
lcd_send_nibble(3);
delay_ms(10);
}
lcd_send_nibble(2);
for(i=0;i<=3;++i)
lcd_send_byte(0,LCD_INIT_STRING[i]);
}
//================================================
//================================================
void lcd_gotoxy( char x, char y)
{char address;
switch(y) {
case 1 : address=0x80;break;
case 2 : address=0xc0;break;
case 3 : address=0x94;break;
case 4 : address=0xd4;break;
}
address=address+(x-1);
lcd_send_byte(0,0x80|address);
}
//=================================================
//=================================================
void lcd_putc( char c) {
switch (c) {
case '\f' : lcd_send_byte(0,1);
delay_ms(2); break;
case '\n' : lcd_gotoxy(1,2); break;
case '\b' : lcd_send_byte(0,0x10); break;
default : lcd_send_byte(1,c); break;
}
}
//================================================== ==
void LCD_Command(int cm);
void LCD_ShiftLeft(void);
void LCD_ShiftRight(void);
void LCD_MoveRight(char p);
void LCD_MoveLeft(char p);
void LCD_String(char*s,int dly);

void LCD_Command(int cm){
lcd_send_byte(0,cm);
}

void LCD_ShiftLeft(void){
lcd_send_byte(0,0x18);
}
void LCD_ShiftRight(void){
lcd_send_byte(0,0x1C);
}
void LCD_MoveRight(char p){
char i;
for(i=0;i<p;i++){
LCD_ShiftRight();
delay_ms(100);
}
}
void LCD_MoveLeft(char p){
char i;
for(i=0;i<p;i++){
LCD_ShiftLeft();
delay_ms(100);
}
}
void strcpy(char*s1,char*s2) {
while(*s1++ == *s2++);
}
void LCD_String(char*s, int dly) {
while(*s!=0) {
lcd_putc(*s++);
delay_ms(dly);
}
}
void lcd_put_int(int16 num)
{
int16 temp = num;
int8 i = 0, c[20];

if (temp != 0)
{
while(temp)
{
c[i++] = temp%10;
temp /= 10;
}
while(i)
lcd_putc(c[--i] + '0');
}
else lcd_putc('0');
}


khi mông phỏng thì hiển thị được, nhưng làm mạch thật thì không chạy được

nhiot081290
11-11-2012, 10:38 AM
có thể xung triger bạn delay(10us) hơi it. bạn thử tăng delay lên xem (1-5 ms) là được
note: bạn pót code lên nhớ chỉnh lại cấu trúc cho dễ nha, để người đọc có thể giúp bạn nhanh hơn,
Thân.

ngosythuat
11-11-2012, 11:15 AM
có thể xung triger bạn delay(10us) hơi it. bạn thử tăng delay lên xem (1-5 ms) là được
note: bạn pót code lên nhớ chỉnh lại cấu trúc cho dễ nha, để người đọc có thể giúp bạn nhanh hơn,
Thân.

cám ơn bạn. t nạp code lại xem tn

ngosythuat
11-11-2012, 11:45 AM
vẫn không được bạn à. bạn xem hộ tớ cái mạch có sai chỗ nào ko.
t mô phỏng thì chạy được

nhiot081290
11-11-2012, 11:54 AM
bạn khai báo thêm NOLVP nha
#fuses hs,NOWDT.....

ngosythuat
11-11-2012, 05:44 PM
bạn khai báo thêm NOLVP nha
#fuses hs,NOWDT.....

cám ơn bác. đã chạy đc rồi