FND 4 개로 앞 2자리는 다운 카운터로,뒷2자리는 업 카운터로

2007. 8. 30. 20:13350. 전자 실험자료

오랫동안 ㄲ ㅡ  ㅇ 하다가 드디어 프로그램이 완성 됐다.

 

#include <at89x51.h>
unsigned int cnt=0,ntc=100;
unsigned char disp3,disp2,disp1,disp0;
code unsigned char font[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
                                           0x82,0xf8,0x80,0x90};
void delay (unsigned int i)
{
while(i--);
}
void count(void)
{
  unsigned int temp,empt;  //CNT 값을 받아 임시저장
  cnt++;
 ntc--;

 if(cnt>99)
   cnt=0;
 if(ntc<1)
              ntc=99;

 disp3 = ntc/ 10;
 empt  = ntc % 10;   
 disp2 = empt;
 
 disp1 = cnt / 10;
    temp = cnt % 10;
 disp0 = temp;

}
void fnd_dsp(void)
{
 
 P1=0xfe;
 P0=font[disp0];
 delay(5000);

 

 P1=0xfd;
 P0=font[disp1];
 delay(5000);


 P1=0xfb;
 P0=font[disp2];
 delay(5000);

 

 P1=0xf7;
 P0=font[disp3];
 delay(5000);

 

 P0=0xff;
}
void main(void)
{
 while(1)
  {
   count();
   
   fnd_dsp();
  } 
}

 

업 카운트 측은 cnt , temp 라 이름 했고

다운 카운트 측은 ntc ,empt 라고 서로 구별 해두었다.

 

FND 는 애노드 커먼형 이어서 숫자 1 을 표시 하려면  font 에 0xf9 를 출력 해주어야 fnd 의 b, c 가 0 즉 GND 전위가 되어 불이 켜이게 되는 것이다.