基于51单片机的keil软件编程,有一个四位的共阳数码管 字选端P3,位选端p0.0-p0.3,有五个按键,p1.3-p1.7 要求是,按一个按键,数值左移一位,比如按第一个按键,数码管显示1,第二个按键按下 显示12 第三个123 以此类推
时间: 2024-03-01 11:50:35 浏览: 85
好的,这是一个比较典型的数字按键输入和数码管显示的程序,我可以给您提供一个基本的程序框架,您可以在此基础上进行编程:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit LSA = P0^0;
sbit LSB = P0^1;
sbit LSC = P0^2;
uchar code num[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; //数码管显示0-9的编码
uchar display[4]; //数码管显示的4个数字,分别对应4个位选端口
uchar index = 0; //当前显示的位
uchar key = 0; //按键输入的数字
void delay(uint x) //延时函数
{
uint i, j;
for (i = x; i > 0; i--)
for (j = 110; j > 0; j--);
}
uchar getKey() //获取按键输入的数字
{
if (!P10) return 1;
if (!P11) return 2;
if (!P12) return 3;
if (!P13) return 4;
if (!P14) return 5;
return 0; //没有按键按下
}
void displayNumber() //数码管显示函数
{
uchar i;
for (i = 0; i < 4; i++)
{
switch (i)
{
case 0:
LSA = 0; LSB = 0; LSC = 0; break;
case 1:
LSA = 1; LSB = 0; LSC = 0; break;
case 2:
LSA = 0; LSB = 1; LSC = 0; break;
case 3:
LSA = 1; LSB = 1; LSC = 0; break;
default:
break;
}
P3 = display[i]; //将数字编码输出到字选端口
delay(1); //延时一段时间,让人眼看到
P3 = 0x00; //关闭数码管
}
}
void main()
{
while (1)
{
key = getKey(); //获取按键输入的数字
if (key > 0 && index < 4) //如果有按键按下,并且未达到4位数
{
display[index++] = num[key]; //将按键输入的数字编码存储到显示数组中
}
displayNumber(); //数码管显示函数
delay(500); //延时一段时间,降低刷新频率
if (index == 4) index = 0; //如果已经达到4位数,从头开始
}
}
```
这是一个比较简单的程序,实现了按键输入和数码管显示。您可以根据具体需求进行修改和扩展。
阅读全文