#include<reg52.h>
#include<intrins.h>
#include "math.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//共阴字形码表【实验】数码管实验时,一定要将点阵模块跳针放到VCC上!!!
uchar code led[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
uint num=0;
//显示数值范围为0~99
//延时,控制每位显示的时间,t=200:流水显示;t=1:连续显示。仿真的时候,只能流水显示
void delay(void)
{
uchar i;
uint t;
t=10;
while(t--) for(i=0;i<100;i++);
}
void main()
{
uchar i;
uchar temp;
ulong nn;
EA=1; //总中断允许
EX0=1; //允许外部中断0中断
EX1=1; //允许外部中断1中断
IT0=1; //选择外部中断0为跳沿触发方式
IT1=1; //选择外部中断1为跳沿触发方式
IP=0x04; //设置/INT1为高优先级,/INT0为低优先级
while(1)
{
nn=num;
i=0<<2;//采用38译码器,P22、P23、P24
temp=nn%10;
P0=led[temp];
P2=i; //P2口输出位控码 个位
delay(); //
P0=0x00; //清零。如果没有这句,仿真时,数码管数据会闪烁
i=1<<2;//采用38译码器,P22、P23、P24
nn=nn/10;
temp=nn%10;
P0=led[temp];
P2=i; //十位
delay();
P1=num;
P0=0x00; //清零。如果没有这句,仿真时,数码管数据会闪烁
}
}
void int0_isr(void) interrupt 0 //增加1
{
delay();
if(num<99) num++;
else num=0;
}
void int1_isr (void) interrupt 2 //减少1
{
delay();
if(num>0) num--;
else num=99;
}