程序一:/********************************************************************
** 描述 : 按下相应的独立按键,会在数码管上显示相应的左右中
按S19显示左
按S18显示中
按S17显示右
************************************************************************/
#include <reg52.H>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit KEY1 = P3^2;
sbit KEY2 = P3^3;
sbit KEY3 = P3^4;
unsigned char code tabP2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
//中 的编
unsigned char code tabP0ZHONG[]={0x00,0x3C,0x24,0x24,0xFF,0x24,0x24,0x3C};
//“左”的
unsigned char code tabP0Z[]={0x00,0x94,0x94,0xF4,0x9F,0x94,0x24,0x44};
//“右”的
unsigned char code tabP0Y[]={0x00,0xF4,0x94,0x94,0x9F,0xF4,0x24,0x44};
***********************************************************************/
void Delay_1ms(uchar i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/***********************************************************************/
uchar KEY(void)
{
if(KEY1==0 || KEY2==0 || KEY3==0)
{
Delay_1ms(20); //20毫秒软件防抖
if(KEY1 == 0)
{
Delay_1ms(100); //延时0.1秒再进行下次按键的检测
return 1;
}
if(KEY2 == 0)
{
Delay_1ms(100); //延时0.1秒再进行下次按键的检测
return 2;
}
if(KEY3 == 0)
{
Delay_1ms(100); //延时0.1秒再进行下次按键的检测
return 3;
}
return 0;
}
return 0;
}
/***********************************************************************/
void main()
{
int i,temp,flag;
while(1)
{
temp = KEY();
if(temp != 0) //这里判断是否按键按下,按下后,才改变要显示的值
{
flag = temp; //存标志
}
for(i=0;i<8;i++)
{
P0=0;
P2=tabP2[i];
if(flag == 1)
{
P0=tabP0Z[i]; //显示“左”
}
if(flag == 2)
{
P0=tabP0ZHONG[i]; //显示 中
}
if(flag == 3)
{
P0=tabP0Y[i]; //显示“右”
}
Delay_1ms(2);
}
}
}
程序二:
//本实验的目的是点阵上可以显示1,2,3
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit KEY1=P3^2;
sbit KEY2=P3^3;
sbit KEY3=P3^4;
uchar table[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
uchar table1[]={0x00,0x00,0x00,0x80,0xFE,0x84,0x00,0x00};//显示1
uchar table2[]={0x00,0x00,0x00,0xDE,0x92,0xF2,0x00,0x00};//显示2
uchar table3[]={0x00,0x00,0x7F,0x49,0x49,0x00,0x00,0x00};//显示3
void delay(uint del)
{
uint i,j;
for(i=0;i<del;i++)
for(j=0;j<=148;j++);
}
void main()
{ uint a;
while(1)
{
if(KEY1==0)
{
delay(100);
for(a=0;a<8;a++)
{
P0=0;
P2=table[a];
P0=table1[a];
delay(2);
}
}
if(KEY2==0)
{
delay(100);
for(a=0;a<8;a++)
{ P0=0;
P2=table[a];
P0=table2[a];
delay(2);
}
}
if(KEY3==0)
{
delay(100);
for(a=0;a<8;a++)
{ P0=0;
P2=table[a];
P0=table3[a];
delay(2);
}
}
}
}
第一个程序中,分别按下独立按键,点阵上就显示左,中,右,而且独立按键不用一直按。
第二个程序中,独立按键必须要一直按着才可以,点阵上分别显示1,2,3
请问大家怎样修改第二个程序才可以不用一直按着按键,点阵上就可以显示1,2,3。谢谢了。