6.独立按键与静态数码管

第一个数码管显示1:

#include<STC15F2K60S2.H>
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;   //数码管初始化程序,打开第一个数码管
	P0=0XF9;
	while(1);
}

数码管正计时程序:
赋值一次延时一次

#include<STC15F2K60S2.H>
void Delayms(int ms);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;   //数码管初始化程序,打开第一个数码管
	while(1)
	{
		P0=0XC0;				//0
		Delayms(1000);
		P0=0XF9;				//1
		Delayms(1000);
		P0=0XA4;				//2
		Delayms(1000);
		P0=0XB0;				//3
		Delayms(1000);
		P0=0X99;				//4
		Delayms(1000);
		P0=0X92;				//5
		Delayms(1000);
		P0=0X82;				//6
		Delayms(1000);
		P0=0XF8;				//7
		Delayms(1000);
		P0=0X80;				//8
		Delayms(1000);
		P0=0X90;				//9
		Delayms(1000);
	}
}
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

独立按键控制数码管显示:
每个独立按键对应一个数码管值

#include<STC15F2K60S2.H>
void Delayms(int ms);
void KEY_Scan(void);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;   //数码管初始化程序,打开第一个数码管
	while(1)
	{
		KEY_Scan();
	}
}
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}
void KEY_Scan(void)
{
	if(P30==0)				//按下按键s7,显示1
	{
		Delayms(5);
		if(P30==0)
		{
			P0=0XF9;
		}
		while(!P30);
	}
	else if(P31==0)				//按下按键s6,显示2
	{
		Delayms(5);
		if(P31==0)
		{
			P0=0XA4;
		}
		while(!P31);
	}
	else if(P32==0)				//按下按键s5,显示3
	{
		Delayms(5);
		if(P32==0)
		{
			P0=0XB0;
		}
		while(!P32);
	}
	else if(P33==0)				//按下按键s4,显示4
	{
		Delayms(5);
		if(P33==0)
		{
			P0=0X99;
		}
		while(!P33);
	}
}

要想使数码管依次显示不同的值,需每次赋值P0,很不方便,故定义一个数组来保存需要的值
按键控制数码管 数码管用数组进行操作
将数码管的值存入数组tab[]中,每一个按键对应数组不同值

#include<STC15F2K60S2.H>
unsigned char tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};//定义一个数组,保存数码管显示所需的P0值
void Delayms(int ms);
void KEY_Scan(void);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;   //数码管初始化程序,打开第一个数码管
	while(1)
	{
		KEY_Scan();
	}
}
void KEY_Scan(void)
{
	if(P30==0)				//按下按键s7,显示1
	{
		Delayms(5);
		if(P30==0)
		{
			P0=tab[1];
		}
		while(!P30);
	}
	else if(P31==0)				//按下按键s6,显示2
	{
		Delayms(5);
		if(P31==0)
		{
			P0=tab[2];
		}
		while(!P31);
	}
	else if(P32==0)				//按下按键s5,显示3
	{
		Delayms(5);
		if(P32==0)
		{
			P0=tab[3];
		}
		while(!P32);
	}
	else if(P33==0)				//按下按键s4,显示4
	{
		Delayms(5);
		if(P33==0)
		{
			P0=tab[4];
		}
		while(!P33);
	}
}
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

数码管正计时程序 数组控制
用num指代数组中第几个值,将数组中的值赋值给P0口,赋值一次延时一次

#include<STC15F2K60S2.H>
unsigned char tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};//定义一个数组,保存数码管显示所需的P0值
unsigned char num=0;
void Delayms(int ms);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;   //数码管初始化程序,打开第1个数码管,其中P0=0X01控制哪些数码管显示
	while(1)
	{
		P0=tab[num];
		Delayms(1000);
		num++;
		if(num==10)num=0;
	}
}
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

由上可以发现,使用数组将带来很大便利。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值