龙空技术网

单片机4路抢答器(含代码)

ying悦1SD 291

前言:

今天大家对“求行列式c语言代码是什么”大约比较珍视,朋友们都需要知道一些“求行列式c语言代码是什么”的相关文章。那么小编也在网上网罗了一些关于“求行列式c语言代码是什么””的相关内容,希望我们能喜欢,你们一起来学习一下吧!

经验不足,大家给意见

控制过程

1. 设计基本要求

· 1)抢答器同时供 4 名选手或 4 个代表队比赛使用,分别用 4 个按钮 K1~

K4 表示。

(2)设置裁判开关 k5 和清零开关 k6,该开关由主持人控制,当主持人按

下 k6,系统复位,预备抢答,当主持人按下总控制控制开关 k5,开始抢答;

(3)抢答器具有定时抢答功能, 抢答时间为倒计时 15 秒。当主持人启动"开

始"键后,定时器进行减计时,同时扬声器发出短暂的提示声响,声响持续的时

间 0.5 秒左右,当计时小于 5 秒后,每减少一秒,便报警一次以提示选手。

(4)抢答器具有锁存功能, 参赛选手在设定的时间内进行抢答, 抢答有效,

蜂鸣器发声, 计时停止,数码管上显示选手的编号和时间, 选手相应的信号灯被

点亮,其他选手再抢答时无效。

(5)如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答。

等待下一轮抢答。

二 硬件设计

2.1 控制系统及所需元件

控制系统主要由单片机应用电路、 存储器接口电路、 显示接口电路组成。 其

中单片机 STC89C52是系统工作的核心,它主要负责控制各个部分协调工作。

所需元件:该系统的核心器件是 STC89C52。各口功能:

P0.0-P0.3 是数码管的位选口;

P2.0-P2.7 是数码管的段选口,为其传送段选信号;

P1.0-P1.3 是 4 组抢答信号的输入口;

P1.4 、P1.5 由裁判控制 , 分别是抢答开始 复位功能键;

P1.6 为蜂鸣器的控制口;

P3.4-P3.7 为选手信号灯输出口;

在其外围接上电复位电路、数码管电路、 LED发光二极管、按键电路及扬声

器电路。

2.2电源方案的选择

系统需要 5V 电源来驱动单片机 STC89C52。

利用电脑的 USB接口可以提供 5V 电压来驱动单片机。

2.4 抢答器键盘的选择

键盘是单片机不可缺少的输入设备, 是实现人机对话的纽带。 键盘按结构形式可以分为非编码键盘和编码键盘, 前者用软件方法产生键码, 而后者则用硬件方法来产生键码。在单片机中使用的都是非编码键盘, 因为非编码键盘结构简单,成本低廉,非编码键盘的类型很多,常用的有独立式键盘,行列式键盘等。

本设计采用独立式键盘。

键盘接口中使用多少根 I/O 线,键盘中就有几个按键,键盘接口使用了 6

· I/O 口线,该键盘就有 6 个按键,这种类型的键盘,其按键比较少,且键盘中各按键的工作互不干扰。 因此可以根据实际需要对键盘中的按键灵活的编码。 如图所示。

最简单的编码方式就是根据 I/O 输入口所直接反映的相应按键, 按下的状态进行编码,称按键直接状态码,对于这样编码的独立式键盘, CPU可以通过直接读取 I/O 口的状态来获取按键的直接状态编码值,根据这个值直接进行按键识

#include<reg52.h>#define uchar unsigned char#define uint unsigned intUchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//	共阴数码管 0~9 编码uint i,j,time,num;uchar ge,shi;bit flag,flag1;sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;sbit k4=P1^3;sbit k5=P1^4;sbit k6=P1^5;//k1~k4 为选手按键 ,k5 为主持人开关 ,k6 为复位键sbit beep=P1^6;//	定义蜂鸣器的端口sbit wei1=P0^0;sbit wei2=P0^1;sbit wei3=P0^2;sbit wei4=P0^3;//	定义数码管的位选端口sbit led1=P3^4;sbit led2=P3^5;sbit led3=P3^6;sbit led4=P3^7;//	定义 LED灯的端口void delay(uint a)//	延时函数{uint i,j;for(i=a;i>0;i--)for(j=110;j>0;j--);}10void display()//	显示函数{shi=time/10;ge=time%10;P2=table[num];//	显示选手编号wei1=0;delay(1);wei1=1;P2=table[shi];wei3=0;delay(1);	//	显示时间wei3=1;P2=table[ge];wei4=0;delay(1);wei4=1;}void keyscan(){if(k1==0)//	按键按下{delay(10);//	延时去抖动if(k1==0){num=1;led1=0;flag=1;TR0=~TR0;TR1=0;//	开定时器 0, 关定时器 1beep=1;delay(500);beep=0;//	蜂鸣器响 500 毫秒while(!k1);//	等待按键释放}}if(k2==0){delay(10);if(k2==0)11{num=2;led2=0;flag=1;TR0=~TR0;TR1=0;beep=1;delay(500);beep=0;while(!k2);}}if(k3==0){delay(10);if(k3==0){num=3;led3=0;flag=1;TR0=~TR0;TR1=0;beep=1;delay(500);beep=0;while(!k3);}}if(k4==0){delay(10);if(k4==0){num=4;led4=0;flag=1;TR0=~TR0;TR1=0;beep=1;delay(500);beep=0;while(!k4);}}display();//	显示选手编号和时间if(time==0){TR0=0;TR1=0;flag=1;//	关计时器 0 和 112}if(time==6)TR1=1;}void init(){TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;beep=0;//	作品上蜂鸣器是赋高电平响,开始置低关闭}void main(){init();//	初始化while(1){display();if(k6==0){delay(10);if(k6==0){P3=0xff;//	关闭所有 LED灯flag1=k6;time=15;wei1=0;num=0;P2=table[num];13while(!flag1){if(k5==0){delay(10);if(k5==0){flag1=1;flag=k5;TR0=1;beep=1;delay(500);beep=0;while(!k5);while(!flag)keyscan();//	扫描键盘}}}}}}}void time0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;i++;if(i==20){i=0;time--;}}14void time1() interrupt 3{TH1=(65536-50000)/256;TL1=(65536-50000)%256;j++;if(j==10){j=0;beep=~beep;}}抢答器	用独立键盘设计一个四路抢答器,要求第一个按键按下的灯亮,以后按下的灯就不亮了,按下复位键从新开始抢答;	(共用 5 个按键,四个抢答用,一个复位用)#include<reg52.h>#define uchar unsigned char#define uint unsigned intuint i,j,time,num;uchar ge,shi;bit flag,flag1;sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;sbit k4=P1^3;sbit k5=P1^4; //k1 ,k2,k3,k4 为选手抢答按键,按下时亮灯。 k5 为复位键,按下时灯全部熄灭。sbit led1=P3^0;sbit led2=P3^1;15sbit led3=P3^2;sbit led4=P3^3;void delay(uint a)//	延时函数{uint i,j;for(i=a;i>0;i--)for(j=110;j>0;j--);}void keyscan(){if(k1==0)//	按键按下{delay(10);//	延时去抖动if(k1==0){num=1;led1=0;flag=1;TR0=~TR0;//	开定时器 0while(!k1);//	等待按键释放}}if(k2==0){delay(10);if(k2==0){num=2;led2=0;flag=1;TR0=~TR0;while(!k2);}}if(k3==0){16delay(10);if(k3==0){num=3;led3=0;flag=1;TR0=~TR0;while(!k3);}}if(k4==0){delay(10);if(k4==0){num=4;led4=0;flag=1;TR0=~TR0;while(!k4);}}}void init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;}void main(){init();//	初始化17while(1){if(k5==0){delay(10);if(k5==0){P3=0xff;//	关闭所有 LED灯flag=k5;time=15;num=0;TR0=1;while(!k5);while(!flag)keyscan();//	扫描键盘}}}}void time0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;i++;if(i==20){i=0;18time--;}}19

标签: #求行列式c语言代码是什么