/**利用计数器0工作方式1,在实验板上实现如下描述:用一根杜邦线
***一段连接GND引脚,另一端去接触T0(P3.4)引脚,每接触一下,计
***数器计一次数,将所计的数值实时显示在数码管的前两位,计满100
***时清0,再从头计起。
***根据原理图确定T0的引脚是多少,这里是P3.4
**/
#include <reg52.h>
typedef unsigned char uchar; //重命名
sbit dula = P2^6; //声明U1锁存器的锁存端
sbit wela = P2^7; //声明U2锁存器的锁存端
uchar num;
uchar code table[]={ //数码管编码列表
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71};
void init(void);
void delayms(uchar ms);
void regDisp(uchar num);
void delayms(uchar ms) //简略毫秒级延时
{
uchar i, j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--)
;
}
void regDisp(uchar num) //数码管显示
{
dula = 1;
P0 = table[num/10];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0x7e;
wela = 0;
delayms(10);
dula = 1;
P0 = table[num%10];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0x7d;
wela = 0;
delayms(10);
}
void init() //计数器参数初始化
{
TMOD = 0x05; //计数器工作模式寄存器0000 0101
TH0 = 0xff; //装载初值,每加一次数值,中断一次
TL0 = 0xfd;
TCON = 0x10; //计数器控制寄存器0001 0000
IE = 0x82; //中断允许寄存器1000 0010
}
void main()
{
init();
while(1)
{
regDisp(num);
}
}
void T0_count() interrupt 1
{
TH0 = 0xff; //重新装载初值,每加一次数值,中断一次
TL0 = 0xf6;
num++;
if(num==100) num = 0;
}
【单片机】计数器0工作方式1
最新推荐文章于 2022-06-07 16:36:47 发布