试设计Proteus仿真电路图并编写程序实现相应控制功能。

单片机的主程序实现P3口控制一个共阳极数码管的各段依次点亮,不断循环,当外部中断1有效时,使数码管显示8,闪烁4次后,返回原断点处继续执行程序,外部中断1的触发方式采用边沿触发方式。试设计Proteus仿真电路图并编写程序实现相应控制功能。

以下是单片机主程序的实现,可以实现P3口控制一个共阳极数码管的各段依次点亮,不断循环,并且当外部中断1有效时,使数码管显示8,闪烁4次后,返回原断点处继续执行程序。

#include <reg52.h>

sbit dula = P2^6;
sbit wela = P2^7;
unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

void delay(int i) {
    while (i--);
}

void display(unsigned char num) {
    dula = 1;
    P0 = table[num];
    dula = 0;
}

void main() {
    int i, j;

    while (1) {
        for (i = 0; i < 10; i++) {
            display(i);
            for (j = 0; j < 200; j++) {
                delay(100);
            }
        }
    }
}

void key() interrupt 0 {
    int i;

    if (P3 & 0x02) {
        for (i = 0; i < 4; i++) {
            display(8);
            delay(500);
            display(0xff);
            delay(500);
        }
    }
}


在程序中,首先定义了共阳极数码管的段选和位选引脚dula和wela。通过定义一个数码管显示的字符表table,实现了通过传入数字来在数码管上显示相应数字的函数display。在主函数中,使用for循环不断让数码管依次显示0~9,实现了数码管的循环显示功能。

在中断函数中,当P3口的第2个引脚被触发时,将数码管的显示设置为8,并且循环闪烁4次,每次闪烁500ms。中断触发方式采用了边沿触发方式。

需要在Proteus中设计仿真电路图,将单片机与数码管、外部中断电路连接在一起,以实现完整的仿真测试。