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)
-   -   giúp mình về LCD va PIC 16f877 (http://www.picvietnam.com/forum/showthread.php?t=8154)

stupid11 01-04-2011 12:26 AM

gui lambaotrung

Mình gửi vào mail rồi đấy...

khienpzo 01-04-2011 07:39 PM

Trích:

Nguyên văn bởi stupid11 (Post 43345)
gửi khienpzo

Mình gửi vào mail rồi đấy

Anh stupid11 ah đó vẫn là LCD 8bit port B mà ........ tại phần cứng em bỏ 4 bit mất tiêu ah . không muốn test phải làm lại phần cứng ....................

tranvanhung88 02-04-2011 02:13 AM

e có một bài tập ntn, e đang làm một đề là truyền một dòng chữ từ 1 con chíp sang một con khác (16f77a) và hiển thị trên LCD ,e chua biết xây dựng chương trình như thế nào, xin các a chi cho,nếu đươc xin qua email ahungnd@gmail.com

hieu89tx 02-04-2011 06:50 PM

chưa ai làm đề tài này ah, ai bt giúp mình với nhe
liên hẹ voi mình qua mail : hieu89tx@gmail.com

honque104 05-04-2011 04:36 PM

Chào mọi người, mình cũng đang có 1 vấn đề về LCD mà "loay hoay" lâu rùi vẫn chưa giải quyết đc mong mọi người giúp đỡ cho.
Mình đang dùng 1 bàn phím để nhập dữ liệu vào (ví dụ số 123) sau khi nhập vào thì dùng Pic để nhận biết, sau đó xuất lên LCD16x2 (hiện thị lên LCD mã NHỊ PHÂN). Mình tìm hiểu mãi mà vẫn chưa xuất lên LCD dc,mong mọi người chỉ giao cho
Thank mọi người trước.

docgiaclong 05-04-2011 09:49 PM

setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);

nếu em không muốn dùng 3 lênh trên thì em phải làm thế nào hả các anh

caovanhuong 06-04-2011 09:29 PM

Trích:

Nguyên văn bởi docgiaclong (Post 43615)
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);

nếu em không muốn dùng 3 lênh trên thì em phải làm thế nào hả các anh

buộc phải có 2 lệnh này bạn à.

docgiaclong 07-04-2011 01:51 PM

mình tìm ra rồi ah
Thực ra không cần dùng 3 lệnh ấy vẫn làm được
bằng cách sau

#LOCATE ADCON0= 1FH
#LOCATE ADCON1= 9FH
VOID MAIN()
{ ADCON0=0XC5;
ADCON1=0X40;

trinh hoai vinh 22-04-2011 11:20 PM

em can ma code de viet chuong trinh dem san pham dung bien hong ngoai va pic 16f:877a ai co giup em nha:vinh913@yahoo.com

tanbka 22-04-2011 11:40 PM

Trích:

Nguyên văn bởi trinh hoai vinh (Post 44243)
em can ma code de viet chuong trinh dem san pham dung bien hong ngoai va pic 16f:877a ai co giup em nha:vinh913@yahoo.com

Bạn còn đang chưa làm được chỗ nào, chỗ nào gặp khó khăn hỏi thì mọi người mới giúp được chư, bạn hỏi thế này thì thuê anh em làm trọn gói cho xong.

alycuong 12-06-2011 07:47 PM

Trong thư viện lcd.c có sẵn của CCS thì có các hàm bên dưới, e chỉ biết công dụng của 1 số, a nào biết chú thích giúp e các cái còn lại với.
Code:

void lcd_send_byte(BYTE address, BYTE n)        ??? cai nay la gi ah?
void lcd_send_nibble(BYTE n)                ??? cai nay la gi ah?
void lcd_init(void)                          //Khoi tao LCD
void lcd_gotoxy(BYTE x, BYTE y)              // Di den vi tri cot , hang
void lcd_putc(char c)                        // Gui ki tu len LCD
char lcd_getc(BYTE x, BYTE y)              // Nhan ki tu tu LCD

Cho e hỏi là với 1 thư viện khác thì có hàm void LCD_PutCmd ( unsigned int cX )

Ví dụ muốn nhấp nháy con trỏ thì viết : LCD_PutCmd(0x0f)

Nhưng với thư viện lcd.c

void lcd_send_byte(BYTE address, BYTE n)
void lcd_send_nibble(BYTE n)
void lcd_init(void)
void lcd_gotoxy(BYTE x, BYTE y)
void lcd_putc(char c)
char lcd_getc(BYTE x, BYTE y)


Với các lệnh trên e k biết làm sao để nhấp nháy con trỏ hết. A nào bít hướng dẫn gúp e. E cảm ơn nhiều lắm!

pdkxlily 05-07-2011 10:03 AM

Trích:

Nguyên văn bởi stupid11 (Post 43267)
Bạn muốn giúp vấn đề gì.

biên dịch nó báo thế này là sao bạn "*error 18 "123(mani).c" Line 0(0,1): file can not be opend "
Trích:

{
docADC(); // adc 10bit
x=read_ADC(); // cái này là đọc giá trị adc đúg ko à ??
x=x/2.049;
y=x;
hienthi(x);
}
cái chia 2.049 là giải thix kiểu này đúng ko các bác
adc 10bit 0-1023 ,mà V_ref = VCC=5V nên ADC_value=1 tương ứng 5/1024=4.887mV
Trong khi đó LM335
cho ra điện áp là 10mV/1K nên để giá trị ADC thay đổi 1 đơn vị thì nhiệt độ phải thay đổi là 2K => x= ADC_value*(4.887/10)

pdkxlily 05-07-2011 10:39 AM

Trích:

Nguyên văn bởi stupid11 (Post 43086)

Trong LCD có ký hiệu "oC" bạn chỉ việc

portb=0b00101110;xuat(); //bạn tham khảo thêm bảng mã LCD//

Chúc bạn thành công.

Trích:

#include <16F877A.h>
#include <def_877a.h>
#device *=16 adc=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd_lib_4bit.c>


void convert_bcd(int8 x);
int8 t1,t2;
void main()
{



trisa = 0xFF;
trisb = 0x01;
trisd = 0x00;

LCD_init();
Printf(LCD_putchar,"Kenh 0,1:");
// Khoi tao cho ngat ngoai
enable_interrupts (INT_EXT);
ext_int_edge(H_TO_L);
enable_interrupts (GLOBAL);
// Khoi tao che do cho bo ADC
setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_INTERNAL);
delay_us(10);
setup_adc_ports(AN0);



while(true)
{
set_ADC_channel(0);
t1 =(float)read_adc();
t1=t1/0.5102;
// convert_bcd((int8) t1);
LCD_putcmd(0xC0);
printf(LCD_putchar,"T0=%u",t1);
printf(LCD_putchar,"C");

set_ADC_channel(1);
t2=(float)read_adc();
t2=t2/0.5102;
LCD_putcmd(0xC7);
printf(LCD_putchar,"T1=%u",t2);
printf(LCD_putchar,"C");


}
}
mình làm lcd_4bit thì khúc xuất ra chữ độC ký tự đặc biệt thì mình làm sao bạn .thêm giúp mình với

danghien719 05-07-2011 11:37 AM

kí tự đặc biệt là sao ?
đoạn nào ?
Như thế này là sao : printf(LCD_putchar,"T0=%u",t1);
hịc, tôi ko hiểu đc đoạn code này của bạn.

pdkxlily 05-07-2011 09:34 PM

Trích:

Nguyên văn bởi danghien719 (Post 46625)
kí tự đặc biệt là sao ?
đoạn nào ?
Như thế này là sao : printf(LCD_putchar,"T0=%u",t1);
hịc, tôi ko hiểu đc đoạn code này của bạn.

của mình là đo nhiệt độ 2 kênh bạn ơi t1 là kênh 0 t2 là kênh 1
printf(LCD_putchar,"C");
thay vì có chữ C thì mình mún thêm ký tự độ cho chuẩn thôi mà

tdm 06-07-2011 10:14 AM

1 Attachment(s)
Trích:

Nguyên văn bởi pdkxlily (Post 46641)
của mình là đo nhiệt độ 2 kênh bạn ơi t1 là kênh 0 t2 là kênh 1
printf(LCD_putchar,"C");
thay vì có chữ C thì mình mún thêm ký tự độ cho chuẩn thôi mà

có phải bạn muốn hiển thị như thế này:

danghien719 06-07-2011 10:31 AM

Trích:

Nguyên văn bởi pdkxlily (Post 46641)
của mình là đo nhiệt độ 2 kênh bạn ơi t1 là kênh 0 t2 là kênh 1
printf(LCD_putchar,"C");
thay vì có chữ C thì mình mún thêm ký tự độ cho chuẩn thôi mà

Hì, bạn lại ko hiểu ý tôi rồi. "T0=%u" ư ? bạn có hiểu rõ cái này ko ? Tại sao bạn lại làm như thế này. Tôi hiểu ý bạn là : u = unsigned int8 hay là char hay là singed nhưng thế thì đã sao ?
LCD là ACSII mà. Hì, vậy muốn hiện ra LCD thì làm sao đây.
Rất đơn giản là phải chuyển number sang char. Hay nói chính xác là chuyển số mà adc đọc được ra kí tự mã ASCII. Thế là bạn ok rồi nhé.
Bạn đã hiểu khá rõ về sự làm việc của LCD rồi đấy.
Chúc bạn thành công.
P/M : Nếu bạn bó tay ko xây dựng đc Function thì pm cho tôi : Y!M : danghien_004
Thân.

tdm 06-07-2011 10:59 AM

Trích:

Nguyên văn bởi danghien719 (Post 46647)
Hì, bạn lại ko hiểu ý tôi rồi. "T0=%u" ư ? bạn có hiểu rõ cái này ko ? Tại sao bạn lại làm như thế này. Tôi hiểu ý bạn là : u = unsigned int8 hay là char hay là singed nhưng thế thì đã sao ?
LCD là ACSII mà. Hì, vậy muốn hiện ra LCD thì làm sao đây.
Rất đơn giản là phải chuyển number sang char. Hay nói chính xác là chuyển số mà adc đọc được ra kí tự mã ASCII. Thế là bạn ok rồi nhé.
Bạn đã hiểu khá rõ về sự làm việc của LCD rồi đấy.
Chúc bạn thành công.
P/M : Nếu bạn bó tay ko xây dựng đc Function thì pm cho tôi : Y!M : danghien_004
Thân.

printf(LCD_putchar,"T1=%u",t2);
bạn đó viết như vậy là đúng rồi. nó tự động chuyển number sang kí tự mã ASCII.
%u:định dạng dữ liệu số nguyên không dấu 8bit

pdkxlily 06-07-2011 12:04 PM

Trích:

Nguyên văn bởi tdm (Post 46646)
có phải bạn muốn hiển thị như thế này:http://www.picvietnam.com/forum/atta...1&d=1309918472

đúng rồi đó bạn ý mình là mún nó ra ký tự trong bảng mã LCD đó
%u :số nguyên hex ko dấu ^^

tdm 06-07-2011 02:06 PM

2 Attachment(s)
Trích:

Nguyên văn bởi pdkxlily (Post 46650)
đúng rồi đó bạn ý mình là mún nó ra ký tự trong bảng mã LCD đó
%u :số nguyên hex ko dấu ^^

kí tự đó không nằm trong bảng mã LCD.bạn phải tự tạo dữ liệu rồi lưu vào vùng CGRAM của LCD và truy xuất nó ra.

pdkxlily 06-07-2011 03:13 PM

bạn sent cho mình bài mô phỏng của bạn như trên hình đi . mình tham khảo phát

lambaotrung 30-03-2012 12:30 AM

Trích:

Nguyên văn bởi caovanhuong (Post 42811)
có thể sử dụng LCD 16x4, giao tiếp 8bit hoạc 4bit
đây là cái thư viện mình viết giao tiếp 8 bit
BT1: xuất "PIC VIET NAM" ra màn hình LCD
Code:

#include <16F877A.h>
#include <def_877A.h>
#fuses NOWDT,NOLVP,NOPROTECT,HS,PUT
#use delay(clock=20000000)
#include <lcd_lib.c>
void main()
{
trisb=0x00;
trisd=0x00;
lcd_init();
while(1)
{
lcd_putcmd(0x01);
lcd_putcmd(0x0c);
lcd_putchar("PIC VIET NAM");
delay_ms(500);
}
}

BT2: đọc giá trị thanh ghi porta

Code:

#include <16F877A.h>
#include <def_877A.h>
#fuses NOWDT,NOLVP,NOPROTECT,HS,PUT
#use delay(clock=20000000)
#include <lcd_lib.c>
int8 a;
void main()
{
trisb=0x00;
trisd=0x00;
trisa=0x00;
lcd_init();
while(1)
{
//porta=10;
lcd_putcmd(0x01);
lcd_putcmd(0x0c);
a=portd;// gan gia tri thanh ghi portd vào a
printf(lcd_putchar,"%d",a);// doc gia tri thanh ghi portd lên man hinh LCD
delay_ms(500);
}
}

BT3: đọc giá trị ADC của AN0 lên LCD
Code:

#include <16F877A.h>
#include <def_877A.h>
#fuses NOWDT,NOLVP,NOPROTECT,HS,PUT
#device *=16 adc=8
#use delay(clock=20000000)
#include <lcd_lib.c>
int8 data;
void main()
{
trisb=0x00;
trisd=0x00;
trisa=0x00;
lcd_init();
setup_ADC_ports(AN0_AN1_AN3);
setup_ADC(adc_clock_internal);
set_ADC_channel(0);
delay_us(10);
while(1)
{
data=read_adc();
lcd_putcmd(0x01);
lcd_putcmd(0x0c);
printf(lcd_putchar,"%u",data);
delay_ms(500);
}
}


đa một năm trôi qua rồi khi đọc lại bài viết này vẫn còn muốn cảm ơn anh 1 lần nửa.

anh Hưởng này anh có thể giúp em về tập lệnh dịch hiển thị trên LCD dc ko. em đọc datasheet thì nó là lệnh 0x05 và 0x07, nhưng ko hiểu sao khi dùng lệnh này thì nó ko hiển thi.

void main()
{
lcd_init();
lcd_putcmd(0x80);
printf(lcd_putchar,"PICVIETNAM");
while(true)
{
lcd_putcmd(0x05)
delay_ms(500);
}
}

ko biết có phải lệnh 0x05 và 0x07 ko bác giúp em.

onlybad123 03-01-2013 04:59 AM

có sơ đồ mạch cho bài tập 1 nói ở trên không cho mình với!
hoangvanloi1991@gmail.com
ai có gửi mail cho mình nha!!
thanks!


Múi giờ GMT. Hiện tại là 11:17 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