栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯

实验内容:
利用所学的单片机知识及电路知识编程实现单片机 I/O 口检测按键输入电平。

        1.选中 8 位数码管的其中 1 位数码管,当独立按键 1 每按下一次,数码管加一(按下期间加 1),范围为 0—F;
        2.选中 8 位数码管的另 1 位数码管,当独立按键 2 每按下一次,数码管减一(松手之后减 1),范围为 F—0;
        3.按下独立按键 3 期间,流水灯以 600ms 的速度流动;
        4.按下独立按键 4,松手之后,8 个 LED 灯作一次花样循环。

按键一效果图:

按键二效果图

 

 按键三效果图:

按键四效果图:

 

 代码如下:

#include 
#include 
int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管编码
int mun=0;		//全局变量 ,代表当前数码管显示的段码
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
//按键检测是否按下,若按下着返回键码
int  key()
{   
    if(mun>14||mun<0)//判断数码是否超出显示范围
       mun=0; 
	while(1)
	{
		if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);return 4;}
		if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);return 3;}
		if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);return 2;}
		if(P3_1==0){Delay(500);mun++; return 1;}
	}	
}

void xianshi(int p)
{
	P2_2=1;P2_3=1;P2_4=1; //位选选中第第一位
	
	P0=table[p];            //段选,输出段码
}

void leddemo1(){//流水灯模式1
	int i;
    P0=0x00;
	for(i=0;i<8;i++){		
		P2=_crol_(0xfe,i);
		Delay(600);
		}
	P2=0xff;
}

void leddemo2(){	//流水灯模式2
     P0=0x00;
     P2=0x7e; Delay(600); 
     P2=0xbd; Delay(600);
     P2=0xdb; Delay(600);
     P2=0xe7; Delay(600);
     P2=0xc3; Delay(600);
     P2=0xb1; Delay(600);
     P2=0x00; Delay(600);
     P2=0x18; Delay(600);
     P2=0x3c; Delay(600);
     P2=0x7e; Delay(600);
     P2=0x00; Delay(600);
     P2=0xff; Delay(600);
     P2=0x00; Delay(600);
     P2=0xff; Delay(600);
     P2=0x00; Delay(600);
     P2=0xff; Delay(600);
     P2=0x00; Delay(600);
     P2=0x81; Delay(600);
     P2=0xc3; Delay(600);
     P2=0xe7; Delay(600);
     P2=0xff; Delay(600);		
}

void main()
{
    P0=0x00;
	while(1)
	{
		switch(key())
		{
			case 1: xianshi(mun); break;        
			case 2: xianshi(--mun); break;
			case 3: leddemo1(); break;
			case 4: leddemo2(); break;
		}
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号