...要求使用定时器T0中断实现流水灯操作流水频率为每0.5秒钟更替一次_百...
发布网友
发布时间:2023-12-24 01:10
我来回答
共1个回答
热心网友
时间:2024-08-09 22:55
你问题标题和描述不一致。上面写T0下面写T1。
我按照T1中断写。关于P0口流水,可以用数组,也可以用位移,还可以用内部函数。
我这边用数组的方法写。
#include <reg52.h>
#define uInt unsigned int
#define uChar unsigned char
#define TFCNT 46080//经计算,11.0592MHZ,0.05秒需要计数次数
uInt timeCnt=0;
void init();
void main()
{
uChar leds[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe},*p=leds;
init();
while(1)
{
if(timeCnt>=10)
{
timeCnt=0;
P0=*p;
if(p==&leds[7])
p=leds;
else
p++;
}
}
}
void init()
{
TMOD=0x10;//设置T1定时器16位模式
TH1=(65536-TFCNT)/256;
TL1=(65536-TFCNT)%256;
EA=1;
ET1=1;
TR1=1;
}
void t1Intt() interrupt 3
{
TH1=(65536-TFCNT)/256;
TL1=(65536-TFCNT)%256;
timeCnt++;
}