用 KEIL 进行程序编写,使用AT89C51单片机存储芯片,实现数码管显示接口设计,系统需具有如下功能:3 个数码管静态显示,采用软件译码,循环显示“123- 456-789-ABC-DEF
时间: 2023-10-10 11:05:50 浏览: 94
以下是一个基于AT89C51单片机和KEIL IDE的程序示例,实现三个数码管静态显示“123- 456-789-ABC-DEF”循环显示。
```c
#include<reg51.h> //头文件
sbit D1 = P2^0; //定义数码管接口
sbit D2 = P2^1;
sbit D3 = P2^2;
unsigned char code table[] = { //数码管显示编码表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
void delay(unsigned int i); //延时函数
void display(unsigned char i); //数码管显示函数
void main() {
unsigned char i = 0;
while(1) { //循环显示
display(table[i]); //显示当前编码
delay(1000); //延时1秒
i++; //下一个编码
if(i == 16) i = 0; //超过16个编码,重新开始循环
}
}
void delay(unsigned int i) { //延时函数
unsigned int j, k;
for(j = i; j > 0; j--)
for(k = 110; k > 0; k--);
}
void display(unsigned char i) { //数码管显示函数
D1 = D2 = D3 = 1; //关闭所有数码管
P0 = i; //设置显示编码
switch(i) { //根据显示编码选择对应的数码管
case 0x3f: D1 = 0; break;
case 0x06: D2 = 0; break;
case 0x5b: D3 = 0; break;
case 0x4f: D1 = D2 = 0; break;
case 0x66: D2 = D3 = 0; break;
case 0x6d: D1 = D3 = 0; break;
case 0x7d: D1 = D2 = D3 = 0; break;
case 0x07: D1 = D3 = 0; break;
case 0x7f: D1 = D2 = D3 = 0; break;
case 0x6f: D2 = D3 = 0; break;
case 0x77: D1 = D2 = 0; break;
case 0x7c: D2 = D3 = 0; break;
case 0x39: D1 = 0; D2 = D3 = 1; break;
case 0x5e: D2 = 0; D1 = D3 = 1; break;
case 0x79: D3 = 0; D1 = D2 = 1; break;
case 0x71: D1 = D2 = D3 = 1; break;
}
}
```
该程序使用了一个延时函数和一个数码管显示函数,其中数码管显示函数使用软件译码方式。在主函数中,循环显示编码表中的16个编码,每个编码显示1秒钟,然后切换到下一个编码。当超过16个编码时,重新开始循环。
在具体实现时,需要根据实际硬件连接情况修改程序中的引脚定义和延时时间等参数,以适应不同的电路设计。
阅读全文