标题:
关于抢答器的PROTEUS原理图,附带HEX文件与c程序
[打印本页]
作者:
孟尝君
时间:
2018-6-22 23:34
标题:
关于抢答器的PROTEUS原理图,附带HEX文件与c程序
构建和谐论坛,杜绝灌水
8路抢答器仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(20.18 KB, 下载次数: 37)
下载附件
2018-6-23 06:41 上传
0.png
(50.58 KB, 下载次数: 31)
下载附件
2018-6-23 06:42 上传
单片机源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k0=P1^0; /*数码管段选*/
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
sbit k4=P1^4;
sbit k5=P1^5;
sbit k6=P1^6;
sbit k7=P1^7;
sbit wela0=P2^0; /*数码管位选*/
sbit wela1=P2^2;
sbit wela2=P2^3;
sbit beep=P2^4; /*蜂鸣器*/
sbit ks=P3^0; /*开始计时*/
sbit tz=P3^1; /*停止计时*/
sbit jiayi=P3^4; /*时间加1s*/
sbit jianyi=P3^5; /*时间减1s*/
sbit fw=P3^6; /*复位*/
uchar qiangdanum=0xff;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar ge=0,shi=0;
uint num,time=30;
void display(); /*显示函数*/
void kys(); /*设置按键函数*/
void kys2(); /*抢答按键函数*/
void delay(unsigned int z) /*延迟函数*/
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void intial()
{
TMOD=0X01; /*采用方式一,即十六位计数器*/
TH0=(65536-50000)/256; /*设置初始值,50ms中断一次*/
TL0=(65536-50000)%256;
EA=1;ET0=1; /*开启总中断源,定时器中断*/
}
main()
{
intial(); /*初始化*/
while(1)
{
display(); /*显示函数*/
kys();
if(TR0==1)
{
kys2();
}
}
}
void kys2() /*抢答按键函数*/
{
if(k0==0) /*开关0按下*/
{
delay(5);
if(k0==0)
{
qiangdanum=1; /* 1号选手抢答成功,数码管显示1*/
beep=1;
delay(100);
beep=0;
TR0=0;
time=60;
}
}
if(k1==0) /*开关1按下*/
{
delay(5);
if(k1==0)
{
qiangdanum=2; /* 2号选手抢答成功,数码管显示2*/
beep=1;
delay(100);
beep=0;
TR0=0; /*停止计数*/
}
}
if(k2==0) /*开关2按下*/
{
delay(5);
if(k2==0)
{
qiangdanum=3; /* 3号选手抢答成功,数码管显示3*/
beep=1;
delay(100);
beep=0;
TR0=0; /*停止计数*/
time=60;
}
}
if(k3==0) /*开关3按下*/
{
delay(5);
if(k3==0)
{
qiangdanum=4; /* 4号选手抢答成功,数码管显示4*/
beep=1;
delay(100);
beep=0;
TR0=0; /*停止计数*/
time=60;
}
}
if(k4==0) /*开关4按下*/
{
delay(5);
if(k4==0)
{
qiangdanum=5; /* 5号选手抢答成功,数码管显示5*/
beep=1;
delay(100);
beep=0;
TR0=0; /*停止计数*/
time=60;
}
}
if(k5==0) /*开关5按下*/
{
delay(5);
if(k5==0)
{
qiangdanum=6; /* 6号选手抢答成功,数码管显示6*/
beep=1;
delay(100);
beep=0;
TR0=0; /*停止计数*/
time=60;
}
}
if(k6==0) /*开关6按下*/
{
delay(5);
if(k6==0)
{
qiangdanum=7; /* 7号选手抢答成功,数码管显示7*/
beep=1;
delay(100);
beep=0;
TR0=0; /*停止计数*/
time=60;
}
}
if(k7==0) /*开关7按下*/
{
delay(5);
if(k7==0)
{
qiangdanum=8; /* 8号选手抢答成功,数码管显示8*/
beep=1;
delay(100);
beep=0;
TR0=0; /*停止计数*/
time=60;
}
}
}
void kys() /*设置按键函数*/
{
if(ks==0)
{
delay(5);
if(ks==0)
{
TR0=1;
}
}
if(tz==0)
{
delay(5);
if(tz==0)
TR0=0;
}
if(jiayi==0)
{
delay(5);
if(jiayi==0)
time++;
while(!jiayi);
}
if(jianyi==0)
{
delay(5);
if(jianyi==0)
time--;
while(!jianyi);
}
if(fw==0)
{
delay(5);
if(fw==0)
{
time=30;
qiangdanum=0xff;
}
}
}
void time0() interrupt 1 /*1秒定时函数,采用方式1重装*/
{
num++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
抢答器.rar
(107.38 KB, 下载次数: 37)
2018-6-22 23:33 上传
点击文件名下载附件
下载即可使用
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1