丿流失的忧伤 2021-07-08 15:01 采纳率: 100%
浏览 25
已采纳

000-999用中断暂停

#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;

sbit k3=P3^2;
sbit led=P2^1;
sbit led1=P2^0;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

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

void int0intt()
{
TH0=1;
EX0=1;
EA=1;
}

void DigDisplay(u16 num)
{
u16 bits,ten,hundreds;
bits=num%10;
ten=num/10%10;
hundreds=num/100;
LSA=1;LSB=1;LSC=1;
P0=smgduan[hundreds];
delay(700);
LSA=0;LSB=1;LSC=1;
P0=smgduan[ten];
delay(700);
LSA=1;LSB=0;LSC=1;
P0=smgduan[bits];
delay(700);

}

void main()
{
int0intt();
while(1)
{
u16 n;
for(n=0;n<1000;n++)
{
DigDisplay(n);
}
}
}

void int0() interrupt 0
{
delay(1000);
if(k3==0)
{
led=led;
led1=
led1;

}

}

这个可以暂停但是必须一直摁着按键,并且数码管只有一位显示,还是随机的。

  • 写回答

2条回答 默认 最新

  • +4 2021-07-08 15:34
    关注

    有几个问题:1、u16 n;声明变量不要放在while(1)里面,应该放在int0intt();的上面。2、delay()延时时长要确定一下延时700是多长时间,这个时长具体跟晶振频率有关系,如果这个时间太短那么DigDisplay()函数可能就达不到你想要的效果。
    3、void int0() interrupt 0是哪个的中断,中断函数里面你想做什么?看不出这个中断跟你要暂停的数字n有什么联系。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 7月9日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?