PIC Vietnam

Go Back   PIC Vietnam > Các Đề Tài > Các dự án mã nguồn mở

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Các dự án mã nguồn mở Nếu bạn không mở mã nguồn, ít nhất là một phần nào đó trong dự án của bạn, xin đừng vào đây.

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 29-09-2011, 10:46 AM   #8
binhngo
Nhập môn đệ tử
 
Tham gia ngày: Feb 2009
Bài gửi: 8
:
Question Ai kiểm tra giùm hộ tôi với....

Trích:
Nguyên văn bởi lionking View Post
mình vừa làm giao tiếp với lcd16x2 chỉ điều khiển bằng 3 dây, chia cho mọi người cùng sài

code:

#include <16F877A.h>
#fuses HS, NOWDT ,PROTECT ,NOBROWNOUT ,NOPUT
#use delay(clock=20000000)
#include <define_pic16f877a.h>

#define data74595 RD1
#define clock74595 RD0
#define latch74595 RD2


int8 buffer_data_lcd = 0;
void OutPut74595(int8 data);


void LCD_STROBE()
{
bit_set(buffer_data_lcd,2);
OutPut74595(buffer_data_lcd);

bit_clear(buffer_data_lcd,2);
OutPut74595(buffer_data_lcd);
}

/* write a byte to the LCD in 4 bit mode */
void LCD_DATA(unsigned char c)
{
buffer_data_lcd = buffer_data_lcd & 0x0F;
buffer_data_lcd = buffer_data_lcd | (c << 4);
OutPut74595(buffer_data_lcd);
}

void lcd_write(unsigned char c)
{
delay_us(40);
LCD_DATA(c>>4);
LCD_STROBE();
LCD_DATA( c );
LCD_STROBE();
}

void lcd_clear(void)
{
bit_clear(buffer_data_lcd,0);
OutPut74595(buffer_data_lcd);
lcd_write(0x1);
delay_ms(2);
}


/* write one character to the LCD */

void lcd_putchar(char c)
{
bit_set(buffer_data_lcd,0);
OutPut74595(buffer_data_lcd);
lcd_write( c );
}

void lcd_gotoxy(unsigned char row,unsigned char col)
{
bit_clear(buffer_data_lcd,0);
OutPut74595(buffer_data_lcd);
switch(row)
{
case 0 : lcd_write( 0x80 + col ) ;
break ;
case 1 : lcd_write( 0xC0 + col ) ;
break ;
case 2 : lcd_write( 0x94 + col ) ;
break ;
case 3 : lcd_write( 0xD4 + col ) ;
break ;
};

}

/* initialise the LCD - put into 4 bit mode */
void lcd_init()
{

buffer_data_lcd = 0;
OutPut74595(buffer_data_lcd);

delay_ms(15); // wait 15mSec after power applied,
LCD_DATA(0x03);
LCD_STROBE();
delay_ms(5);
LCD_STROBE();
delay_us(200);
LCD_STROBE();
delay_us(200);
LCD_DATA(2); // Four bit mode
LCD_STROBE();

lcd_write(0x28); // Set interface length
lcd_write(0x0C); // Display On, Cursor On, Cursor Blink
lcd_clear(); // Clear screen
lcd_write(0x6); // Set entry Mode
}

//------------------------------------------------
void OutPut74595(int8 data)
{
int8 i ;

for(i=0;i<8;i++)
{
if( bit_test(data,7) )
{
data74595=1 ;
}
else
{
data74595=0 ;
};
clock74595=0;
clock74595=1;

data = data<<1 ;
};
//-----------------------------
latch74595 = 1;
latch74595 = 0;
}
//-------------------------------------------------------------
void main(void)
{
TRISA=0xFF;
TRISB=0x00;
TRISC=0xFF;
TRISD=0xF0 ;

PORTB = 0x00;

lcd_init();


while( true )
{
lcd_gotoxy(0,0);
printf(lcd_putchar," Hello");
lcd_gotoxy(1,0);
printf(lcd_putchar," Hoang Cute");

};
}
Tôi đã chuyển mã nguồn này sang htpic, tuy nhiên báo lỗi không chạy, bac nào tìm hộ tôi xem lỗi ở đâu với


#include <htc.h>
#include "stdio.h"
__CONFIG(HS & PWRTEN & BOREN & LVPDIS & WDTDIS );
#define _XTAL_FREQ 20000000

#define data74595 RD1
#define clock74595 RD0
#define latch74595 RD2
#define uchar unsigned char
#define bit_set(var,bitno) ((var) |= 1 << (bitno))
#define bit_clear(var,bitno) ((var) &= ~(1 << (bitno)))
#define bit_test(data,bitno) ((data>>bitno)&0x01)

uchar buffer_data_lcd = 0;
void OutPut74595(unsigned char data);


void LCD_STROBE()
{
bit_set(buffer_data_lcd,2);
OutPut74595(buffer_data_lcd);

bit_clear(buffer_data_lcd,2);
OutPut74595(buffer_data_lcd);
}

/* write a byte to the LCD in 4 bit mode */
void LCD_DATA(unsigned char c)
{
buffer_data_lcd = buffer_data_lcd & 0x0F;
buffer_data_lcd = buffer_data_lcd | (c << 4);
OutPut74595(buffer_data_lcd);
}

void lcd_write(unsigned char c)
{
__delay_us(40);
LCD_DATA(c>>4);
LCD_STROBE();
LCD_DATA( c );
LCD_STROBE();
}

void lcd_clear(void)
{
bit_clear(buffer_data_lcd,0);
OutPut74595(buffer_data_lcd);
lcd_write(0x1);
__delay_ms(2);
}


/* write one character to the LCD */

void lcd_putchar(char c)
{
bit_set(buffer_data_lcd,0);
OutPut74595(buffer_data_lcd);
lcd_write( c );
}

void lcd_gotoxy(unsigned char row,unsigned char col)
{
bit_clear(buffer_data_lcd,0);
OutPut74595(buffer_data_lcd);
switch(row)
{
case 0 : lcd_write( 0x80 + col ) ;
break ;
case 1 : lcd_write( 0xC0 + col ) ;
break ;
case 2 : lcd_write( 0x94 + col ) ;
break ;
case 3 : lcd_write( 0xD4 + col ) ;
break ;
};

}

/* initialise the LCD - put into 4 bit mode */
void lcd_init()
{

buffer_data_lcd = 0;
OutPut74595(buffer_data_lcd);

__delay_ms(15); // wait 15mSec after power applied,
LCD_DATA(0x03);
LCD_STROBE();
__delay_ms(5);
LCD_STROBE();
__delay_us(200);
LCD_STROBE();
__delay_us(200);
LCD_DATA(2); // Four bit mode
LCD_STROBE();

lcd_write(0x28); // Set interface length
lcd_write(0x0C); // Display On, Cursor On, Cursor Blink
lcd_clear(); // Clear screen
lcd_write(0x6); // Set entry Mode
}

//------------------------------------------------
void OutPut74595(uchar data)
{
uchar i ;

for(i=0;i<8;i++)
{
if( bit_test(data,7) )
{
data74595=1 ;

}
else
{
data74595=0 ;
};
clock74595=0;
clock74595=1;

data = data<<1 ;
};
//-----------------------------
latch74595=1 ;
latch74595=0 ;
}
//-------------------------------------------------------------
void main(void)
{
TRISA=0xFF;
TRISB=0x00;
TRISC=0xFF;
TRISD=0xF0 ;
PORTB=0x00;

lcd_init();

lcd_gotoxy(1,0);
printf(" Hoang Cute");

while( 1 )
{

};
}
binhngo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam