51单片机8路抢答器

发布者:EtherealLove最新更新时间:2020-09-11 来源: 51hei关键字:51单片机  8路  抢答器 手机看文章 扫描二维码
随时随地手机看文章

时间有限,用数码管显示8路抢答
用定时器进行8路扫描,间隔可以调十分小
此外,具有设置时间的功能(抢答和答题时间)

8路抢答器仿真原理图如下

单片机源程序如下:

#include

#include


void Setsecond();//抢答器答题和抢答时间的设置函数声明

void delay(int k); //延时函数声明


//数码管选管位

sbit Sel1=P2^0;

sbit Sel2=P2^1;

sbit Sel3=P2^2;

sbit Sel4=P2^3;

sbit Sel5=P2^4;

sbit Sel6=P2^5;


//抢答器的状态指示灯

sbit led=P2^6;   //显示复位和设置时间的状态

sbit Led1=P3^1;  //抢答失败时,该灯会一直闪烁

sbit Led2=P3^2;  //答题完毕时,该灯会一直闪烁


//抢答器初始化抢答和答题时间按键

sbit Set1=P3^3;  //设置抢答时间,+

sbit Set2=P3^4;  //设置抢答时间,-

sbit Set3=P3^5;  //设置答题时间,+

sbit Set4=P3^6;  //设置答题时间,-

sbit RST=P2^7;   //抢答器的复位按键

sbit EN=P3^0;    //抢答器使能和设置抢答和答题时间按键


unsigned char Tshu1=11,Tshu2=31,shu1=11,shu2=31,shu;//抢答器抢答时间和答题时间的相关变量

unsigned char count0=0,count1=0,roberflag=0,scond1=0,second2=0,robernum=0;//抢答者的相关变量

unsigned char Shuma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段码值

bit Enflag=0; //抢答器使能的工作标志变量,0表示正常工作,1表示设置时间(抢答和答题)



void main()  //主函数

{

        unsigned char n=0;

        TMOD=0x11;Led1=0;Led2=0;

        TH0=(2^16-50000)/2^8;TL0=(2^16-50000)%2^8;

        TH1=(2^16-50000)/2^8;TL1=(2^16-50000)%2^8;

        TR0=1;ET0=1;TR1=1;ET1=1;EA=1;

        while(1)

        {

                for(n=0;n<6;n++) //这个循环,实现数码管的动态显示

                {

                switch(n)

                {

                        case 0:Sel1=1,Sel2=0,Sel3=0,Sel4=0,Sel5=0,Sel6=0;

                        if(Enflag == 0)

                        P0=~Shuma[shu/10];

                        else

                        P0=~Shuma[shu1/10];break;

                        case 1:Sel1=0,Sel2=1,Sel3=0,Sel4=0,Sel5=0,Sel6=0;

                        if(Enflag == 0)

                        P0=~Shuma[shu%10];

                        else

                        P0=~Shuma[shu1%10];break;

                        case 2:Sel1=0,Sel2=0,Sel3=1,Sel4=0,Sel5=0,Sel6=0;P0=0xBF;break;

                        case 3:Sel1=0,Sel2=0,Sel3=0,Sel4=1,Sel5=0,Sel6=0;P0=0xBF;break;

                        case 4:Sel1=0,Sel2=0,Sel3=0,Sel4=0,Sel5=1,Sel6=0;

                        if(Enflag == 0)

                        P0=~Shuma[robernum/10];

                        else

                        P0=~Shuma[shu2/10];break;

                        case 5:Sel1=0,Sel2=0,Sel3=0,Sel4=0,Sel5=0,Sel6=1;

                        if(Enflag == 0)

                        P0=~Shuma[robernum%10];

                        else

                        P0=~Shuma[shu2%10];break;

                        }

                  delay(20);

                        P0=0xff;

         }

}

}


void delay(int k)   //延时函数,主要是为了数码管的动态显示

{

   while(k--);

}


void Timer0() interrupt 1  //定时器0,主要用于各种按键的扫描,每200ms一次

{  

  TH0=(2^16-50000)/2^8;TL0=(2^16-50000)%2^8;

        count0++;

        P1=0x00;

        if(count0 == 5)

        {

                count0=0;

                Setsecond();  //调用设置时间函数,检测是否有设置时间的动作

                if(RST == 0) //检测是否有复位动作,有动作,则实现部分变量初始化值

                {

                        roberflag=0;

                        robernum=0;shu=0;

                        led=~led;Led1=0;Led2=0;

                        shu1=Tshu1;shu2=Tshu2;

                }

                if(EN == 0)

                {

                        Enflag=~Enflag;

                        led=~led;Led1=0;Led2=0;

                }

                if(Enflag == 0) //正常工作时候的,抢答人号码的识别和显示(同时判断8口,不准次扫描,无优先级)

                {

                if(P1 != 0x00)

                {

                        if(roberflag == 0) //只有在抢答时间才能抢答,roberflag=0表示抢答,1答题,2抢答失败,3答题完毕

                        {

                        roberflag++;  

                        switch(P1)

                        {

                                case 0x01:robernum=1;break;

                                case 0x02:robernum=2;break;

                                case 0x04:robernum=3;break;

                                case 0x08:robernum=4;break;

                                case 0x10:robernum=5;break;

                                case 0x20:robernum=6;break;

                                case 0x40:robernum=7;break;

                                case 0x80:robernum=8;break;

                                default:break;

                        }

                }

        }

}

}

        }


void Timer1() interrupt 3    //定时器1主要是用于工作时的数码显示,跑表,1一秒刷新一次

{

        TH1=(2^16-50000)/2^8;TL1=(2^16-50000)%2^8;

        if(roberflag == 2)

                Led1=~Led1;

        if(roberflag == 3)

                Led2=~Led2;

        count1++;

        if(count1 == 20) //正常工作时候的跑表

        {

                if(Enflag == 0)

                {

                if(roberflag == 0)  //抢答时间的跑表  

                {

                        shu1--;

                        shu = shu1;

                }

                if(roberflag == 1)  //答题时间的跑表

                {

                        shu2--;

                        shu = shu2;

                }

                if(shu1 == 0)

                        roberflag=2;

                if(shu2 == 0)

                        roberflag=3;

          }

                  count1=0;

        }

}


void Setsecond()   //抢答时间和答题时间设置函数,也是被T0调用,实现设置时间功效。

[1] [2]
关键字:51单片机  8路  抢答器 引用地址:51单片机8路抢答器

上一篇:基于单片机PID控制的自动电阻炉温度控制器设计
下一篇:51单片机MPU6050数字陀螺仪与LCD12864显示

推荐阅读最新更新时间:2024-11-04 20:55

基于C51单片机实现汽车座椅自动控制系统的软硬件设计
引言 随着人们生活水平的提高,对汽车座椅的舒适性要求也越来越高,要求对汽车座椅地调节能够更加简单、方便、快捷。目前,汽车座椅位置的调节多采用基于手动调节方式的机械和电动控制两种方式。汽车座椅位置的调节主要有三个方向,即高度调节、水平位置调节以及座椅靠背倾角的调节。 对于家庭使用的汽车,往往由多个成员驾驶同一辆汽车;当不同的驾驶者坐在同一个座椅时,由于个人的身体差异,所需要的汽车座椅的位置各不相同,需经常调节座椅位置;而目前的大部分汽车座椅没有记忆功能,使同一个人在不同的时间驾驶汽车时,汽车座椅的位置可能被其他成员改变,而需重新调节座椅各个方向位置,比较繁琐。 座椅在汽车内安装时,由于不同汽车的内部空间不相同,座椅在各方向所
[单片机]
基于C<font color='red'>51单片机</font>实现汽车座椅自动控制系统的软硬件设计
无符号双字节除以单字节(51单片机,汇编源码)
采用移位减法的算法。源码如下: 1 ;////////////////////////////////////////////////////////////////////////////// 2 ;函数: div_u16_u8 3 ;描述: 无符号双字节除以单字节 4 ;入口: (R6,R7)/(R0) 5 ;出口: (R6,R7).(R5) 6 ;注意: 余数在R5;OV=1时表示溢出 7 ;影响: A,B,R0,R5,R6,R7 8 div_u16_u8: mov r5,#0 9 mov b,#16 10 #ifdef __SPEED_P__ 11 mov a,r6
[单片机]
MCS-51单片机地址指针详细剖析
MCS-51单片机外部RAM的地址空间为64K,地址总线为16位,访问外接RAM可执行如下4条指令: MOVX A,@DPTR MOVX @DPTR,A MOVX A,@RI MOVX @RI,A 其中DPTR为16位地址寄存器,地址高8位存于DPH,地址低8位存于DPL;Ri(I=0,1)是8位寄存器,作为地址指针时仅存低8位地址。 MCS-51执行上述指令时分为两个阶段:首先,是从外接程序存储器中取出指令代码,并进行分析。然后,执行对外接RAM的数据读/写操作。在这两个阶段,P0口、P1口上的地址选通是有区别的。 执行“MOVX A,@DPTR”和“MOVX @DPTR,A”指令时,在读指令代码阶段,由程序计数器(PC)提供A
[单片机]
51单片机实验18:蜂鸣器
关于蜂鸣器的内容参考:https://blog.csdn.net/cax1165/article/details/87634433 开发板蜂鸣器模块原理图如下: #include reg52.h #define uc unsigned char sbit beep=P1^5; void delay(uc x) { uc i,j; for(i=1;i =x;i++) for(j=1;j =110;j++); } void main() { while(1) { beep=~beep; delay(5);//调节音调 } }
[单片机]
<font color='red'>51单片机</font>实验18:蜂鸣器
51单片机】0.96寸OLED取模教程
一、 文字取模 1.打开软件 2.选择模式 3.选项设置 点阵内的数字手动输入999,然后点击确定。 4.生成字模 以字宽字高16*16为例 复制到代码中调用即可。 如果需要改变字体大小可通过改变字宽字高比,进行重新取模 二、 图片取模 1.选择一张图片打开 打开方式选择画图 2.图片调整大小 0.96寸oled是128*64的,所以不能超出这个范围,否则就会乱码 我们这里选择的是68*64,可以自行修改,不要超出范围就行: (【水平x:0~127】;【垂直y:0~63】) 3.修改图片格式并且保存 4.打开软件,设置选项选择图形模式 5.打开选项设置进行调整
[单片机]
【<font color='red'>51单片机</font>】0.96寸OLED取模教程
51单片机pwm调制 产生多路分频信号 倍频
P1口各口输出频率不同的PWM信号,且P1.1口的PWM波周期是P1.0口的两倍,P1.2口PWM周期是P1.1的两倍,以此类推 单片机源程序如下: /*----------------------------------------------- 名称:定时器0 修改:无 内容:通过定时产生不同频率方波 ------------------------------------------------*/ #include reg52.h //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 /*------------------------------------------------
[单片机]
<font color='red'>51单片机</font>pwm调制 产生多路分频信号 倍频
MCS-51的存储器可分为四类,51单片机存储器详解
MCS-51的存储器可分为四类: 程序存储器 一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。 MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CP
[单片机]
MCS-51的存储器可分为四类,<font color='red'>51单片机</font>存储器详解
51单片机设计方案TOP10(六)
传统的伏特表在我们的日常生活及科学研究中起到了其独特的作用,但是在科学技术日新月异、集成芯片在日常生活中的应用越来越广泛的今天显得比较落伍:①它们的量程往往在出厂以前就限定好的,不能根据具体使用场合进行相应调整;②测量精度有限;③不能够将测量结果用语音播放出来。本文将介绍一种由单片机最小系统、模-数转换电路 、语音电路、LED显示电路组成的单片机式语音播报伏特表。    1、硬件设计   整个系统的组成可以分成四大部分:单片机、模-数转换电路、语音电路、LED显示电路。下面就主要的部分进行具体介绍。   1.1、单片机   目前流行的单片机很多,其中89C51自带有片内ROM和一定数量的RAM,一般不需要扩展片外的存储器,并且
[模拟电子]
<font color='red'>51单片机</font>设计方案TOP10(六)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved