写一段C语言实现80c51一个共阳数码管依次显示储存的一串数字,按下独立按键切换下一位
时间: 2023-06-03 11:05:30 浏览: 42
以下是 C 语言代码:
```
#include <reg51.h>
// 数码管段选控制字
unsigned char display[10] = {
0xc0, // 0
0xf9, // 1
0xa4, // 2
0xb0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xf8, // 7
0x80, // 8
0x90 // 9
};
// 独立按键检测
void keyScan()
{
P3 = 0xfe;
if (P3 != 0xfe) {
while (P3 != 0xfe); // 等待键松开
P1++;
if (P1 > 9) {
P1 = 0;
}
}
}
void main()
{
unsigned char i = 0;
P1 = 0;
while (1) {
P0 = display[P1]; // 显示数字
for (i = 0; i < 100; i++); // 等待
keyScan(); // 独立按键切换下一位
}
}
```
此程序实现的功能是通过 P0 口驱动共阳数码管,每隔一段时间显示 P1 变量中存储的数字,按下独立按键 P3.0 切换到下一个数字。
相关问题
写一段C语言实现80c51一个数码管依次显示储存的一串数字,按下独立按键切换下一位
好的,以下是实现该功能的C语言代码:
```
#include <reg51.h>
#define LED P0 // 定义P0口为数码管显示口
sbit KEY = P1^0; // 定义P1.0为独立按键
unsigned char num[] = {1, 2, 3, 4, 5, 6}; // 定义要显示的数字序列
unsigned char index = 0; // 定义当前显示的数字在num数组中的下标
void delay(int t) // 自定义延时函数
{
int i, j;
for(i = 0; i < t; i++)
for(j = 0; j < 120; j++);
}
void main()
{
while(1)
{
LED = num[index]; // 显示当前数字
delay(50); // 延时50ms
if(KEY == 0) // 检测独立按键是否按下
{
while(!KEY); // 等待按键松开
index++; // 切换下一个数字
if(index >= sizeof(num)) // 判断是否已经显示完所有数字
index = 0; // 回到起点继续循环显示
}
}
}
```
这段代码实现了80c51单片机上一个数码管依次显示储存的一串数字,并可以按下独立按键切换下一个数字。
写一段C语言实现80c51独立按键控制一个数码管依次显示储存的一串数字
好的,以下是C语言代码,实现80c51独立按键控制一个数码管依次显示储存的一串数字:
```c
#include <REG52.H> // 导入预处理器-51单片机头文件
#define uint unsigned int
#define uchar unsigned char
// 数码管位选定义,pin1~pin4分别对应数码管的4个段
sbit pin1 = P2^4;
sbit pin2 = P2^5;
sbit pin3 = P2^6;
sbit pin4 = P2^7;
// 储存数字的数组,可以修改为任意数字组合
uchar dataFlash[] = {1, 2, 3, 4, 5, 6, 7, 8};
void display(uchar num) { // 显示函数
if (num == 0) { // 数字0的显示
pin1 = 0;
pin2 = 0;
pin3 = 0;
pin4 = 0;
} else if (num == 1) { // 数字1的显示
pin1 = 1;
pin2 = 0;
pin3 = 0;
pin4 = 0;
} else if (num == 2) { // 数字2的显示
pin1 = 0;
pin2 = 1;
pin3 = 0;
pin4 = 0;
} else if (num == 3) { // 数字3的显示
pin1 = 1;
pin2 = 1;
pin3 = 0;
pin4 = 0;
} else if (num == 4) { // 数字4的显示
pin1 = 0;
pin2 = 0;
pin3 = 1;
pin4 = 0;
} else if (num == 5) { // 数字5的显示
pin1 = 1;
pin2 = 0;
pin3 = 1;
pin4 = 0;
} else if (num == 6) { // 数字6的显示
pin1 = 0;
pin2 = 1;
pin3 = 1;
pin4 = 0;
} else if (num == 7) { // 数字7的显示
pin1 = 1;
pin2 = 1;
pin3 = 1;
pin4 = 0;
} else if (num == 8) { // 数字8的显示
pin1 = 0;
pin2 = 0;
pin3 = 0;
pin4 = 1;
} else if (num == 9) { // 数字9的显示
pin1 = 1;
pin2 = 0;
pin3 = 0;
pin4 = 1;
}
}
void main() {
uchar i = 0; // 数字索引初始化为0
while (1) { // 程序开始循环
if (P1 == 0x01) { // 确认按键按下
while (P1 == 0x01); // 等待按键松开
i++; // 数字索引加1
if (i == 8) { // 如果索引达到了数组元素个数
i = 0; // 索引回到第一个元素
}
}
display(dataFlash[i]); // 显示当前索引对应的数字
}
}
```