標題:
基于單片機的四路搶答器程序設計
[打印本頁]
作者:
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)//數(shù)碼管顯示
{
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)//數(shù)碼管顯示
{
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.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1