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)

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.


Múi giờ GMT. Hiện tại là 12:01 PM.

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