在CD107D这块板子上要测量NE555产生的频率,需要将板子右侧的SIGNAL脚与P34短接。
通过调节Rb3改变ne555的频率。
定时器 | 模式 |
定时器0 | 计数 |
定时器1 | 定时 |
将定时器0设置为计数器,定时器1设置为定时器
void Timer0_Init()
{
TMOD |=0X05; //设置为计数器,16位全用模式
TH0 = 0;
TL0 = 0;
EA = 1;
ET0 = 1;
TR0 = 1;
TF0 = 0 ;
}
void Timer1_Init()
{
TMOD |= 0X10;
TL1 = (65535-1000)%256;
TH1 = (65535-1000)/256;
EA = 1;
ET1 = 1;
TR1 = 1;
}
void Time1() interrupt 3
{
static uint tmr1s = 0;
TL1 = (65535-1000)%256;
TH1 = (65535-1000)/256;
LedScan();
tmr1s++;
if(tmr1s == 200)
{
count=(TH0*256+TL0)*5;
tmr1s = 0;
TH0 = 0;
TL0 = 0;
}
}
频率=
从0开始计数器开始计数,记到0.2s时所累积的次数*5即是频率,所以将计数器的TH1*256+TL1赋值给count。
数码管显示函数
void display()
{
uchar i;
dis[0]=0x8e; //显示F
dis[1]=0xff; //显示0
dis[2]=LedChar[count/100000%10];
dis[3]=LedChar[count/10000%10];
dis[4]=LedChar[count/1000%10];
dis[5]=LedChar[count/100%10];
dis[6]=LedChar[count/10%10];
dis[7]=LedChar[count%10];
for(i=2;dis[i]==LedChar[0];i++) //如果计算结果有0则不显示
dis[i]=0xff;
for(i=0;i<8;i++){
P2&=0x1f;
P0=1<<i;
P2|=0xc0;
P2&=0x1f;
P0=dis[i];
P2|=0xe0;
Delay100us();
P0=0xff;
}
P2&=0x1f;
}
主函数
void main (void)
{
Timer0_Init();
Timer1_Init();
cls_buzz();
P2 = 0x80;
P0 = 0xff;
while(1)
{
display();
}
}
void cls_buzz(void)
{
P2 = 0xa0;
P0 = 0x00;
}