#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
bit flag; //设置中断标志位,键盘按下则flag=1
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2; //p10、p12在该段程序中没起作用,但应该对程序的运行无影响
sbit led1=P1^3; //数码管的片选信号输出端
sbit led2=P1^4;
sbit led3=P1^5;
[U][I]uchar dispnum; //1[/I][/U]
uchar code table[11]={0x08,0x3b,0x14,0x11,0x23,0x41,0x40,0x1b,0x00,0x01,0x7f};
void prodisp(void);
void disp(void);
void dlms(uchar);
void keyinterrupt(void);
void main(void)
{
P0=0xf0; //在p0口送11110000
p10=0;
p11=0;
p12=0;
EA=0;
EX0=0;
[U][I] dispnum=0; //2[/I][/U]
flag=0;
EX0=1;
EA=1;
while(1)
{
p11=!p11; //不断输出喂狗信号
dlms(5);
if(flag)
{
[U][I][B] POST
disp();
}
else prodisp();
}
}
void dlms(uchar thetime) //延时程序
{
uchar i;
while(thetime!=0){
for(i=0;i <113;i++){}
thetime--;
}
}
void prodisp(void) //初始显示值000
{
led1=1;led2=0;led3=0;
P2=0x08;dlms(10);
led1=0;led2=1;led3=0;
P2=0x08;dlms(10);
led1=0;led2=0;led3=1;
P2=0x08;dlms(1);
}
void disp(void) //由主函数看出若有中断,则显示此处值:234
{
// if(sel=0) prodisp();
// else{
led1=1;led2=0;led3=0;
P2=0x11;dlms(10);
led1=0;led2=1;led3=0;
P2=0x23;dlms(10);
led1=0;led2=0;led3=1;
P2=0x41;dlms(1);
// }
}
void keyinterrupt(void) interrupt 0 using 0
{
EX0=0;
flag=1;
p12=flag;
[U][I] dispnum++; //4[/I][/U]
EX0=1;
}