51单片机练习:独立键盘篇

51单片机数码管数值控制编程实践
该博客围绕51单片机编程展开,题目要求用数码管前两位显示00 - 59的十进制数,通过按键实现数值的加减、归零及自动加1等操作。给出了初始化、延时、按键、显示等函数代码,并分享了按键消抖、数码管显示衔接、定时器控制等编程心得。

题目:

用数码管的前两位显示一个十进制数,变化范围为00~59,开始时显示00,每按下S2键一次,数值加1;每按下S3键一次,数值减1;每按下S4键一次,数值归零;按下S5键一次,利用定时器功能使数值开始自动每秒加1,再次按下S5键,数值停止自动加1,保持显示原数。(来自郭天祥老师的51单片机练习)

代码:

初始化函数:

void Init()
{
	LE = 0;//锁住led灯,防止实验过程中灯亮
	
	WLE = 1;//打开位选
	P0 = 0xfc;
	WLE = 0;//关闭位选
	P0 = 0xff;//消影
	DLE = 1;//打开段选
	P0 = Table[0];
	DLE = 0;//关闭段选
	delay_1ms(10);
	
	TMOD = 0x01;//定时器工作类型
	TH0 = (65536 - 45872) / 256;//50ms
	TL0 = (65536 - 45872) % 256;
	EA = 1;//总中断
	ET0 = 1;//T0中断
	TR0 = 0;//开启T0
	
	num = 0;
	tt = 0;
}

1ms延时函数:

//延时1ms函数
void delay_1ms(uint z)
{
	uint x,y;
	for(x = z;x > 0;x--)
	{
		for(y =110;y > 0;y--){}
	}
}

四个独立按键函数:

//按键2函数
void Switch2()
{
	while(SW2 == 0)
	{
		delay_1ms(10);//消抖
		if(SW2 == 0)
		{
			num++;//加1
		}
		while(SW2 == 0);//等待按键释放
	}
}

//按键3函数
void Switch3()
{
	while(SW3 == 0)
	{
		delay_1ms(10);//消抖
		if(S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值