微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求救啊 关于中断和数码管

求救啊 关于中断和数码管

时间:10-02 整理:3721RD 点击:
做中断的时候后面一部分关于数码管的代码看上去好像没执行
题目:
STC89C52RC  锁存器:74HC573  74HC138

代码:
中断3.c:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#include<74HC138D.h>
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint num_1=432,num_0=0,n=0,aa=0xfe;
void delayms ( uint );
void main ()
{
TMOD=0x11;
EA=1;
ET1=1;
ET0=1;
TR1=1;
TR0=1;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P1=aa;

while(1)
{

wexuan(3);
dula=1;
P0=table[7];
dula=0;
P0=0x00;

wexuan(4);
dula=1;
P0=table[6];
dula=0;
P0=0x00;
wexuan(5);
dula=1;
P0=table[5];
dula=0;
P0=0x00;
if( num_1>=398 )
{
wexuan(6);
dula=1;
P0=table[num_1/100];
dula=0;
P0=0x00;
wexuan(7);
dula=1;
P0=table[(num_1%100)/10];
dula=0;
P0=0x00;
wexuan(8);
dula=1;
P0=table[num_1%10];
dula=0;
P0=0x00;
}
else num_1=330;
if( num_0>=50 )
{
P1=aa;
aa=_cror_(aa,1);
num_0=0;
}
if( n > 300 )
{
wexuan(8);
  dula=1;
  P0=table[0];
  dula=0;
  P0=0x00;
  wexuan(7);
  dula=1;
  P0=0xe3;
  dula=0;
  P0=0x00;
  wexuan(6);
  dula=1;
  P0=0xe3;
  dula=0;
  P0=0x00;

  wexuan(5);
  dula=1;
  P0=table[14];
  dula=0;
  P0=0x00;
  wexuan(4);
  dula=1;
  P0=0x91;
  dula=0;
  P0=0x00;
  while(1)
  {
   P1=0x00;
   delayms(500);
   P1=0xff;
   delayms(500);
  }
}
}

}
void delayms ( uint xms )
{
int i,j;
for(i=xms;i>0;i--)
    for(j=110;j>0;j--);
}
void time_1() interrupt 3
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
num_1--;
}
void time_0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
num_0++;
n++;
}

小编代码整体思路就是错误的 应该是动态刷新数码管 利用视觉暂留的原理显示数字的 而不是只运行一次

如果要是n>300,就执行这段程序了,并且在while1循环中不会退出了。

不错的资料,值得收藏

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top