PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

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

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 21-03-2011, 02:38 PM   #1
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
giúp mình về LCD va PIC 16f877

hiện giờ mình đang làm bài tập kết nói và hiển thi từ PIc lên LCD.
+bài tập 1: là kết noi PIC & LCD gữi nhưng chửa nghĩa bình thường lên như " TEST, HELLO"...
+bài tập 2: là đưa giá trị của một thanh ghi lên màn hình LCD tại vị trí con trỏ.
+bài tập 3: là kết nói PIC lên LCD thông qua ADC để thấy đổi giá trị.....

mình cố thể dùng màn hình loại 16x4 dc ko...

và kết nói 4birt hay 8bit.....

chân thành cảm ơn các bạn.
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-03-2011, 07:51 PM   #2
caovanhuong
Đệ tử 2 túi
 
caovanhuong's Avatar
 
Tham gia ngày: Jul 2009
Bài gửi: 40
:
Trích:
Nguyên văn bởi lambaotrung View Post
hiện giờ mình đang làm bài tập kết nói và hiển thi từ PIc lên LCD.
+bài tập 1: là kết noi PIC & LCD gữi nhưng chửa nghĩa bình thường lên như " TEST, HELLO"...
+bài tập 2: là đưa giá trị của một thanh ghi lên màn hình LCD tại vị trí con trỏ.
+bài tập 3: là kết nói PIC lên LCD thông qua ADC để thấy đổi giá trị.....

mình cố thể dùng màn hình loại 16x4 dc ko...

và kết nói 4birt hay 8bit.....

chân thành cảm ơn các bạn.
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);
}
}
File Kèm Theo
File Type: zip LCD.zip (4.5 KB, 588 lần tải)
__________________
Cao Văn Hưởng
SĐT: 01672754113
Email: caovanhuong@webdien.com
Nhận thiết kế mạch điện tử, PCB (Orcad)

caovanhuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-03-2012, 12:30 AM   #3
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
Trích:
Nguyên văn bởi caovanhuong View Post
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.
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-03-2011, 04:07 PM   #4
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
Thuyet voi cam on anh nhieu....
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-03-2011, 04:15 PM   #5
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
Anh oi cho em them 1 điều là mình kết nói các chân của pic và lcd như thế nào.... Ko có hình ảnh và củng ko có thầy chỉ nưa. Anh giúp em cái này....
Vơi lại em thấy cái doan core kia kết nói.....
Driver pic & lcd khá là phúc tạp hơn....

VA 1 CÂU HỎI NỬA LÀ.

VI KẾT NÓI NHƯ TRÊN THEO KEI TRIS_B, TRIS_D NHƯ CỦA ANH EM KO KIỂM TRA DC GIA CHI CỦA PIN RB0.

MÀ MACH EM LDE6DEP6E6M1 CÀN DỌC TÍNH HIỆU ( H_TO_L) TỪ 1 CHÂN CỦA 1 PORT NHƯ VẬY MÌNH KHAI BÁO NHƯ THẾ NÀO

VD:
//RE0 LÀ CHÂN KHÔNG CỦA PORT E.
IF(RE0 = 0)
{
a++
}

NHƯ VẬY LÀ TƯƠNG ĐƯƠNG GÁN 1 CHÂN CỦA PORT THÀNH 1 CÁI TÊN MÀ MÌNH ĐỊNH TRƯỚC NHƯ " RE0, CHAN01,...."

VÀ TƯƠNG TƯ NHƯ THẾ... KHÁC BAO CHO CÁC PORT KHÁC NHƯ THỂ NÀO..


Như thế chất là năng cao hơn àh... Giúp em cai nua nhe...
HI CAM ƠN. ANH

thay đổi nội dung bởi: lambaotrung, 24-03-2011 lúc 04:50 PM.
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2011, 11:46 PM   #6
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Hiển thị chữ "HELLO WORLD"

#include <16f877a.h>
#fuses nowdt,noprotect,nolvp,put,hs
#use delaY(clock=4000000)

#byte portb=0x6
#byte porte=0x9

#bit e=0x9.0
#bit rs=0x9.1
#bit rw=0x9.2

int i;
char mang[]="HELLO WORLD";

void lenh()
{
rs=0;rw=0;e=1;e=0;
delay_ms(5);
}
void xuat()
{
e=1;rs=0;rw=0;e=0;
delay_ms(5);
}

void khoitao()
{
portb=0x1;lenh(); //xoa LCD
portb=0x38;lenh(); //hien thi 2 dong
portb=0x0e;lenh(); //bat hien thi
portb=0x02;lenh(); //dua con tro ve dau dong//
}

void main()
{
set_tris_b(0);
set_tris_e(0);
khoitao();
for(i=0;i<15;i++)
{
portb=mang[i];
xuat();
delay_ms(5);
}
while(1)
{}
}

thay đổi nội dung bởi: stupid11, 27-03-2011 lúc 11:59 PM.
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-03-2011, 12:04 AM   #7
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Smile

//Đo nhiệt đô hiển thị lên LCD và cảnh báo ở ngưỡng 50 oC//
//Phần cứng như sau:
porte:chân điều khiển
portb:xuất data
RA0:ngõ vào analog(từ LM35)
RA1:xuất cảnh báo

#include <16f877a.h>
#fuses nowdt,noprotect,nolvp,put,hs
#use delay(clock=4000000)

#byte portb=0x6
#byte porte=0x9

#bit e=0x9.0
#bit rs=0x9.1
#bit rw=0x9.2

int i,x;
char mang[]="nhiet do :";

void lenh()
{
rs=0;rw=0;e=1;e=0;
delay_ms(5);
}
void xuat()
{
e=1;rs=0;rw=0;e=0;
delay_ms(5);
}

void khoitao()
{
portb=0x1;lenh(); //xoa LCD
portb=0x38;lenh(); //hien thi 2 dong
portb=0x0e;lenh(); //bat hien thi
portb=0x02;lenh(); //dua con tro ve dau dong//
}

void doc_ADC()
{
setup_ADC(ADC_clock_internal);
stup_ports(AN0);
set_channel(0);
delay_ms(1);
}

void main()
{
set_tris_a(0b01);
set_tris_b(0);
set_tris_e(0);
khoitao();
for(i=0;i<12;i++)
{
portb=mang[i];
xuat();
delay_ms(5);
}
while(1)
{
doc_ADC();
X=read_ADC();
X=X*2.049 //ADC 10bit & LM35//
portb=0x89;lenh();//dua con tro LCD toi vi trí sau chu nhiet do:
//ban nen xem lai lenh nay..ko biet co dung vi tri ko nua~.

portb=x;xuat();
//canh bao//
if(x>50)
{
RA1=1 //
}
else
{
RA1=0;//
}
}}


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.
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-07-2011, 10:39 AM   #8
pdkxlily
Đệ tử 2 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 27
:
Trích:
Nguyên văn bởi stupid11 View Post

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
pdkxlily vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-03-2011, 09:16 PM   #9
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
cam on bạn nhưng mà vẫn thấy sao sao...

kiểm tra giá trị của 1 chân bit trong 1 pỏt vẫn chưa giải quyết dc.
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-03-2011, 10:02 PM   #10
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
bạn ởi bạn có tài liệu gì về kết nối. LCD và PIC ko về các hàm các lệnh, su khoi tao.
viet nhu thề nào...

nếu bạn có tài liệu gì về lập trình cho PIC.

mình dang làm bai tập

kiểm tra pin của 1 port ( vd: porte chân số 0 )

ví du của chương trình.
// kiem tra giá trị điện áp tháp ở chuân 0 của porte
e0= chân 0 của portE
int a;

void main()
{
set_tris_e(0x01);
set_tris_d(0x00);
if( e0 == 0)
{
a++;
output_d(a);
}
}
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-03-2011, 10:51 PM   #11
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Smile

-Bạn đọc thêm mấy tài liệu này..còn LCD thì bạn vào trang www.hocavr.com/index.php/app/textlcd người ta chỉ cũng khá chi tiết đó...giao tiếp 4 bit.8bit luôn.
-còn câu hỏi của bạn mình cũng ko hiểu cho lắm..có phải bạn muốn kiểm tra chân nào đó ở mức '1' hay '0' phải không

vd:chân a0=0x5.0

if(a0==0)
{
thực hiện 1...
}
else
{
thực hiện 2...
}
đại khái là thế...hoặc bạn cũng có thể dùng lệnh bit_test(x,i) cũng được..Trong đó x là thanh ghi,còn i là thứ tự bit trong thanh ghi.

vd:kiểm tra chân RB3 ở mức cao:

if(bit_test(0X5,3))
{
}
.....

hay kiểm tra chân RA4 ở mức thấp

if( ! bit_test(0x5,4)) //bạn chú ý " ! " tức là mức thấp
{
}
.....
-Còn cách khởi tạo LCD thì để hôm nào lục lại mấy cái folder đã,,lâu rồi ko đụng đến..có gì mình gửi mail cho.Chúc bạn may mắn.
File Kèm Theo
File Type: pdf ccs_c_manual_4.pdf (2.88 MB, 470 lần tải)
File Type: pdf PIC-C.pdf (700.0 KB, 463 lần tải)
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-03-2011, 11:34 PM   #12
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Smile

Đây là file mô phỏng LCD hiện chữ 'HELLO WORLD' bạn lưu ý:khi mô phỏng mà ko có thạch anh ngoài thì khai báo là #fuses xt //thì PIC sẽ chạy thạch anh nội.

-còn nếu rảnh thì gắn thạch anh ngoài (mất nhiều thời gian) thì khai báo #fuses hs
-Nếu ko chạy ko hiểu lí do vì sao ko chạy đâu.Rất nhỏ nhưng cần phải lưu ý.
-bạn tải file mô phỏng trên mạng cần chú ý chỗ này.
File Kèm Theo
File Type: rar PLC.rar (1.39 MB, 430 lần tải)
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-03-2011, 11:03 AM   #13
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
bạn ởi mình thực hiện lệnh tét 1 chân trong 1 port như bạn chỉ ko dc.
#include <def_877A.h>
#fuses NOWDT,NOLVP,NOPROTECT,HS,PUT
#use delay(clock=20000000)
#byte portd = 0x06
#byte porte= 0x09
#use fast_io(a)
#use fast_io(b)
#use fast_io(d)

void main()
{
set_tris_a(0xff);
set_tris_b(0x00);
set_tris_d(0x00);
while(1)
{
if(! bit_test(0x5.1))
{output_d(0x01);
}
}
}

chương trình ccs pic c dịch thành công nhưng khi chạy mô phỏng thì nó out ra trị ra port D luôn ko kiểm tra dc..
giup mình chổ này nhe.

có gì gữi qua mail: lambaotrungdt@gmail.com
fone: 01284279279

thay đổi nội dung bởi: lambaotrung, 29-03-2011 lúc 11:08 AM. Lý do: bổ xung nội dung.
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-03-2011, 04:13 PM   #14
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Xin lỗi mấy bạn nha.Hình như mình up nhầm file mô phỏng.để tối về rồi up lại.sorry sorry
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-03-2011, 04:14 PM   #15
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
plc

thay la la
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lờ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à 12:37 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