⑴ 求基於單片機的八路搶答器設計,要用到74LS47N和共陽led,求電路圖和程序(最好是C),加急!!
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitkai=P2^2;
sbitting=P2^3;
sbithao1=P1^0;
sbithao2=P1^1;
sbithao3=P1^2;
sbithao4=P1^3;
sbithao5=P1^4;
sbithao6=P1^5;
sbithao7=P1^6;
sbithao8=P1^7;
sbitwela=P2^1;
sbitdela=P2^0;
sbitP2_6=P2^6;
sbitP2_7=P2^7;
ucharcodetable[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};
uchara,a1,num,shi,ge,hao,
aa,num1,flag1,flag2,flag3,flag4,
flag5,flag6,flag7,flag8,flag9,flag10;
voiddisplay(ucharhao,ucharaa,ucharshi,ucharge);
voidinit();
voiddelay(uintz);
voidkeyscan();
voidmain()
{
init();
while(1)
{
keyscan();
if(flag1==1)
{
display(hao,10,shi,ge);
}
else
{
display(hao,10,0,0);
}
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidkeyscan()
{
if(kai==0)
{
delay(5);
if(kai==0)
{
while(!kai);
hao=0;
num=30;
shi=3;
ge=0;
TR0=1;
flag1=1;
P2_7=0;
P2_6=1;
}
}
if(ting==0)
{
delay(5);
if(ting==0)
{
while(!ting)
{
a=0;
num=30;
num1=0;
hao=0;
shi=3;
ge=0;
TR0=0;
TR1=0;
flag1=0;
P2_6=0;
P2_7=1;
P3=0xff;
}
}
}
if(flag1==1)
{
if(hao==0&&hao1==0)
{
delay(5);
if(hao1==0)
{
while(!hao1);
P2_6=1;
P2_7=1;
P3=0xfe;
flag2=1;
shi=0;
ge=0;
hao=1;
TR1=1;
TR0=0;
}
}
if(hao==0&&hao2==0)
{
delay(5);
if(hao2==0)
{
flag3=1;
while(!hao2);
P2_6=1;
P2_7=1;
P3=0xfd;
shi=0;
ge=0;
hao=2;
TR0=0;
TR1=1;
}
}
if(hao==0&&hao3==0)
{
delay(5);
if(hao3==0)
{
flag4=1;
while(!hao3);
P2_6=1;
P2_7=1;
P3=0xfb;
shi=0;
ge=0;
TR0=0;
TR1=1;
hao=3;
}
}
if(hao==0&&hao4==0)
{
delay(5);
if(hao4==0)
{
flag5=1;
while(!hao4);
P2_6=1;
P2_7=1;
P3=0xf7;
shi=0;
ge=0;
TR0=0;
TR1=1;
hao=4;
}
}
if(hao==0&&hao5==0)
{
delay(5);
if(hao5==0)
{
flag6=1;
while(!hao5);
P2_6=1;
P2_7=1;
P3=0xef;
shi=0;
ge=0;
TR0=0;
TR1=1;
hao=5;
}
}
if(hao==0&&hao6==0)
{
delay(5);
if(hao6==0)
{
flag7=1;
while(!hao6);
P2_6=1;
P2_7=1;
P3=0xdf;
shi=0;
ge=0;
hao=6;
TR0=0;
TR1=1;
}
}
if(hao==0&&hao7==0)
{
delay(5);
if(hao7==0)
{
flag8=1;
while(!hao7);
P2_6=1;
P2_7=1;
P3=0xbf;
shi=0;
ge=0;
hao=7;
TR0=0;
TR1=1;
}
}
if(hao==0&&hao8==0)
{
delay(5);
if(hao8==0)
{
flag9=1;
while(!hao8);
P2_6=1;
P2_7=1;
P3=0x7f;
shi=0;
ge=0;
hao=8;
TR0=0;
TR1=1;
}
}
if(!hao==0)
{
if(flag2==1)
{
if(hao1==0)
{
delay(5);
if(hao1==0)
{
TR1=0;
}
}
}
if(flag3==1)
{
if(hao2==0)
{
delay(5);
if(hao2==0)
{
TR1=0;
}
}
}
if(flag4==1)
{
if(hao3==0)
{
delay(5);
if(hao3==0)
{
TR1=0;
}
}
}
if(flag5==1)
{
if(hao4==0)
{
delay(5);
if(hao4==0)
{
TR1=0;
}
}
}
if(flag6==1)
{
if(hao5==0)
{
delay(5);
if(hao5==0)
{
TR1=0;
}
}
}
if(flag7==1)
{
if(hao6==0)
{
delay(5);
if(hao6==0)
{
TR1=0;
}
}
}
if(flag8==1)
{
if(hao7==0)
{
delay(5);
if(hao7==0)
{
TR1=0;
}
}
}
if(flag9==1)
{
if(hao8==0)
{
delay(5);
if(hao8==0)
{
TR1=0;
}
}
}
}
}
}
voiddisplay(ucharhao,ucharaa,ucharshi,ucharge)
{
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
P0=0;
dela=1;
P0=table[hao];
dela=0;
delay(5);
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
P0=0;
dela=1;
P0=table[aa];
dela=0;
delay(5);
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
P0=0;
dela=1;
P0=table[shi];
dela=0;
delay(5);
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
P0=0;
dela=1;
P0=table[ge];
dela=0;
delay(5);
}
voidinit()
{
TMOD=0X11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
num=30;
num1=0;
a1=0;
a=0;
shi=3;
ge=0;
flag1=0;
P2_6=0;
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==18)
{
a=0;
num--;
if(num==0)
{
num=0;
TR0=0;
}
shi=num/10;
ge=num%10;
}
}
voidtimer1()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
a1++;
if(a1==18)
{
a1=0;
num1++;
if(num1==60)
{
P3=0xff;
P2_6=0;
P2_7=1;
TR1=0;
}
shi=num1/10;
ge=num1%10;
}
}
⑵ 52單片機用C語言編程 要求:用中斷間隔讓八個小燈以一秒間隔閃爍五次,然後全亮2秒,循環。
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
voiddelay(uinta)
{
uchari;
while(a--)for(i=0;i<120;i++);
}
main()
{
uinti;
while(1)
{
for(i=0;i<5;i++)
{
P0=0x00;
delay(1000);
P0=0xff;
dela(1000);
}
P0=0x00;
delay(2000);
}
}