【单片机】计数器0工作方式1

/**利用计数器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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值