|
#ifndef INCLUDE_H
#define INCLUDE_H
#include "AT89X51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define _BV(x) (i<<(x))
#define GET_BIT(x,y) (((x)&(1<<(y)))==0?0:1)
#define SET_BIT(x,y) ((x)|=(0x0001<<(y)))
#define CLR_BIT(x,y) ((x)&=~(0x0001<<(y)))
#define LET_BIT(x,y,z) ((x)=(x)&(~(0x0001<<(y)))|(z)<<(y))
#define F_CPU 11059200UL
#define sei() (EA=1)
#define cli() (EA=0)
#endif
#include "target.h"
#include "led.h"
uchar displayBuff[4]={'0','0','0','0'};
const uchar displayMode=0x00;
void main()
{
uint get_fre;
target_init();
init_led();
sei();
while()
{
get_fre=get_fre_number();
if(get_fre/1000<0x0A)
{
displayBuff[0]=get_fre/1000+'0';
}
displayBuff[1]=(get_fre/100)%10+'0';
displayBuff[2]=(get_fre%100)/10+'0';
displayBuff[3]=get_fre%10+'0';
ledSweepDisplay(displayBuff,displayMode,0x04);
}
}
#include "Include.h"
#ifndef LED_H
#define LED_H 1
#ifndef LED_GLOBAL
#define LED_EXT extern
#else
#define LED_EXT
#endif
#define LED P0
sbit LED_CS1=P2^0;
sbit LED_CS2=P2^1;
sbit LED_CS3=P2^2;
sbit LED_CS4=P2^3;
enum SEG_DISPLAY_MOD{DIGTAL=0x00,CHARACTER=0x01};
#ifdef LED_GLOBAL
uchar segLedCode[10]={0x7e,0x06,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x73};
#endif
LED_EXT void init_led(void);
LED_EXT void ledWrite(uchar c,uchar n,uchar mod);
LED_EXT void ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber);
#endif
#define LED_GLOBAL 1
#include "led.h"
void delay_us(uint us)
{
uint i;
while(us--)
{
for(i=0;i<100;i++);
}
}
void init_led(void)
{
LED=segLedCode[0];
LED_CS1=0;
LED_CS2=0;
LED_CS3=0;
LED_CS4=0;
}
void ledWrite(uchar c,uchar n,uchar mod)
{
if(CHARACTER==mod)
{
LED=c;
}
else if(DIGITAL==mod)
{
if((c-'0')<0x0a)
{
LED=segLedCode[c-'0'];
}
else
{
LED=segLedCode[0];
}
}
switch(n)
{
case 0x01:
{
LED_CS1=0;
delay_us(10);
LED_CS1=1;
break;
}
case 0x02:
{
LED_CS2=0;
delay_us(10);
LED_CS2=1;
break;
}
case 0x03:
{
LED_CS3=0;
delay_us(10);
LED_CS3=1;
break;
}
case 0x04:
{
LED_CS4=0;
delay_us(10);
LED_CS4=1;
break;
}
default:
break;
}
}
void ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
{
uchar segCount;
for(segCount=0;segCount<segNumber;segCount++)
{
if(segCodeMod&0x01)
{
ledWrite(segCode[segCount],segCount+1,CHARACTER);
}
else
{
ledWrite(segCode[segCount],segCount+1,DIGITAL);
}
segCodeMod=segCodeMod>>1;
}
}
#ifndef TARGET_H
#define TARGET_H 1
#include "Include.h"
#ifndef TARGET_GLOBAL
#define TARGET_EXT extern
#else
#define TARGET_EXT
#endif
TARGET_EXT void timer0_init(void);
TARGET_EXT void int0_init(void);
TARGET_EXT void target_init(void);
TARGET_EXT uint get_fre_number(void);
#endif
#define TARGET_GLOBAL 1
#include "target.h"
uint timer0count;
uint pulseCount;
uint pulseCountTemp;
void timer0_init(void)
{
TMOD|=0x01;
TH0=0xFC;
TL0-0x18;
ET0=1;
IP=0x02;
TR0=1;
}
void int0_init(void)
{
EX0=1;
IT0=1;
}
void target_init(void)
{
timer0_init();
int0_init();
timer0Count=0;
pulseCount=0;
pulseCountTemp=0;
}
void T0_overflow(void) interrupt 1
{
TH0=0xFC;
TL0=0x18;
cli();
if(timer0Count<1000)
timer0Count++;
else
{
pulseCountTemp=pulseCount-pulseCount/(uint)36;
pulseCount=0;
timer0Count=0;
}
sei();
}
void int0(void) interrupt 0
{
pulseCount++;
}
uint get_fre_number(void)
{
return pulseCountTemp;
}
|
|