实现计数器功能,要求如下1)P1.1模拟外部脉冲输入;
2)利用8个LED显示计数器中TL0的计数值(二进制);3)T0作为计数器;
4)P0口与数码管连接。
5)P1.1连接至T0引脚(P3.4)
#include <reg52.h> //包含reg52.h头文件
sbit LED1 = P0^0; //定义LED1连接到P0.0口
sbit LED2 = P0^1; //定义LED2连接到P0.1口
sbit LED3 = P0^2; //定义LED3连接到P0.2口
sbit LED4 = P0^3; //定义LED4连接到P0.3口
sbit LED5 = P0^4; //定义LED5连接到P0.4口
sbit LED6 = P0^5; //定义LED6连接到P0.5口
sbit LED7 = P0^6; //定义LED7连接到P0.6口
sbit LED8 = P0^7; //定义LED8连接到P0.7口
void main()
{
TMOD = 0x01; //设置T0为模式1
TH0 = 0xFC; //设置T0的初始值为0xFC
TL0 = 0x00; //清零T0的计数值
TR0 = 1; //启动T0计数器
while(1) //循环执行
{
if(TF0 == 1) //如果T0计数溢出
{
TF0 = 0; //清除T0溢出标志
LED1 = ~LED1; //LED1取反
if(LED1 == 1) //如果LED1为1
{
TL0 = 0x00; //清零T0的计数值
TH0 = 0xFC; //重新设置T0的初始值
}
else //如果LED1为0
{
if(TL0 == 0xFF) //如果T0计数值达到最大值
{
TL0 = 0x00; //清零T0的计数值
TH0++; //T0的高8位加1
}
else //如果T0计数值未达到最大值
{
TL0++; //T0的低8位加1
}
}
LED2 = TH0 & 0x01; //将T0的高8位的最低位赋值给LED2
LED3 = TH0 & 0x02; //将T0的高8位的次低位赋值给LED3
LED4 = TH0 & 0x04; //将T0的高8位的第3位赋值给LED4
LED5 = TH0 & 0x08; //将T0的高8位的第4位赋值给LED5
LED6 = TH0 & 0x10; //将T0的高8位的第5位赋值给LED6
LED7 = TH0 & 0x20; //将T0的高8位的第6位赋值给LED7
LED8 = TH0 & 0x40; //将T0的高8位的第7位赋值给LED8
}
}
}
以上代码实现了一个计数器功能,P1.1模拟外部脉冲输入,T0作为计数器,8个LED显示计数器中TL0的计数值(二进制),P0口与数码管连接,P1.1连接至T0引脚(P3.4)。在每次T0计数溢出时,LED1取反,如果LED1为1,就清零T0的计数值并重新设置T0的初始值,如果LED1为0,就将T0的计数值加1,并将T0的高8位的各位赋值给对应的LED。