计数原理:当P3^4或P3^5检测到外部完整的脉冲计数器会对其自身的TL加一。
代码部分:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s1=P3^0;
sbit s2=P3^1;
code uchar a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字模型
void delay(uint t)
{
uint i;
while(t--)
{
for(i=125;i>0;i--);
}
}
void show()
{
P2=a[TL0/10];s1=1;delay(1);s1=0;
P2=a[TL0%10];s2=1;delay(1);s2=0;
}
void main()
{
TMOD=0x05; //设置锁存器工作模式为计数模式
TH0=0;
TL0=0;
TR0=1; //开始启用定时器
while(1)
{
show();
}
}
仿真:
外部中断和定时器都有对应的引脚。在定时器0的引脚就是3.4脚,也就是当3.4脚检测到脉冲时候就会自动对HL0加一。
关键代码解释:
void show()
{
P2=a[TL0/10];s1=1;delay(1);s1=0;
P2=a[TL0%10];s2=1;delay(1);s2=0;
}
这里面是对TL0进行运算做参,因为在按下按键时候会产生脉冲TL0就会加一。在此不考虑范围问题,bug请自动忽略。
与之前写的(8951定时器的定时中断模式)做好区分,这里作计数器没有设置中断(可以设置的)。