OK, mình xin thay đoạn chương trình đó bằng cách gọi hàm:
Code:
Convert(a,4,number);
Với hàm Convert được khai báo và định nghĩa ở trên hàm MyInt như sau:
Code:
// ========== Ham 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;
};
}
Các bạn đổi lại kiểu dữ liệu của mảng a trong chương trình lại thành kiểu
Unsigned char.
Đoạn code đã được test bằng phần cứng.Đảm bảo thay thế đúng.
Mình xin đưa lại code mới:
Code:
/*;========================================================
; Ten chuong trinh : Quet 4led 7 thanh
; Nguoi thuc hien : Ngo Hai Bac (NOHB)
; Ngay thuc hien : 12/04/06
; Phien ban : 2.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
;----------------------------------------------------------------
; 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};
// ========== Ham 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;
};
}
//===== hàm khởi tạo
void interrupt MyInt(void){
static 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 == 200){
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;
//-------------------------init for interrupt
GIE = 1;
T0IE = 1;
TMR0 = 6;
}
//------------------------------------MAIN
void main(){
init();
while(1);
}
// ============== Hết code
Chúc các bạn thành công.