51单片机(二十六)—— 独立按键数码管显示

        在这片文章中,我们对独立按键的使用进行进一步研究,用数码管来显示按键的状态。这个实验的主要代码如下所示。

main()
{
    for(n=0;n<8;n++)    //给showdata数组赋初值
        showdata[n]=0;
    KEY1=1;
    KEY2=1;
    KEY3=1;
    KEY4=1;
    KEY5=1;
    KEY6=1;
    KEY7=1;
    KEY8=1;

    init_T0();
	for(;;)
    {
		if(KEY1==0)		//按键KEY1按下
		{
			delay1ms(10);  //延时10ms去抖
			if(KEY1==0)      //再次判断按键KEY1按下
			{
 			    for(n=0;n<7;n++)
                    showdata[n]=showdata[n+1]; //显示的内容向前移一位
                showdata[7]=BJTY_DuanMa[1];   //赋值需要显示的数据
            }  
			while(KEY1==0);  //等待按键松开 
		}
	
		if(KEY2==0)		//按键KEY2按下
		{
			delay1ms(10);  //延时10ms去抖
			if(KEY2==0)      //再次判断按键KEY2按下
			{
 			    for(n=0;n<7;n++)
                    showdata[n]=showdata[n+1]; //显示的内容向前移一位
                showdata[7]=BJTY_DuanMa[2];   //赋值需要显示的数据
            }  
			while(KEY2==0);  //等待按键松开 
		}

		if(KEY3==0)		//按键KEY3按下
		{
			delay1ms(10);  //延时10ms去抖
			if(KEY3==0)      //再次判断按键KEY3按下
			{
 			    for(n=0;n<7;n++)
                    showdata[n]=showdata[n+1]; //显示的内容向前移一位
                showdata[7]=BJTY_DuanMa[3];   //赋值需要显示的数据
            }  
			while(KEY3==0);  //等待按键松开 
		}

		if(KEY4==0)		//按键KEY4按下
		{
			delay1ms(10);  //延时10ms去抖
			if(KEY4==0)      //再次判断按键KEY4按下
			{
 			    for(n=0;n<7;n++)
                    showdata[n]=showdata[n+1]; //显示的内容向前移一位
                showdata[7]=BJTY_DuanMa[4];   //赋值需要显示的数据
            }  
			while(KEY4==0);  //等待按键松开 
		}

		if(KEY5==0)		//按键KEY5按下
		{
			delay1ms(10);  //延时10ms去抖
			if(KEY5==0)      //再次判断按键KEY5按下
			{
 			    for(n=0;n<7;n++)
                    showdata[n]=showdata[n+1]; //显示的内容向前移一位
                showdata[7]=BJTY_DuanMa[5];   //赋值需要显示的数据
            }  
			while(KEY5==0);  //等待按键松开 
		}

		if(KEY6==0)		//按键KEY6按下
		{
			delay1ms(10);  //延时10ms去抖
			if(KEY6==0)      //再次判断按键KEY6按下
			{
 			    for(n=0;n<7;n++)
                    showdata[n]=showdata[n+1]; //显示的内容向前移一位
                showdata[7]=BJTY_DuanMa[6];   //赋值需要显示的数据
            }  
			while(KEY6==0);  //等待按键松开 
		}

		if(KEY7==0)		//按键KEY7按下
		{
			delay1ms(10);  //延时10ms去抖
			if(KEY7==0)      //再次判断按键KEY7按下
			{
 			    for(n=0;n<7;n++)
                    showdata[n]=showdata[n+1]; //显示的内容向前移一位
                showdata[7]=BJTY_DuanMa[7];   //赋值需要显示的数据
            }  
			while(KEY7==0);  //等待按键松开 
		}

		if(KEY8==0)		//按键KEY8按下
		{
			delay1ms(10);  //延时10ms去抖
			if(KEY8==0)      //再次判断按键KEY8按下
			{
 			    for(n=0;n<7;n++)
                    showdata[n]=showdata[n+1]; //显示的内容向前移一位
                showdata[7]=BJTY_DuanMa[8];   //赋值需要显示的数据
            }  
			while(KEY8==0);  //等待按键松开 
		}

    }

}

在这个程序的主函数中,首先将数码管显示的内容清零。然后将KEY1~KEY8全部置1,作用是将相应IO口的上拉电阻使能。之后初始化T0,T0的作用是设置一个中断,在中断函数中进行数码管扫描。接下来进入for循环。在for循环中,依次读取KEY1~KEY8的值,如果有按键的值为0,则进行滤波处理,确认按键按下之后,将数码管显示的内容向前一位,并在数码管的最后一位显示按下的按键值。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值