|
基于单片机的三路抢答器的设计
设计内容:
1.具有3路抢答输入(由独立按键实现 )
2.显示抢答剩余时间,初始为10秒,最小量化单位为1秒;
3.抢答结束后,成功的那一路,并显示抢答成功的号码;失败的其他路,并显示F;
4.如果没有人抢答,报警,并重新进入开始抢答状态。
我不知道如何该在外部中断执行第三条要求
#include<reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xc0,0x90,0x80,0xF8,0x82,0x92,0x99,0xb0,0xa4,0xf9};
uchar code table1[]={0x71,0x06,0x00,0x71};//一抢
uchar code table2[]={0x06,0x71,0x00,0x71}; // 二抢
uchar code table3[]={0x71,0x71,0x00,0x06}; // 三抢
uchar code address[]={0x08,0x04,0x02,0x01};
void delayms(uint);
sbit w=P3^6;
sbit p=P3^0;
sbit a=P3^2;
int n;
uint m;
void delay(uint z) //延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delayms(uint m)
{
while(m--);
}
void main()
{
EA=1;
EX0=1;
IP=0X04;
IT0=1;
EX1=1;
IT1=1;
while(1);
}
void INT_0() interrupt 0
{
if(p==0) //中断0,按下p3.2开始,d9亮并开始倒计时
w=0;
EX0=0;
delay(20);
EX0=1;
while(1)
{
if(m==10)
{
P0=0x89;
a=0;
delayms(20);
}
else
{P0=table[m];
delay(1000);
m++;}
}
}
void INT_1() interrupt 2
{
EX1=0;
delay(20);
EX1=1;
while(1)
if(w==0)
{if(P2=0xfe)
while(1)
{
if(m==4)m=0;
P1=address[m];
P0=table1[m++];delayms(500);
}
else if(P2=0xfd)
{
if(m==4)m=0;
P1=address[m];
P0=table2[m++];delayms(500);
}
else
{
if(m==4)m=0;
P1=address[m];
P0=table3[m++];delayms(500);
}
}
}
|
|