ayb_ice 发表于 2013-8-28 10:09 
这与中断没有关系
/*******************************************************************************
* 标题: 试验数码管上显示数字(译码器位选 共阴极) *
* *
* 连接方法:P0与J12 用8PIN排线连接 *
********************************************************************************
* *
* 请学员认真消化本例程,用573锁存器和译码器控制和数码管 *
********************************************************************************/
#include <reg51.h>
#include <intrins.h>
sbit LS138A = P2^2; //定义138译码器的输入A脚由P2.2控制
sbit LS138B = P2^3; //定义138译码器的输入脚B由P2.3控制
sbit LS138C = P2^4; //定义138译码器的输入脚C由P2.4控制
bit bdata bitflag;
void delay(unsigned int i); //函数声名
char DelayCNT;
//此表为 LED 的字模, 共阴数码管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void init(void)
{
EX0=1;
IT0=1;
EA=1;
}
/************主函数**********************/
main()
{
unsigned int i,LedNumVal=1 ;
unsigned int LedOut[10];
DelayCNT=0;
init();
while(1) //进入循环状态
{
if(bitflag==1)
{
if(++DelayCNT>=10)
{
DelayCNT=0; //延时计数 每扫描一次加一次
LedNumVal++; //每隔50个扫描周期加一次
LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
LedOut[2]=Disp_Tab[LedNumVal%100/10];
LedOut[3]=Disp_Tab[LedNumVal%10];
LedOut[4]=Disp_Tab[LedNumVal%10000/1000]; //千位
LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点
LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位
LedOut[7]=Disp_Tab[LedNumVal%10]; //个位
for( i=0; i<9; i++) //实现8位动态扫描循环
{
P0 = LedOut; //将字模送到P0口显示
switch(i) //使用switch 语句控制位选 也可以是用查表的方式 学员可以试着自己修改
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
case 4:LS138A=0; LS138B=0; LS138C=1; break;
case 5:LS138A=1; LS138B=0; LS138C=1; break;
case 6:LS138A=0; LS138B=1; LS138C=1; break;
case 7:LS138A=1; LS138B=1; LS138C=1; break;
}
delay(150);
}
}
}
}
}
void exe0(void) interrupt 0
{
bitflag=1;
// bitflag++;
}
/***************************************************************************
* *
* 延时程序 *
****************************************************************************/
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
我按一下它就不停了,为什么啊???
|