PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 19-02-2012, 12:02 PM   #1
thajcobac
Nhập môn đệ tử
 
Tham gia ngày: Sep 2011
Bài gửi: 3
:
ma trận phím

mình đang làm ma trận phím 4x4 hiển thị lên 2 led 7 đoạn. ban nào lập trình pic tốt thì xem cái code mình bi sai chỗ nào mà sao led bên phải không sáng còn led bên trái lại sáng. mình muốn khi ấn nút nhấn thì nó hiển thị vị trí nút nhấn lên led 7 đoạn.
đây là code và file mô phỏng
http://www.mediafire.com/?hwj8z4zq61kph9b

#include <16f877a.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=2000000)
#use fast_io(b)
const char LED7[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0,0x88,0x83,0xc6,0xa1,0x86,0x8e};//HIEN THI TU SO 0 DEN F
//CAC HAM CO BAN CHO QUET PHIM
char xoayTrai(char value);
char readKey();
int8 chuc,dvi,i;
//HAM CHINH
void main(void)
{
char key=0;
SET_TRIS_B(0X00);//PORTB LA OUTPUT
SET_TRIS_E(0X00);//PORTE LA OUTPUT
PORTB=0XFF;//BAN DAU HIEN THI SO 0
while(true)
{
key=readKey();//DOC PHIM
if(key!=0)
{
if(key<=10)
{
PORTB=LED7[key-1];
PORTE=0b00000010;
delay_ms(1);
porte=0b00000000;
delay_ms(1);
portb=led7[0];
porte=0b00000001;
delay_ms(1);
porte=0b00000000;
delay_ms(1);
}
else
{
chuc=key/10;
dvi=key%10;
PORTB=LED7[chuc+1];
PORTE=0b00000010;
delay_ms(1);
porte=0b00000000;
delay_ms(1);
portb=led7[dvi-1];
porte=0b00000001;
delay_ms(1);
porte=0b00000000;
delay_ms(1);
}
}
}
}

//HAM CON
char xoayTrai(char value)
{
char temp;
temp=value;
temp=temp>>7;
value=value<<1;
value=value|temp;
return value;
}

char readKey()
{
char temp;//LUU GIA TRI XOAY CHO PORT QUET PHIM
char key;//LUU GIA TRI KEY DA NHAN
int i;//BIEN DEM VONG

SET_TRIS_C(0XF0);//BAN PHAI THIET LAP INPUT VA OUTPUT CHO PORT QUET NHE


temp=0x80;
for( i=0;i<4;i++)
{
temp=xoayTrai(temp);//XOAY MOT BIT
PORTC=temp;//DUA RA PORT DE QUET QUA HANG/COT MOI
KEY=0;
if( input_state(PIN_C4)==1 )//PHAI DUNG HUNG INPUT(PIN) BAN NHE,HAM INPUT(PIN) DUNG LA CO LOI
{
KEY=i*4+1;
break;
}
else if( input_state(PIN_C5)==1 )
{
KEY=i*4+2;
break;
}
else if( input_state(PIN_C6)==1 )
{
KEY=i*4+3;
break;
}
else if( input_state(PIN_C7)==1 )
{
KEY=i*4+4;
break;
}
}
return KEY;
}

thay đổi nội dung bởi: thajcobac, 19-02-2012 lúc 12:12 PM.
thajcobac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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:20 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