采用 EGo1 中的两组数码管,让该8个数码管循环显示:01234567, 12345678. 23456789..电路的输入信号 en 进行启动或暂停:用按键控制循环,拔一下显示下一组数。课程设计的软硬件环境、源程序、仿真程序
时间: 2024-02-21 13:00:14 浏览: 93
数码管循环显示程序
为了实现这个功能,需要使用一些硬件和软件。
硬件环境:
- EGo1开发板
- 8个共阳数码管
- 8个NPN型晶体管
- 8个1kΩ电阻
- 按钮开关
- 杜邦线
软件环境:
- Keil uVision5软件
- STC-ISP烧录工具
源程序:
```c
#include <reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit SDA = P2^0;
sbit SCL = P2^1;
sbit EN = P3^4; // 74HC138 使能端
// 数码管显示字形码
uint8 code num[] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90
};
// 延时函数
void delay(uint16 t) {
uint16 i, j;
for(i = 0; i < t; i++) {
for(j = 0; j < 125; j++);
}
}
// IIC总线起始信号
void iic_start() {
SDA = 1;
SCL = 1;
delay(1);
SDA = 0;
delay(1);
SCL = 0;
}
// IIC总线停止信号
void iic_stop() {
SDA = 0;
SCL = 1;
delay(1);
SDA = 1;
delay(1);
}
// IIC总线应答信号
void iic_ack() {
uint8 i = 0;
SDA = 1;
SCL = 1;
while(SDA) {
i++;
if(i > 200) {
iic_stop();
return;
}
}
SDA = 0;
delay(1);
SCL = 0;
}
// IIC总线发送数据
void iic_send_byte(uint8 dat) {
uint8 i;
for(i = 0; i < 8; i++) {
SDA = (dat & 0x80) ? 1 : 0;
SCL = 1;
delay(1);
SCL = 0;
dat <<= 1;
}
iic_ack();
}
// 74HC138芯片输出选择信号
void hc138_select(uint8 n) {
P3 &= 0xF8;
P3 |= n;
}
// 数码管显示函数
void display(uint8 n) {
iic_start();
iic_send_byte(0x40);
iic_ack();
iic_send_byte(0xC0);
iic_ack();
iic_send_byte(num[n]);
iic_ack();
iic_stop();
}
void main() {
uint8 i = 0;
uint8 flag = 0;
uint8 code cnt[] = {0, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8, 2, 3, 4, 5, 6, 7, 8, 9};
EX0 = 1;
IT0 = 1;
while(1) {
if(flag == 0) {
for(i = 0; i < 8; i++) {
hc138_select(i);
display(cnt[i]);
delay(1);
}
} else {
for(i = 8; i < 16; i++) {
hc138_select(i - 8);
display(cnt[i]);
delay(1);
}
}
}
}
// 中断处理函数
void int0_handler() interrupt 0 {
uint16 i;
uint8 j;
if(EN == 0) {
// 等待按键释放
while(EN == 0);
// 延时去抖
for(i = 0; i < 10000; i++) {
for(j = 0; j < 10; j++);
if(EN) break;
}
if(!EN) {
// 切换循环标志
flag = !flag;
}
}
}
```
仿真程序:
暂无。
该程序的主要思路是利用74HC138芯片通过选择不同的输出端口控制显示不同的数码管,通过按键中断来改变循环标志,从而切换显示不同的数码管。在显示函数中,通过IIC总线协议向数码管发送字形码,实现数码管的显示。
该程序的编译和烧录可以使用Keil uVision5软件和STC-ISP烧录工具完成。在编译前需要将代码保存为main.c文件,并将STC89C52芯片的型号设置为STC89C52RC。在烧录时需要将烧录模式设置为ISP模式,并将烧录器连接到EGo1开发板的ISP接口上。
阅读全文