7/31/2014

Mạch đo tốc độ động cơ dùng PIC 16F877a + led 7 thanh

Mạch đo tốc độ động cơ dùng PIC 16F877a + led 7 thanh


Code mã nguồn:
#include <16F877A.h>
#fuses HS, NOWDT, NOPROTECT, PUT, NOLVP
#use delay(clock=24000000)
#use fast_io(c)
#use fast_io(d)
static unsigned char digit[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
unsigned int8 DV, CHU, TRA, NGH, CHN, TRN, TRI;
unsigned int16 Count=0;
unsigned int32 TanSo, Temp=0;

void Hienthi(unsigned int32 Tanso)
{
  DV=Tanso%10;
  CHU=(Tanso%100)/10;
  TRA=(Tanso%1000)/100;
  NGH=(Tanso%10000)/1000;
  CHN=(Tanso%100000)/10000;
  TRN=(Tanso%1000000)/100000;
  TRI=Tanso/1000000;

  output_d(0xfe);
  output_c(digit[TRI]);
  delay_ms(1);

  output_d(0xfd);
  output_c(digit[TRN]);
  delay_ms(1);

  output_d(0xfb);
  output_c(digit[CHN]);
  delay_ms(1);

  output_d(0xf7);
  output_c(digit[NGH]);
  delay_ms(1);

  output_d(0xef);
  output_c(digit[TRA]);
  delay_ms(1);

  output_d(0xdf);
  output_c(digit[CHU]);
  delay_ms(1);

  output_d(0xbf);
  output_c(digitDiễn viA�n : );
  delay_ms(1);

  output_d(0xff);
  output_c(0xff);
  delay_ms(1);
}
#INT_EXT
void ngat_RB0()
{
  Temp++;
}
#INT_RTCC
void  ngat_timer0(void)
{
  set_timer0(2);
  Count++;
  if(Count==92)
  {
      disable_interrupts(GLOBAL);
      Tanso=Temp;
      Count=0;
      Temp=0;
      enable_interrupts(GLOBAL);
  }
}
void main()
{
  set_tris_b(0xff);
  set_tris_c(0x00);
  output_c(0xff);
  set_tris_d(0x00);
  output_d(0xff);
  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
  setup_adc_ports(no_analogs);
  set_timer0(2);
  enable_interrupts(INT_TIMER0);
  enable_interrupts(INT_EXT);
  ext_int_edge(H_to_L);
  enable_interrupts(GLOBAL);
  while(1)
  {
      Hienthi(Tanso);
  }
}

( Full code C)
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút  hiện ra ở góc phải phía trên, nhấn vào để đến trang download
Điện Tử | Tin Học - Chia sẻ kiến thức - Kết nối đam mê điện tử