c51独立按键控制数码管
时间: 2023-06-19 12:08:25 浏览: 169
C51单片机按键与数码管显示
下面是一个基于C51单片机的独立按键控制数码管的例子。
```
#include <reg51.h> //包含头文件
#define uchar unsigned char //宏定义uchar为unsigned char
sbit LSA=P2^2; //定义数码管连接的引脚,从左到右分别为LSA、LSB、LSC、DIO、CLK
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit DIO=P2^0;
sbit CLK=P2^1;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义显示0~9的编码
void delay(uchar i) //延时函数
{
uchar j,k;
for(j=i;j>0;j--)
{
for(k=110;k>0;k--);
}
}
void main()
{
uchar i=0,j=0,k=0; //定义三个计数器
while(1) //循环
{
if(P3!=0xff) //判断是否有按键按下
{
delay(5); //消除抖动
if(P3!=0xff) //再次判断是否有按键按下
{
switch(P3) //根据按键进行操作
{
case(0xfe): //第一个按键按下
i++; //计数器i加1
if(i>9) //当计数器i大于9时,i清零
{
i=0;
}
break;
case(0xfd): //第二个按键按下
j++; //计数器j加1
if(j>9) //当计数器j大于9时,j清零
{
j=0;
}
break;
case(0xfb): //第三个按键按下
k++; //计数器k加1
if(k>9) //当计数器k大于9时,k清零
{
k=0;
}
break;
default:
break;
}
}
}
LSA=0; //锁存器清零
LSB=0;
LSC=0;
P0=table[i]; //P0口输出i对应的编码值
delay(5); //延时
LSA=1; //锁存器锁存
P0=0x00; //P0口清零
LSA=0; //锁存器清零
LSB=1; //同上
P0=table[j];
delay(5);
LSB=0;
LSC=1; //同上
P0=table[k];
delay(5);
LSC=0;
}
}
```
在该程序中,我们将P2口的第2、3、4、0、1个引脚分别连接到数码管的LSA、LSB、LSC、DIO、CLK引脚上。在程序中通过一个计数器来控制数码管的显示,同时通过三个独立按键来分别对三个计数器进行操作,从而实现对数码管的控制。
阅读全文