📄 3.c
字号:
/**********************************/
/*有线/无线双模式多功能八路抢答器 */
/* 设计:陈金玉 吴振铨 */
/* 广东工业大学信息工程学院 */
/* 04应用电子2班 */
/* 2006年4月25日 */
/**********************************/
#include"reg51.h"
unsigned char i;//显示抢答路数
int k ,s;
sbit set=P3^7;
sbit beeper=P3^6;
sbit time=P3^4;
sbit en5027=P3^3;
sbit dp=P0^6;
sbit w1=P2^7;
sbit w2=P2^6;
sbit w3=P2^5;
sbit w4=P2^4;
unsigned char code table[]={
0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/};
void init(void);
void t0init(void);
void mode1(void);//有线模式
void mode2(void);//无线模式
unsigned char mode1readkeys(void);
unsigned char mode2readkeys(void);
void display1(void);
void display2(void);
void displaytime(int k);
time0()interrupt 1 using 1//T0中断服务程序(50ms)
{ unsigned char a;
a++;
TH0=-50000/256;
TL0=-50000%256;
if(a>20)
{
a=0;
k++;
}
if(k>99)
k=0;
}
void t0init(void)//T0初始化
{TMOD=0x61;
TH0=-50000/256;
TL0=-50000%256;
TH1=-10;
TH0=-10;
EA=1;
ET0=1;
TR0=1;
}
void delay(void)//延时
{
for(s=0;s<700;s++)
;
}
void displaytime(int k)//LED显示时间
{unsigned char n,m;
w3=0;
n=k%10;
P0=table[n];
delay();
delay();
w3=1;
delay();
w4=0;
m=k/10;
P0=table[m];
delay();
delay();
w4=1;
delay();
}
void clock(void)//
{ w1=1;
w2=1;
t0init();
displaytime( k);
}
void main(void)
{
init();
if(set==1)//默认为有线模式
mode2();
else
mode1();
}
void init(void)//初始化
{
en5027=1;
set=0;
P2=0xF0;
P0=0xFF;
P1=0xFF;
w1=1;
w2=1;
w3=1;
w4=1;
i=0;
}
/*unsigned char mode1readkeys(void)
{
unsigned char j;
int k;
P1=0xFE;
for(j=0;j<3;j++)
{
if((P1&0xF0)!=0xF0)
{
switch (P1)
{
case 0xEE:
i=1;
break;
case 0xDE:
i=2;
break;
case 0xBE:
i=3;
break;
case 0xED:
i=4;
break;
case 0xDD:
i=8;
break;
case 0xBD:
i=7;
break;
case 0xEB:
i=6;
break;
case 0xDB:
i=5;
break;
default:
return 0;
break;
}
return i;
}
k=P1;
k=~k;
k=k<<1;
k=~k;
P1=k;
}
}*/
unsigned char mode1readkeys(void)//模式1读取按键
{
P1=0xFE;
if((P1&0xFE)!=0xFE)
{
switch (P1)
{
case 0xEE:
i=1;
break;
case 0xDE:
i=2;
break;
case 0xBE:
i=3;
break;
default:
return 0;
break;
}
return i;
}
P1=0xFD;
if((P1&0xFD)!=0xFD)
{
switch (P1)
{
case 0xED:
i=4;
break;
case 0xDD:
i=8;
break;
case 0xBD:
i=7;
break;
default:
return 0;
break;
}
return i;
}
P1=0xFB;
if((P1&0xFB)!=0xFB)
{
switch (P1)
{
case 0xEB:
i=6;
break;
case 0xDB:
i=5;
break;
default:
return 0;
break;
}
return i;
}
}
unsigned char mode2readkeys(void)//模式2读取按键
{
unsigned char n;
n=P2;
n=(n&0x0F);
i=n;
return i;
}
void display1(void)
{
w1=0;
P0=table[i];
}
void display2(void)
{
w2=0;
P0=table[i];
}
void mode1(void)//模式1
{
w1=0;
dp=0;
i=0;
time=0;
if(time==1)
while(1)
{
clock();
}
while(i==0||i>8)
{
mode1readkeys();
}
P1=0xFF;
beeper=0;
display1();
beeper=0;
while(1)
{
unsigned int t;
for(t=0;t<20000;t++)
{
if(t>15000)
beeper=1;
else
beeper=0;
}
}
}
void mode2(void)//模式2
{
en5027=0;//打开无线接收
w2=0;
dp=0;
i=0;
time=0;
if(time==1)
while(1)
{
clock();
}
while(!(i==1||i==2||i==4||i==8))
{
mode2readkeys();
}
P1=0xFF;
beeper=0;
if(i==4)
i=3;
if(i==8)
i=4;
display2();
beeper=0;
en5027=1;//关闭无线接收
while(1)
{
unsigned int t;
for(t=0;t<20000;t++)
{
if(t>15000)
beeper=1;
else
beeper=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -