Có lẽ chương trình hiển thị số lên led7 đoạn đã được mịnh viết bên dientuvietnam.net nên sẽ không viết lại nữa nha. Nhưng máy mình không vào được site này. Nên đành post lên bên này vậy.
Sau đây là chương trình đếm xung từ chân RC1/T1OSI/CCP2 để hiển thị lên 4led 7 thanh. Một chương trình cũng rất đơn giản.Xin mời các bạn xem và cho ý kiến về chương trình này:
Code:
/*;========================================================
; Ten chuong trinh : Quet 4led 7 thanh
; Nguoi thuc hien : Ngo Hai Bac (NOHB)
; Ngay thuc hien :
; Phien ban : 1.0
; Mo ta phan cung : Dung PIC16F877A - thach anh 20MHz
; 4 led 7 anot chung, cac catot noi voi PORTD, 4 chan anot noi voi cuc E trans A1015
; cuc B cua trans noi voi chan 7->5 cua PORTA
; Xung ngoai duoc cho vao chan RC1/T1OSI/CCP2
;----------------------------------------------------------------
; Ngay hoan thanh :
; Ngay kiem tra :
; Nguoi kiem tra :
;----------------------------------------------------------------
; Chu thich :
;========================================================*/
#include<pic.h>
__CONFIG(HS & PWRTEN & BOREN & LVPDIS & WDTDIS );
const unsigned char Font[]={ 0b00000011, 0b10011111, 0b00100101, 0b00001101, 0b10011001,\
0b01001001, 0b01000001, 0b00011111, 0b00000001, 0b00001001};
// Chuyen doi
void Convert(unsigned char *a,unsigned char index, unsigned int number){
unsigned char i;
for(i=0;i< index; i++){
*(a+i) = number%10;
number = number/10;
};
}
//===== Ham khoi tao
void interrupt MyInt(void){
static volatile unsigned int counter1,counter2;
// counter1 dem so lan Timer0 tran
// counter2 dem so lan ca 4 led7 thanh duoc quet
static volatile unsigned int number;
static volatile unsigned char a[4]={0,0,0,0};
static volatile unsigned char j; // bien dem kiem tra xem led nao duoc quet
if(T0IF & T0IE){
TMR0 = 6;
T0IF = 0 ;// xoa co ngat
++counter1;
if( counter1 == 3){
counter1 = 0;
PORTD = 0xFF;
PORTA = 0xFF - (1<<(5- j)) ;
PORTD = Font[a[j]];
if(++j==4) {
j=0;
++counter2;
};
};
if(counter2 == 2000){
number = (TMR1H << 8) | TMR1L;
TMR1ON = 0 ; // ngung Timer1
TMR1H = TMR1L = 0;
TMR1ON = 1 ; // bat lai Timer1
if(number>9999) number= 0;
counter2 = 0;
Convert(a, 4, number);
};
};
}
//------------------------------------init
void init(void)
{
//================= init for PORTs
OPTION = 0b00000000;
ADCON1 = 0b00000111;
TRISA = 0b00000000;
TRISB = 0b11111111;
TRISC = 0b11111111;
TRISD = 0b00000000;
PORTD = Font[0];
TRISE = 0b11111111;
//================ Khoi tao cho Timer0
GIE = 1;
T0IE = 1;
TMR0 = 6;
// ========= Khoi tao cho dem Timer1
TMR1CS = 1; // Timer1 hoat dong o che do Counter Mode
T1SYNC = 1; // TMR1 hoat dong o che do dem khong dong bo
T1OSCEN = 1; // Dem xung tu chan RC1/T1OSI/CCP2
T1CKPS1 = T1CKPS0 = 0; // Chon Prescaler = 1:1
TMR1H = TMR1L = 0;
TMR1IE = 0; // Khong dung ngat Timer1
TMR1ON = 1; // Bat Timer1
}
//------------------------------------MAIN
void main(){
init();
while(1);
}
// ============= Kết thúc
Chúc mọi người thành công.