View Single Post
Old 26-04-2006, 08:31 AM   #6
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
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.

thay đổi nội dung bởi: ngohaibac, 27-04-2006 lúc 08:32 AM.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn