标题:
基于单片机的四路抢答器程序设计
[打印本页]
作者:
4163
时间:
2023-4-15 09:49
标题:
基于单片机的四路抢答器程序设计
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code0[10]={0x84,0xde,0xa2,0xc2,0xd8}; //上 P1
//uchar code1[10]={0x04,0xb7,0x8a,0x81,0x15,0x41,0x40,0xa7,0x00,0x01}; //下 //P2
uchar code1[10]={0x04,0xb7,0x8a,0x83,0x17,0x43,0x42,0xa7,0x02,0x03}; //下 //P2
sbit key1=P0^2;
sbit key2=P0^4;
sbit key3=P0^5;
sbit key4=P0^6;
sbit npn1=P0^3;
sbit npn2=P0^7;
sbit beep=P3^1;
sbit key9=P3^6; //复位按键
uchar flag=0;
uchar jishi=10;
uchar n=0;
uchar start=0;
void delay(uint t) //延时程序
{
uint j;
for(;t>0;t--)
for(j=121;j>0;j--);
}
void display_P1(uchar i)//数码管显示
{
switch(i)
{
case 0:P1=code0[0];break;
case 1:P1=code0[1];break;
case 2:P1=code0[2];break;
case 3:P1=code0[3];break;
case 4:P1=code0[4];break;
case 5:P1=code0[5];break;
case 6:P1=code0[6];break;
case 7:P1=code0[7];break;
case 8:P1=code0[8];break;
default:break;
}
}
void display_P2(uchar i)//数码管显示
{
switch(i)
{
case 0:P2=code1[0];break;
case 1:P2=code1[1];break;
case 2:P2=code1[2];break;
case 3:P2=code1[3];break;
case 4:P2=code1[4];break;
case 5:P2=code1[5];break;
case 6:P2=code1[6];break;
case 7:P2=code1[7];break;
case 8:P2=code1[8];break;
case 9:P2=code1[9];break;
default:break;
}
}
void key() //键盘扫描,判断哪个人抢答
{
if(start)
{
if(key1==0)
{
delay(5);
if(key1==0)
{
flag=0;
P2=0xff;
display_P1(1);
while(1)
{
delay(500);
if(key9==0)
{
delay(5);
if(key9==0)
{
jishi=9;
P1=0xff;
while(1) return;
}
while(!key9);
}
}
}
while(!key1);
}
if(key2==0)
{
delay(5);
if(key2==0)
{
flag=0;
P2=0xff;
display_P1(2);
while(1)
{
if(key9==0)
{
delay(5);
if(key9==0)
{
jishi=10;
P1=0xff;
while(1) return;
}
while(!key9);
}
}
}
while(!key2);
delay(5);
}
if(key3==0)
{
delay(5);
if(key3==0)
{
flag=0;
P2=0xff;
display_P1(3);
while(1)
{
delay(500);
if(key9==0)
{
delay(5);
if(key9==0)
{
jishi=10;
P1=0xff;
while(1)return;
}
while(!key9);
}
}
}
while(!key3);
}
if(key4==0)
{
delay(5);
if(key4==0)
{
flag=0;
P2=0xff;
display_P1(4);
while(1)
{
delay(500);
if(key9==0)
{
delay(5);
if(key9==0)
{
jishi=10;
P1=0xff;
while(1)return;
}
while(!key9);
}
}
}
while(!key4);
}
}
if(key9==0)
{
delay(5);
if(key9==0)
{
beep=1;
flag=1;
start=1;
jishi=10;
display_P2(9);
}
while(!key9);
}
}
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void main()
{
Timer0Init();
beep=1;
npn1=0;
npn2=0;
while(1)
{
key();
}
}
void Timer0() interrupt 1
{
static uint i;
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
i++;
if(i==1000)
{
i=0;
jishi--;
if(flag)
{
display_P2(jishi);
if(jishi==0)
{
beep=0;
flag=0;
start=0;
}
}
}
}
复制代码
作者:
qq718665
时间:
2023-5-23 18:09
请问有图纸吗
作者:
qq718665
时间:
2023-5-23 18:19
请问有这个程序的Proteus仿真电路图吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1