用51单片机改变数码管的显示状态

img

img


1.要求使用外部中断功能;
2.当外部中断0中断请求时候,主程序运行状态为数码管a-g段依次点亮循环显示;
3.当有外中断0输入时,即按一下按键开关,立即产生中断,转而执行中断服务程序,数码管显示状态改为闪烁6次显示字符“8”;
4.然后返回主程序断点处继续执行程序,继续把数码管a-g段依次点亮循环显示;

你是不是写错了,是没中断的时候循环点亮吧?

#include "reg51.h"  

typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
 
 
void delay(u16 i)
{
    while(i--);
}
 
void Int0Init()
{
    //设置 INT0
    IT0=1;//跳变沿出发方式(下降沿)
    EX0=1;//打开 INT0 的中断允许。
    EA=1;//打开总中断
}

void main()
{
    u8 i = 0;
    Int0Init(); // 设置外部中断 0

    while(1)
    {
        P1 = 1 << i;
        i++;
        if (i>= 8) i=0;
      delay(10000);
    }
}
 
void Int0() interrupt 0 //外部中断 0 的中断函数
{ u8 i=0;
     EA = 0;关中断
     for(i=0;i<6;i++)
     {
         P1 = 0xff;
         delay(10000);
         P1 = 0x00;
         delay(10000);
             
     }
     
     EA = 1;恢复中断
         
}



delay函数延迟时间可能需要根据实际情况调整一下