编写一段c语言实现80c51单片机1. 数码管动态扫描显示自己的学号; 2,使得数码管实时显示最近的8个按键值 2.加入判断按键的实验,自定义键盘功能,如设计#1按键功能为实 现学号向左移动一位;2#按键功能为向右移动一位;3#按键功能为闪烁 等等,
时间: 2023-06-05 16:04:17 浏览: 152
基于51单片机的c语言程序 数码管+键盘
3星 · 编辑精心推荐
1. 实现80c51单片机数码管动态扫描显示学号的C语言代码:
```c
#include <reg51.h>
#define DIGITS P0 // 数码管控制端口
void delay(int ms) // 延时函数
{
int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 200; j++);
}
void displayNumber(int num) // 数码管显示数字函数
{
const char SEGMENT_TABLE[] = // 数码管段码表
{
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90
};
DIGITS = SEGMENT_TABLE[num / 10]; // 显示十位数字
delay(5); // 显示持续5ms
DIGITS = SEGMENT_TABLE[num % 10]; // 显示个位数字
delay(5); // 显示持续5ms
}
void main()
{
const int studentID = 123456; // 学号
int i;
while (1) // 循环显示学号数字
{
for (i = 0; i < 6; i++)
{
displayNumber((studentID / (int)pow(10, i)) % 10);
DIGITS = 0xff; // 关闭所有数码管
}
}
}
```
2. 实现80c51单片机实时显示最近的8个按键值的C语言代码:
```c
#include <reg51.h>
#define DIGITS P0 // 数码管控制端口
#define KEYS P1 // 按键输入端口
void delay(int ms) // 延时函数
{
int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 200; j++);
}
void displayNumber(int num) // 数码管显示数字函数
{
const char SEGMENT_TABLE[] = // 数码管段码表
{
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90
};
DIGITS = SEGMENT_TABLE[num / 10]; // 显示十位数字
delay(5); // 显示持续5ms
DIGITS = SEGMENT_TABLE[num % 10]; // 显示个位数字
delay(5); // 显示持续5ms
}
void main()
{
int i, j;
int keys[8] = {0}; // 最近8个按键值
int keyCount = 0; // 记录已经获取的按键值数量
while (1) // 循环显示最近8个按键值
{
for (i = 7; i >= 0; i--) // 依次显示每个按键值
{
if (i < keyCount) // 如果该按键的值已经获取
displayNumber(keys[i]);
else // 如果该按键的值还未获取
DIGITS = 0xff; // 关闭数码管
delay(1); // 显示持续1ms
}
for (j = 0; j < 16; j++) // 扫描按键
{
if (~KEYS & (1 << j)) // 如果有按键被按下
{
if (keyCount < 8) // 如果还能记录更多按键值
keys[keyCount++] = j + 1; // 记录按键值
else // 如果记录已经满了
{
for (i = 0; i < 7; i++) // 将记录向前移动
keys[i] = keys[i + 1];
keys[7] = j + 1; // 记录最新按键值
}
delay(10); // 延时10ms,防止按键抖动
}
}
}
}
```
3. 自定义键盘功能的实现:
可以使用以上代码作为基础,通过修改按键处理方式实现自定义键盘功能,例如:根据不同按键组合执行不同的操作,或者根据按键输入状态控制程序运行等等。代码实现方法因功能而异,具体实现需要详细分析需求和系统架构。
阅读全文