PDA

View Full Version : HT PIC ,Xem giúp em chương trình quét phím!!!


delta21
02-01-2011, 11:07 AM
em mắc 4 nút nhấn vào port B,4 led vào port d.Khi chạy thì led ở vị trí RD3 cứ nhấp nháy,mà sao em thấy có 3 nút là dùng dc,nút còn lại thì ko có tác dụng!!!!
không biết chương trình em sai ở đâu nhỉ

#include<htc.h>
__CONFIG(EXTIO & WDTDIS & PWRTEN &
MCLREN & UNPROTECT & DUNPROTECT & BORDIS &
IESODIS & FCMDIS & LVPDIS & HS);
void init()
{
ANSEL=ANSELH=0;
WPUB=1;
RBPU=0;
TRISB=1;
TRISD=0;
}
void main()
{
init();
while(1)
{
if (RB0==0)
{
_delay(10000);
RD0^=1;
}
if (RB1==0)
{
_delay(10000);
RD1^=1;
}
if (RB2==0)
{
_delay(10000);
RD2^=1;
}
if (RB3==0)
{
_delay(10000);
RD3^=1;
}
}

}

delta21
03-01-2011, 09:32 AM
hic!!!em biết mình sai chỗ nào rồi,doạn này đây ạ!!!phải ghi rõ từng bit cụ thế,các bác xem có đúng không!!!

WPUB0=1;
WPUB1=1;
WPUB2=1;
WPUB3=1;
RBPU=0;
TRISB0=1;
TRISB1=1;
TRISB2=1;
TRISB3=1;
TRISD=0;

Hieu98DT
06-01-2011, 02:26 PM
hic!!!em biết mình sai chỗ nào rồi,doạn này đây ạ!!!phải ghi rõ từng bit cụ thế,các bác xem có đúng không!!!

Bạn có tài liệu HT Pic tiếng việt ko cho minh xin để tham khảo được ko bạn

delta21
06-01-2011, 07:38 PM
bạn có tài liệu ht pic tiếng việt ko cho minh xin để tham khảo được ko bạn

mình không có bạn ạ,đọc help của ht pic thôi

dinhminh09
07-01-2011, 04:22 PM
mà sao ht pic mình cài nó không có phần help bạn à. có bản setup có phần help không cho mình với.............

delta21
07-01-2011, 09:45 PM
mà sao ht pic mình cài nó không có phần help bạn à. có bản setup có phần help không cho mình với.............

mình dùng MPlab bạn ạ!!có file PDF user manual đấy,bạn tìm xem.vào MPlab nhấn F11 là nó ra

nhuhuan86
07-01-2011, 11:47 PM
em mắc 4 nút nhấn vào port B,4 led vào port d.Khi chạy thì led ở vị trí RD3 cứ nhấp nháy,mà sao em thấy có 3 nút là dùng dc,nút còn lại thì ko có tác dụng!!!!
không biết chương trình em sai ở đâu nhỉ

Cậu cần nói rõ nút ở chân nào ko dc?
- cậu xem lại phần config giùm: mình chưa hiểu cấu hình EXTIO là cấu hình gì cả??
- Hình như trong phần ADC,cậu cấu hình thiếu 1 thanh ghi ADON
Mình chỉ góp ý dc như vậy.Có gì chưa đúng xin dc chỉ giáo

Thân

delta21
08-01-2011, 01:17 AM
Cậu cần nói rõ nút ở chân nào ko dc?
- cậu xem lại phần config giùm: mình chưa hiểu cấu hình EXTIO là cấu hình gì cả??
- Hình như trong phần ADC,cậu cấu hình thiếu 1 thanh ghi ADON
Mình chỉ góp ý dc như vậy.Có gì chưa đúng xin dc chỉ giáo

Thân
chân cẳng mình nối như trên hình!!!

EXTIO :External RC No Clock ,chọn thạch anh ngoài.....
bạn có thể tham khảo thêm trong file pic6f887.h trong thư mục của HTC
phần ADC mình cấu hình cho ANSEL =ANSELH=0 rồi,như vậy mình ko chọn ngõ vào là analog nữa nên ko cần cấu hình ADON

mình chỉ thắc mắc là tại sao khi cấu hình Port B thì phải ghi rõ từng bit cụ thể thôi.....
//HT pic ít người dùng quá!!!

duyphuoc
08-01-2011, 08:57 AM
Theo mình thì để dùng thạch anh ngoài tầng số cao mình chỉ cần khai báo HS là đủ, tại các này mình đã từng test trên Kit rồi.
Bạn không cần phải ghi ra từng bit khi cấu hình Port B. Bạn có thể làm thế này:
TRISB = 0x0F;
PORTD = 0;
TRISD = 0xF0;
RBPU = 0;
WPUB = 0x0F;

Với lại bạn cần phải chống dội cho các phím nhấn. Thân!

delta21
08-01-2011, 11:43 PM
Theo mình thì để dùng thạch anh ngoài tầng số cao mình chỉ cần khai báo HS là đủ, tại các này mình đã từng test trên Kit rồi.
Bạn không cần phải ghi ra từng bit khi cấu hình Port B. Bạn có thể làm thế này:
TRISB = 0x0F;
PORTD = 0;
TRISD = 0xF0;
RBPU = 0;
WPUB = 0x0F;

Với lại bạn cần phải chống dội cho các phím nhấn. Thân!

ủa,mình tưởng chống dội bằng hàm _delay(10000) là đủ,bạn nói rõ hơn chút dc không??

dinhminh09
09-01-2011, 03:37 PM
cái code mình chưa xem như thây cách mắc mấy cái nút nhấn nó không nhảy từa lưa mới lạ.
bạn cần mắc cho rõ ràng. lúc nào là mức không lúc nào là mức 1. chứ để như vậy nó không hiểu là mức 0 hay mức 1 rõ ràng. nên nó muống hiểu thế nào thì hiểu. ví dụ khi bạn nhấn nút nó hiểu là mức 0. nhưng khi bạn thả nút nhấn ra thì nó không hiểu là đang ở mức nào.
thân

duyphuoc
09-01-2011, 07:07 PM
Cậu này không xem code nên không biết rồi, bạn ý đã set R pullup rồi mà, nên khi thả nút thì nó hiểu là mức 1 thôi, hiển nhiên.
Tiện thể về vấn đề chống dội phím của delta để hôm nào rảnh mình sẽ giải thích rõ rang với bạn nhé. Hiện giờ mình đang bận thi nên không thể trả lời lúc này được, bạn thông cảm.
Ah, việc dùng delay để chống dội như bạn cũng là một cách nhưng nó khồng tối ưu và sẽ gặp vấn đề nếu bạn sử dụng trong các trường hợp khác. Bạn có thể tìm thêm thông tin trên forum. Thân!

delta21
09-01-2011, 08:15 PM
Cậu này không xem code nên không biết rồi, bạn ý đã set R pullup rồi mà, nên khi thả nút thì nó hiểu là mức 1 thôi, hiển nhiên.
Tiện thể về vấn đề chống dội phím của delta để hôm nào rảnh mình sẽ giải thích rõ rang với bạn nhé. Hiện giờ mình đang bận thi nên không thể trả lời lúc này được, bạn thông cảm.
Ah, việc dùng delay để chống dội như bạn cũng là một cách nhưng nó khồng tối ưu và sẽ gặp vấn đề nếu bạn sử dụng trong các trường hợp khác. Bạn có thể tìm thêm thông tin trên forum. Thân!

bạn giúp mình nhé!!!!,hiện tại mình đang làm về phần nút bấm này,số nút lên tới 16,mà chưa biết chống dội sao cho hiệu quả

tungbachnam
09-01-2011, 08:49 PM
Bạn có thể dùng phần cứng dùng tụ 104 nối tiếp trở 10k để chông dội phím nhấn.

delta21
10-01-2011, 12:00 AM
Bạn có thể dùng phần cứng dùng tụ 104 nối tiếp trở 10k để chông dội phím nhấn.

cảm ơn bạn,mình làm dc rồi....trước dùng 8051 toàn làm delay như trên.phần chống dội của mình thế này nè

scan:
if(RB0==0)
{
_delay(10000);
if(RB0==0)
RC0^=1;
else goto scan;
while(RB0==0) //cho nha phim
{}
_delay(10000);

vuquyen
10-01-2011, 11:24 AM
ban có thể dùng cách này để chống nhiễu và chống dội
int1 key1Test()

{

if(input(key1)==0)

{

delay_ms(30);

if(input(key1)==0)

{

delay_ms(300);

return 1;

}

else return 0;

}

return 0;

}
ở đây mình dung CCS. bạn có thể viết lại bằng HTC

dinhminh09
10-01-2011, 02:52 PM
#include <16f877a.h> //PIC utilizado
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=20000000)

#include <lcdd.c>
#define use_portb_kbd TRUE
#INCLUDE "kbdd.c"

int8 k;

void main()
{
port_b_pullups(TRUE);
lcd_init();
kbd_init();

while(1)
{
k=kbd_getc();
if (k!=0)
{

lcd_putc(k);
}
}
}



cái code này đơn giản viết bằng ccs c. thay hai thư viên lcdd.c == lcd.c và kbdd.c == kbd.c là biên dịch được tại cái này mình viết cho 16 phím. bạn chỉ cần sửa đôi chút trong file kbd.c là có thể xài với 16 phím

thân......!

le van ngot
10-01-2011, 03:35 PM
thực ra trong chíp đã có sẵn phần smith triger rồi các bạn cũng không cần phải tạo delay làm gi.

tieukhe0303
25-03-2011, 12:54 PM
Cậu ơi tui k dùng Hi tech mà dùng ccs thi chỗ cậu lệnh ANSEL = ANSELH=0; viết thay thế như thế nào. cậu giúp tui với nha.

delta21
04-04-2011, 12:34 AM
Cậu ơi tui k dùng Hi tech mà dùng ccs thi chỗ cậu lệnh ANSEL = ANSELH=0; viết thay thế như thế nào. cậu giúp tui với nha.
tăt analog thôi mà.......