|
Tài trợ cho PIC Vietnam |
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 |
|
Ðiều Chỉnh | Xếp Bài |
|
05-06-2012, 03:21 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Mar 2012
Bài gửi: 2
: |
dong ho so hien thi gio phut giay len lcd
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); } } |
|
|