daklak
05-06-2012, 03:21 PM
mình đang làm đề tài môn vi điều khiển dùng pic 18f4620 thiết kế đồng hồ số hiển thị trên lcd dùng ma trận phím 4*4 mình làm xong phần hiển thị số rùi nhưng con phần hẹn giờ dùng ma trận phím mình không biết lập trình thế nào bạn nào có thể chỉ giúp mình hướng lập trình với.
#include <p18f4620.h>
#include <delays.h>
#define rs LATEbits.LATE0
#define rw LATEbits.LATE1
#define en LATEbits.LATE2
#define hang1 PORTDbits.RD0
#define hang2 PORTDbits.RD1
#define hang3 PORTDbits.RD2
#define hang4 PORTDbits.RD3
#define cot1 PORTDbits.RD4
#define cot2 PORTDbits.RD5
#define cot3 PORTDbits.RD6
#define cot4 PORTDbits.RD7
char x,y,tt,ch_gio,dv_gio,ch_phut,dv_phut,ch_giay,dv_gi ay,time=0;
long s;
unsigned char i,li,lj;
unsigned char so[]={'0','1','2','3','4','5','6','7','8','9'};
unsigned int gio=0,phut=0,giay=0;
void delay (unsigned char time )
{
for ( li=0 ; li<80; li++ )
{ for ( lj=0 ; lj<time; lj++)
{;}
}
}
void lenh_LCD (unsigned char s)
{
LATC=s;
rs=0;
rw=0;
en=1;
delay(10);
en=0;
delay(10);
}
void data_LCD (unsigned char s)
{
LATC=s;
rs=1;
rw=0;
en=1;
delay(10);
en=0;
delay(10);
}
void hienthi(void)
{
ch_gio=gio/10;
dv_gio=gio%10;
ch_phut=phut/10;
dv_phut=phut%10;
ch_giay=giay/10;
dv_giay=giay%10;
}
void quetphim(void)
{
//====================0123=====================
PORTD=0xfe;
if(PORTDbits.RD0==0&&tt==0)
{x=0;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD0==0&&tt==1)
{y=0;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD1==0&&tt==0)
{x=1;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD1==0&&tt==1)
{y=1;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD2==0&&tt==0)
{x=2;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD2==0&&tt==1)
{y=2;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD3==0&&tt==0)
{x=3;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD3==0&&tt==1)
{y=3;tt=0;
PORTC=so[y];
delay(3000);
}
//====================4567=====================
PORTD=0xfd;
if(PORTDbits.RD0==0&&tt==0)
{x=4;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD0==0&&tt==1)
{y=4;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTCbits.RC1==0&&tt==0)
{x=5;tt=1;
PORTB=so[x];
}
else if(PORTDbits.RD1==0&&tt==1)
{y=5;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD2==0&&tt==0)
{x=6;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD2==0&&tt==1)
{y=6;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD3==0&&tt==0)
{x=7;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD3==0&&tt==1)
{y=7;tt=0;
PORTC=so[y];
delay(3000);
}
//====================89+-=====================
PORTD=0xfc;
if(PORTDbits.RD0==0&&tt==0)
{x=8;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD0==0&&tt==1)
{y=8;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD1==0&&tt==0)
{x=9;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD1==0&&tt==1)
{y=9;tt=0;
PORTC=so[y];
delay(3000);
}
}
void initCOUNTER0(void)
{
T0CON=0;
T0CONbits.T0SE=1;
T0CONbits.T0CS=1;
T0CONbits.PSA=1;
}
void interrupt_COUNTER0(void)
{
INTCONbits.GIE=0;
INTCONbits.TMR0IE=0;
INTCONbits.TMR0IF=0;
T0CONbits.TMR0ON=1;
}
void main(void)
{
TRISD=0xff;
TRISC=0x00;
TRISE=0x00;
lenh_LCD(0x38);
lenh_LCD(0x0E);
lenh_LCD(0x01);
initCOUNTER0();
while (1)
{
giay++;
if (giay==60)giay=0,phut++;
if (phut==60)phut=0,gio++;
if (gio ==24)gio=phut=giay=0;
hienthi();
lenh_LCD(0x80);
data_LCD(so[ch_gio]);
delay(50);
lenh_LCD(0x81);
data_LCD(so[dv_gio]);
delay(50);
lenh_LCD(0x82);
data_LCD(':');
lenh_LCD(0x83);
data_LCD(so[ch_phut]);
delay(50);
lenh_LCD(0x84);
data_LCD(so[dv_phut]);
delay(50);
lenh_LCD(0x85);
data_LCD(':') ;
lenh_LCD(0x86);
data_LCD(so[ch_giay]);
delay(50);
lenh_LCD(0x87);
data_LCD(so[dv_giay]);
delay(50);
}
}
#include <p18f4620.h>
#include <delays.h>
#define rs LATEbits.LATE0
#define rw LATEbits.LATE1
#define en LATEbits.LATE2
#define hang1 PORTDbits.RD0
#define hang2 PORTDbits.RD1
#define hang3 PORTDbits.RD2
#define hang4 PORTDbits.RD3
#define cot1 PORTDbits.RD4
#define cot2 PORTDbits.RD5
#define cot3 PORTDbits.RD6
#define cot4 PORTDbits.RD7
char x,y,tt,ch_gio,dv_gio,ch_phut,dv_phut,ch_giay,dv_gi ay,time=0;
long s;
unsigned char i,li,lj;
unsigned char so[]={'0','1','2','3','4','5','6','7','8','9'};
unsigned int gio=0,phut=0,giay=0;
void delay (unsigned char time )
{
for ( li=0 ; li<80; li++ )
{ for ( lj=0 ; lj<time; lj++)
{;}
}
}
void lenh_LCD (unsigned char s)
{
LATC=s;
rs=0;
rw=0;
en=1;
delay(10);
en=0;
delay(10);
}
void data_LCD (unsigned char s)
{
LATC=s;
rs=1;
rw=0;
en=1;
delay(10);
en=0;
delay(10);
}
void hienthi(void)
{
ch_gio=gio/10;
dv_gio=gio%10;
ch_phut=phut/10;
dv_phut=phut%10;
ch_giay=giay/10;
dv_giay=giay%10;
}
void quetphim(void)
{
//====================0123=====================
PORTD=0xfe;
if(PORTDbits.RD0==0&&tt==0)
{x=0;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD0==0&&tt==1)
{y=0;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD1==0&&tt==0)
{x=1;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD1==0&&tt==1)
{y=1;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD2==0&&tt==0)
{x=2;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD2==0&&tt==1)
{y=2;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD3==0&&tt==0)
{x=3;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD3==0&&tt==1)
{y=3;tt=0;
PORTC=so[y];
delay(3000);
}
//====================4567=====================
PORTD=0xfd;
if(PORTDbits.RD0==0&&tt==0)
{x=4;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD0==0&&tt==1)
{y=4;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTCbits.RC1==0&&tt==0)
{x=5;tt=1;
PORTB=so[x];
}
else if(PORTDbits.RD1==0&&tt==1)
{y=5;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD2==0&&tt==0)
{x=6;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD2==0&&tt==1)
{y=6;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD3==0&&tt==0)
{x=7;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD3==0&&tt==1)
{y=7;tt=0;
PORTC=so[y];
delay(3000);
}
//====================89+-=====================
PORTD=0xfc;
if(PORTDbits.RD0==0&&tt==0)
{x=8;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD0==0&&tt==1)
{y=8;tt=0;
PORTC=so[y];
delay(3000);
}
else if(PORTDbits.RD1==0&&tt==0)
{x=9;tt=1;
PORTC=so[x];
}
else if(PORTDbits.RD1==0&&tt==1)
{y=9;tt=0;
PORTC=so[y];
delay(3000);
}
}
void initCOUNTER0(void)
{
T0CON=0;
T0CONbits.T0SE=1;
T0CONbits.T0CS=1;
T0CONbits.PSA=1;
}
void interrupt_COUNTER0(void)
{
INTCONbits.GIE=0;
INTCONbits.TMR0IE=0;
INTCONbits.TMR0IF=0;
T0CONbits.TMR0ON=1;
}
void main(void)
{
TRISD=0xff;
TRISC=0x00;
TRISE=0x00;
lenh_LCD(0x38);
lenh_LCD(0x0E);
lenh_LCD(0x01);
initCOUNTER0();
while (1)
{
giay++;
if (giay==60)giay=0,phut++;
if (phut==60)phut=0,gio++;
if (gio ==24)gio=phut=giay=0;
hienthi();
lenh_LCD(0x80);
data_LCD(so[ch_gio]);
delay(50);
lenh_LCD(0x81);
data_LCD(so[dv_gio]);
delay(50);
lenh_LCD(0x82);
data_LCD(':');
lenh_LCD(0x83);
data_LCD(so[ch_phut]);
delay(50);
lenh_LCD(0x84);
data_LCD(so[dv_phut]);
delay(50);
lenh_LCD(0x85);
data_LCD(':') ;
lenh_LCD(0x86);
data_LCD(so[ch_giay]);
delay(50);
lenh_LCD(0x87);
data_LCD(so[dv_giay]);
delay(50);
}
}