标题:
自己做的8位竞赛抢答器仿真与代码
[打印本页]
作者:
csz8773
时间:
2017-5-29 18:42
标题:
自己做的8位竞赛抢答器仿真与代码
可能有些小毛病仿真没毛病,就是自己的那个开发版出不来,大家拿去研究研究
仿真原理图如下 需要用8.0以上的版本(proteus仿真工程文件可到本帖附件中下载)
0.png
(40.85 KB, 下载次数: 97)
下载附件
2017-5-30 01:24 上传
0.png
(69.13 KB, 下载次数: 80)
下载附件
2017-5-30 01:24 上传
单片机源代码如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//变量定义
sbit BEEP=P3^1;
sbit start_stop=P3^2;
sbit reset=P3^3;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
sbit key7=P1^6;
sbit key8=P1^7;
sbit state=P3^0;
bit start_stop_flag=0;
bit key1_flag=0;
bit key2_flag=0;
bit key3_flag=0;
bit key4_flag=0;
bit key5_flag=0;
bit key6_flag=0;
bit key7_flag=0;
bit key8_flag=0;
bit reset_flag=0;
bit action=0;
uchar second=20;
uchar timer0_count=0;
uchar number=0;
uchar number_display=0;
uint flag=1; //延时函数
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
} //蜂鸣器发声延时
void DelayMS(uint x)
{
uchar t;
while(x--)
for(t=0;t<100;t++);
} //数码管显示驱动函数
void display(uchar number,uchar second)
{
uchar second_first,second_second;
second_first = second / 10;
second_second = second % 10;
P0 =0x00;
P2 = 0xfe;
P0 = table[number];
delay(2);
P0 =0x00;
P2 = 0xfd;
P0 = 0x40;
delay(2);
P0 =0x00;
P2 = 0xfb;
P0 = table[second_first];
delay(2);
P0 =0x00;
P2 = 0xf7;
P0 = table[second_second];
delay(2);
P0 =0x00; } //蜂鸣器响应按周期t发音
void Play(uchar t)
{ uchar i; for(i=0;i<1;i++)
{ BEEP=~BEEP;
DelayMS(t); } BEEP=0;
} //开始键扫描函数
void start_stop_keyscan()
{
if(start_stop == 0)
{
delay(8);
if((start_stop == 0)&&(!start_stop_flag))
{
start_stop_flag = 1;
action = 1;
TR0 = 1;
state = 0;
}
}
else
{
start_stop_flag = 0;
}
} //八位抢答键扫描函数
uchar key_scan8()
{
if(key1 == 0)
{
delay(8);
if((key1 == 0)&&(!key1_flag))
{
key1_flag = 1;
number = 1;
number_display = number;
}
}
else
{
key1_flag = 0;
number = 0;
} if(key2 == 0)
{
delay(8);
if((key2 == 0)&&(!key2_flag))
{
key2_flag = 1;
number = 2;
number_display = number;
}
}
else
{
key2_flag = 0;
number = 0;
}
if(key3 == 0)
{
delay(8);
if((key3 == 0)&&(!key3_flag))
{
key3_flag = 1;
number = 3;
number_display = number;
}
}
else
{
key3_flag = 0;
number = 0;
}
if(key4 == 0)
{
delay(8);
if((key4 == 0)&&(!key4_flag))
{
key4_flag = 1;
number = 4;
number_display = number;
}
}
else
{
key4_flag = 0;
number = 0;
}
if(key5 == 0)
{
delay(8);
if((key5 == 0)&&(!key5_flag))
{
key5_flag = 1;
number = 5;
number_display = number;
}
}
else
{
key5_flag = 0;
number = 0;
}
if(key6 == 0)
{
delay(8);
if((key6 == 0)&&(!key6_flag))
{
key6_flag = 1;
number = 6;
number_display = number;
}
}
else
{
key6_flag = 0;
number = 0;
}
if(key7 == 0)
{
delay(8);
if((key7 == 0)&&(!key7_flag))
{
key7_flag = 1;
number = 7;
number_display = number;
}
}
else
{
key7_flag = 0;
number = 0;
}
if(key8 == 0)
{
delay(8);
if((key8 == 0)&&(!key8_flag))
{
key8_flag = 1;
number = 8;
number_display = number;
}
} else
{
key8_flag = 0;
number = 0;
} if(number_display != 0)
{
return 1;
}
else
{
return 0;
}
} //复位键扫描函数
void reset_keyscan()
{
if(reset == 0)
{
delay(8);
if((reset==0)&&(!reset_flag))
{
reset_flag = 1;
number_display = 0;
state = 1;
}
}
else
{
reset_flag = 0;
}
} //主函数
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA= 1;
ET0= 1;
TR0=0;
while( 1)
{
if(number_display!=0)
Play(number_display/2); //蜂鸣器发声
start_stop_keyscan();
reset_keyscan();
while(action)
{
while(!key_scan8())
{
display(number_display,second);
if(second == 0)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
8位竞赛抢答器课程设计.zip
(56.9 KB, 下载次数: 137)
2017-5-29 18:41 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
505631748
时间:
2018-6-27 11:11
很好很好
作者:
星空下你我
时间:
2018-7-6 12:16
没流程图啊
作者:
亲爱的h
时间:
2018-7-12 23:58
用8.6报错
作者:
boo_ker
时间:
2018-10-21 18:43
流程图有吗?
作者:
林鹿
时间:
2019-7-1 19:25
请问这个要怎么复位啊
作者:
admin_z
时间:
2019-7-3 12:18
好东西
作者:
野人猪心
时间:
2020-1-7 14:03
这个有流程图吗
作者:
宝贝儿111
时间:
2020-1-7 15:09
自己在protues上走了一遍程序,还可以,不错
作者:
世事有偿
时间:
2020-1-7 15:22
可以的,正要做这个
作者:
QQ1050409603
时间:
2020-1-7 19:03
好东西
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1