求单片机八路抢答器的设计的C语言程序和仿真电路图

2025-03-07 00:09:13
推荐回答(1个)
回答1:

#include
#define uchar unsigned char
#define TIME 15
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
sbit rstkey=P3^2;
uchar cnt,sec;
uchar scanled,disdat[4]={0,10,0,0};
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=20)
{
cnt=0;
if(sec>0)sec--;
if(sec==0)TR0=0;
}
disdat[2]=sec/10;
disdat[3]=sec%10;
}
void t1isr() interrupt 3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
P2=1< P0=~table[disdat[scanled]];
scanled++;
scanled%=4;
}
main()
{
uchar key;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
TR1=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{
while(1)
{
if(rstkey==0)break;//主持人按下复位键则开始
}
disdat[0]=0;
sec=TIME;
TR0=1;
while(1)
{
key=P1;
if(key!=0xff || sec==0)break;
}
TR0=0;
switch(~key)
{
case 0x01:disdat[0]=1;break;
case 0x02:disdat[0]=2;break;
case 0x04:disdat[0]=3;break;
case 0x08:disdat[0]=4;break;
case 0x10:disdat[0]=5;break;
case 0x20:disdat[0]=6;break;
case 0x40:disdat[0]=7;break;
case 0x80:disdat[0]=8;break;
default:break;
}
}
}