|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机八路抢答器proteus仿真图及C语言源代码
/ x$ L7 A4 H# ^2 ~! h: J
) D' q+ r" }% E- o0 `' Z6 G, \7 G1 {4 W- u* |: v9 a# T$ ^% o
单片机c语言源代码如下:5 k6 r/ E+ j! k! K+ Q
//名称:八路抢答器! @7 _7 O& h% y, g( g* y+ q( a7 Q
//功能:主持人按下按键开始抢答,此时抢答灯闪烁
6 O- T$ Z& {- }. j- u( {% `, U//十秒内抢答,如果没有抢答的则直接复位5 U" I1 y# c$ T3 t
//如果有人抢答成功,则其他人抢答无效,60s内答完超过60s自动复位6 t. Q' u5 |* v- u" a d
//回答期间抢答灯常亮,回答的人方灯闪烁,直到回答完毕,灯常亮表明回答有效
9 p- c/ w4 o9 h//如果超过60s自动复位,回答结束主持人打开按键,复位。
" \, Y( Q3 i- \, q4 L#include<reg51.H>; r, S( ?9 R0 f7 V3 N1 {0 k/ h
( F! p c' S8 ]2 W% s( a; A
3 n( \$ _3 D# ^# N0 L8 Q4 } Y8 Lsbit Presenter=P2^0;
, s# N( X: a9 W; nsbit K=P3^2;. ` g& p. |; x/ m: _
bit Presenter_flag=0,flag;//主持人按键标志位,仅允许一个数据通过标志位. C Z. T( T+ I" D" Y, P+ e- x
unsigned char Timer=0,i; //时间标志
# J9 `" h( _8 _2 ^; q, iunsigned char ren=0xff;$ [, ~0 O9 q U; U- K* D% Y% P- P3 c
bit x=0;7 s( b2 `1 a: r9 F
void System_Init();
. F! z# R# m; _0 jvoid System_Rest();
* A9 M6 p O) ?: ^* m/ Zvoid main()3 ?5 s& K# S0 h6 v
{
1 t5 G$ a6 W$ L( ^ System_Init();* C0 V+ v; m2 l2 ^
while(1)
/ b/ f' y) Y: p {& I8 P# {, f- q( q
if(Presenter_flag) //主持人按键按下时开始系统- g! Z- C5 b7 O3 B
{
f: y1 r/ ~/ @- w8 R K=1;! \7 }! M4 L6 s* u* D7 p {" ~
if(K==1) //主持人按键起开
7 V, q1 c" r4 o {break;; B/ Z; A+ h$ U Z7 R( c' g! `, D4 y
Presenter_flag=0;4 y9 ^1 z3 T# V C# b a
}
& ~! V. `7 `, N: ~ }
8 Y" x+ [- a8 N0 O+ v: t. x& ^ else
# K- e+ N' Z% _# @ System_Rest();
# [8 w$ Q2 o* S, x! ? }
& k3 g% k9 i% P$ `$ A}7 f1 J; B- ?, e X; ?/ a
void System_Init()
9 m3 }8 T) C) M8 R: r' V/ }/ D2 @{6 _0 X- n1 e, B( B4 Y9 d6 q
EA=1; //打开中断
( K/ @9 s& F' @( K2 B* ~* R EX0=1;; a# y3 }; o3 `% Q; a/ B( ]5 W
IT0=1;
$ B- W( h! K& g TMOD=0x01;
; C4 Q5 n/ F6 Q5 E3 @ ET0=1;
& k! l+ S( q: e2 O) L TH0=(65535-50000)/256; //50ms1 K [. W' n/ g) ~6 h
TL0=(65535-50000)%256;
$ H3 o# T$ R- x! O, x Presenter=0;
% C- G! Y# b$ k! e TR0=0;
7 m2 m' x' _ J- Y1 v& Q}8 e/ K9 ~6 ?. B7 V& K. C- y5 v
void System_Rest()6 t e5 \) C8 ~6 X9 j+ E8 R6 ]
{ `+ p- a( Z8 E' T/ \
P0=0xff; //复位设置:在主持人按键起开或者,抢答时间超过10s或者答题时间超过60s. Q. @. o7 j6 [+ Q: A W
P1=0xff;
2 O6 O. Z/ ~$ c) V2 d8 c& } TR0=0;' i: n; S& Y" N! b3 d7 t
Presenter=0;8 c) a% q: g3 I6 O1 U
flag=1;/ B2 m! f8 w8 ]- m+ x8 L6 I1 z5 U& L
i=0;
' ]; ?9 _: R3 U5 q Timer=0; 8 I! Q; V* w3 e9 R8 @! b
}
2 z' S9 J, O' L7 N2 r6 M/ Gvoid into() interrupt 0, i/ ^* {" t6 f" A4 s5 }
{
: v2 a& x9 T# K5 ]: O Presenter_flag=1;//主持人按键按下
! C7 H6 s! o3 j0 L0 f TR0=1;
! P5 ~$ o" C" i. I1 Z" k}! d4 C7 E* W: C5 i
void Timer0() interrupt 1' K! m! r' b/ ^
{, L0 z0 W" q. ?( V/ |% h
TH0=(65535-50000)/256;
; c3 `. j1 |- f! @ i TL0=(65535-50000)%256;: L) S; S) m/ u5 a
i++;
2 _2 H! g7 y: x% B0 [ if(i==20) //1s钟
( w5 k% O) f5 C5 i. v: B4 l {1 [" l2 @& o4 n% i
i=0;
# Z$ C. t4 G2 T, `$ y& D+ q Timer++;
+ F L5 M$ s3 G+ R/ S: k) @ P1=0xff;
& d5 E( q8 J# I, g9 H' X7 v if((Timer<10)&&(P1==0xff)&&(flag==1)) //10s抢答时间,10s内如果无人抢答则复位
- x6 R% C) {3 t+ I4 ^ {( K) S' k( f3 L# }
Presenter=~Presenter; //抢答指示灯闪烁; K4 Y0 l6 ~5 Q" `. x4 u; R: Y
}
$ x1 H Y, I2 Y else if((Timer>=10)&&(P1==0xff)&&(flag==1))
" W' W- d. u8 x; ?8 u9 X4 N9 P# w7 R {
' p, @& Z4 Y: a" z Presenter_flag=0;8 ], p! f) h2 C( y. W
Timer=0;4 D9 T4 d. C# Z- M$ f0 x: x& k: \
i=0;
$ l* S; U8 q# E$ ` y) w E7 L0 l }
. k# K+ V3 R' L; P P1=0xff;7 J( V9 Y' Q. w: x5 Q+ L
if((Timer<=60)&&(P1!=0xff)&&(flag==1)) //答题时间,60s没答完则复位
8 J$ }4 s4 w* {- @ {8 a9 @5 G0 Z! R
ren=P1;4 P5 W" m7 h% l# I
Presenter=1;
' f5 m% i: A0 o2 G" r flag=0;# r P4 _: g! F) \' l& f! m
}
# S/ i. X# ]5 |6 _ if(flag==0)
" e6 m5 _' h" x, F4 f0 Q {
2 I+ \7 D0 d" n, K% m/ ^3 i if(x==0)
; w* t% g0 }8 ? {x=1 0=0xff;}
; d4 w( {9 s' P/ W) y else if(x==1)& X' V( M" U8 |4 R
{x=0 0=ren;}
. X0 B5 R4 i; r+ \* ]: p2 K2 { p }3 S: D p9 ^4 e8 U/ }& G! ^
if((flag==0)&&(P1==0xff))# ~7 `- I$ d9 S! L3 _
{P0=ren;TR0=0;flag=1;}
6 P6 s7 j: a' S( u if((Timer>60)&&(P1!=0xff))/ ^5 G% Q9 [9 x# c$ E) @
3 |: _/ q: Z# ]# D6 ]
7 E- j/ G. I, Y+ D; ]: U6 m
) n' L) U' {5 Y: f8 q" c
3 w0 j$ j5 k, V# j g: }6 n9 s
9 I, o5 A/ d' h# D3 @…………限于本文篇幅 余下代码请从论坛下载附件…………
: ` ?- w0 |" {8 S( s1 U \8 v ~# j1 e0 b7 w; v
, b4 `- d) n' F0 r8 x |
|