写基于STC90C5xAD单片机的程序,它使用了定时器0和外部按键来控制定时器的计数值。程序中的Timer0Init函数用来初始化定时器0的工作模式和计数值,Delay函数用来实现简单的延时功能,key函数用来检测外部按键状态并返回按键编号,main函数中不断循环检测按键状态并根据按键编号修改计数器的值,Timer0_countine函数则是定时器0的中断处理函数,每隔一段时间就会执行一次,根据计数器的值来控制LED的闪烁频率。
时间: 2024-03-03 20:52:01 浏览: 15
好的,下面是基于STC90C5xAD单片机的程序,实现了使用定时器0和外部按键来控制定时器的计数值,同时根据计数器的值来控制LED的闪烁频率:
```
#include <STC90C5xAD.H>
unsigned int t;
unsigned char keynum;
void Timer0Init(void)
{
t=2000;
AUXR &= 0x7F;
TMOD &= 0xF0;
TMOD |= 0x01;
TL0 = (65536-t)%256;
TH0 = (65536-t)/256;
TF0 = 0;
TR0 = 1;
EA=1;
ET0=1;
PT0=1;
}
void Delay(unsigned int xms)
{
while(xms--)
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
}
while (--i);
}
}
unsigned char key()
{
unsigned char keynumber=0;
if(P20==0)
{
Delay(20);
while(P20==0);
Delay(20);
keynumber=1;
}
if(P21==0)
{
Delay(20);
while(P21==0);
Delay(20);
keynumber=2;
}
if(P22==0)
{
Delay(20);
while(P22==0);
Delay(20);
keynumber=3;
}
if(P23==0)
{
Delay(20);
while(P23==0);
Delay(20);
keynumber=4;
}
return keynumber;
}
void main()
{
Timer0Init();
while(1)
{
keynum=key();
if(keynum)
{
if(keynum==1)
{
t+=200;
}
if(keynum==2)
{
t-=200;
}
}
}
}
void Timer0_countine() interrupt 1
{
static unsigned int T0count;
TL0 = (65536-t)%256;
TH0 = (65536-t)/256;
T0count++;
if(T0count>=500)
{
T0count=0;
P00=~P00;
if(keynum==1)
{
t+=200;
}
if(keynum==2)
{
t-=100;
}
}
}
```
这个程序的功能是:通过按键修改定时器计数值,然后根据计数器的值来控制LED的闪烁频率,其中使用了定时器0的中断函数来定时执行闪烁操作。