有at89c51单片机的四路抢答器的仿真和程序吗?想了解一下

如题所述


#include

#define uint unsigned int

#define uchar unsigned char

sbit D0=P0^0;//指示灯

sbit beep=P0^1;//蜂鸣器

sbit K0=P0^2;//开始抢答按键

sbit S1=P0^3;//答题计时键

sbit S2=P0^4;//开始抢答时间调整键

sbit S3=P0^5;//答题计时时间调整键

sbit K1=P2^0;//1号选手抢答按键

sbit K2=P2^1;//2号选手抢答按键

sbit K3=P2^2;//3号选手抢答按键

sbit K4=P2^3;//4号选手抢答按键

sbit K5=P2^4;//5号选手抢答按键

sbit K6=P2^5;//6号选手抢答按键

sbit K7=P2^6;//7号选手抢答按键

sbit K8=P2^7;//8号选手抢答按键

char s;

uchar num=0;

char time1;//抢答时间

char time2;//答题限时时间

uint m,n;//T0,T1定时器定一秒时

bit flag1,flag2,flag3,flag4; //标志位

bit aa,bb;//时间调整标志位

//延时子函数

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=120;y>0;y--);

}

uchar code table1[]={

//共阴数码管段码值

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71

};

uchar code table2[]={

//共阴数码管位码值

0xf7,0xfb,

0xfd,0xfe

};

//初始化子函数

void init()

{

TMOD=0x11;

TH0=(65536-2000)/256;
……等 字数有限发不了这么多。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-18
暂时没时间帮你新写了,不好意思。给你提供一条思路:硬件方面四个按钮一端公共接地,另一端兵分两路,一路接单片机除P3外的IO口,一路接四输入与非门,与非门输出接中断口。软件部分:按下按钮后中断,中断服务程序指示哪一位选手抢答(可能是亮灯,可能是数码管),进入空循环等待按下重置按钮(可能是单片机最小系统的RST,也可能是你另外接了一个按钮作复位),中断返回或系统重置。
相似回答