View Single Post
Old 02-05-2006, 01:42 AM   #9
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
Timer1 đếm xung hiển thị 4 Led7 đoạn

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.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn