PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   mọi người xem hộ cái mạch đk LCD (http://www.picvietnam.com/forum/showthread.php?t=31148)

ngosythuat 09-11-2012 10:56 AM

mọi người xem hộ cái mạch đk LCD
 
1 Attachment(s)
http://www.picvietnam.com/forum/atta...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

Trích:

Nguyên văn bởi nhiot081290 (Post 79309)
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

Trích:

Nguyên văn bởi nhiot081290 (Post 79321)
bạn khai báo thêm NOLVP nha
#fuses hs,NOWDT.....

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


Múi giờ GMT. Hiện tại là 11:47 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam