📄 kechengsheji.c
字号:
//五人抢答系统:
//当主持人按下开始(P2.2)时,
//五个发光二极管(P1.0~P1.4)跑马闪亮
//当有一个人按下抢答开关(P0.0~P0.4),
//他的灯亮,同时蜂鸣(P2.1)
//主持人控制场面,按下开关(P3.3),让灯灭,蜂鸣停止,准备下一轮
#include <reg51.h>
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;//跑马灯锁存器
unsigned char a=1,b=0; //全局变量,控制跑马退出
void cut(void) interrupt 0 //中断
{
EA=0;
P20=1;//关锁存器
ACC=P0; //读取结果
ACC|=0x1f;
P1=ACC;//抢答灯亮
P23=0;//关灯锁存
b=1;
EA=1;
}
void restart(void) interrupt 2
{
a=0;//正常结束
if(b==0)//非正常结束
b=1;
}
void delay(int a)//延时程序
{ int i;
while(--a!=0)
{
for(i=0;i<125;i++);
}
}
void beep( )
{ int a,b;
for(a=300;a>0;a--)
{ P21=~P21;
for(b=100;b>0;b--);}
}
main()
{ char i=0;
while(1)
{
IT0=1;IT1=1;
EX0=1;EX1=1;
EA=1;
P22=1;P21=0;P20=0;a=1;P23=1;
while(P22);//等待开始
while(!P22);//dengdaisongkai anjian
while(a) //跑马灯闪
{
P1=0xfe;
for(i=0;i<5;i++)
{delay(200); //延时200ms
if(b) break;
P1<<=1; //此处可能会有漏洞,三种方法可能会解决:1对跑马灯加锁存器,并由中断管理 2简化程序
} // 3 汇编语言 4在中断中加入延时程序 (1月11日再次修改,用方法1)
if(b)
{beep( );//蜂鸣器响
while(a);
while(!a);
}//等待跳出循环,重新开始
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -