51单片机八路抢答器proteus仿真

简介: 51单片机八路抢答器proteus仿真

51单片机八路抢答器


由于51单片机小板,按键比较少,还有一些功能上的缺陷,所以说无法完成八路抢答器,所以我们用proteus仿真,代码与实验结果如下:


/********************************

Function:  八路抢答器

Date:  Sep 20,2017

By:Third  Group Bolanche L

**************************/

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit Start=P3^7;

sbit Indecator=P3^6; //指示灯

sbit Interrupt=P3^3;  //中断1

sbit KEY1=P2^0;    //第一位LED

sbit KEY2=P2^1;

sbit KEY3=P2^2;

sbit KEY4=P2^3;

sbit KEY5=P2^4;

sbit KEY6=P2^5;

sbit KEY7=P2^6;

sbit KEY8=P2^7;

uchar  n;   //声明全局无符号字符变量n

//延时毫秒

void delayms(uint c)

{

    uchar a,b;

 for(;c>0;c--)

  for(a=142;a>0;a--)

     for(b=2;b>0;b--);

}

//数码管显示

void SMG_dis(uchar m)

{

  P0=table[m] ;

//delayms(20);

}

//LED亮

void LED_DIS(uchar i)

{

  P1 |=(1<<(i-1));   //将第i个LED点亮

}

//按键扫描,返回值为被按下的那个按键,每按下一个按键触发一次中断

char KEY_Scan(void)

{

  if(KEY1==0)

  {

    delayms(20); //消抖

 if(KEY1==0)

 {

    Interrupt=1; //中断1口赋高电平

 delayms(20);

    Interrupt=0;

    n=1;

 }

  }

  if(KEY2==0)

  {

     delayms(20);

  if(KEY2==0)

  {

    Interrupt=1;

 delayms(20);

    Interrupt=0;

    n=2;

  }

}

 if(KEY3==0)

   {

     delayms(20);

  if(KEY3==0)

  {

    Interrupt=1;

 delayms(20);

    Interrupt=0;

    n=3;

  }

 }

  if(KEY4==0)

  {

     delayms(20);

  if(KEY4==0)

  {

    Interrupt=1;

 delayms(20);

    Interrupt=0;

    n = 4;

  }

}

   if(KEY5==0)

   {

     delayms(20);

  if(KEY5==0)

  {

    Interrupt=1;

 delayms(20);

    Interrupt=0;

    n = 5;

  }

}

if(KEY6==0)

  {

     delayms(20);

  if(KEY6==0)

  {

    Interrupt=1;

 delayms(20);

    Interrupt=0;

    n = 6;

  }

}

  if(KEY7==0)

  {

     delayms(20);

  if(KEY7==0)

  {

    Interrupt=1;

 delayms(20);

    Interrupt=0;

    n = 7;

  }

 

}

if(KEY8==0)

   {

     delayms(20);

  if(KEY8==0)

  {

    Interrupt=1;

 delayms(20);

    Interrupt=0;

    n = 8;

  }  

}

   return n;

}

void INT_1() interrupt  2

{

  EX1=0;

  delayms(20);    //消抖

  EX1=1;

  LED_DIS(n);

  SMG_dis(n);

  Indecator=0;

  delayms(20);

  P1=0x00;  //关闭抢答人指示灯

 

}

void main()

{

   EX1=1; //开启外部中断1  

IT1=1;  //开启下降沿触发

EA=1;  //开启总中断  

P1=0x00; // 点亮第一位小灯  

P0=0x00;  //  关闭数码管

Indecator=0;  //关闭指示灯

Interrupt=1;

while(1)

{

   if(Start==0)

   {

      delayms(20);

   if(Start==0)

     Indecator=1;   //主持人按下开始按键,指示灯亮

   }

   n=KEY_Scan();//扫描哪一个按键被按下,并触发中断

}  


相关文章
|
5月前
|
物联网
STC51单片机-实验开发装置仿真-物联网应用系统设计
STC51单片机-实验开发装置仿真-物联网应用系统设计
55 0
|
5月前
|
物联网
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
44 0
|
12月前
基于51单片机的简易抢答器设计
1、主持人按下抢答开始按键,抢答者才可以开始抢答,数码管抢答倒计时20S。 2、抢答者按下按键,数码管显示抢答者的编号。 3、可以通过按键修改倒计时时间。
94 0
|
12月前
基于51单片机的8八路抢答器设计
(1)主持人进行复位,依次显示8位选手的分数,8位选手分数显示结束后主持人方可按下开始按键; (2)主持人按下抢答开始按键,抢答者才可以开始抢答,数码管抢答倒计时10S; (3)抢答者按下按键,数码管显示抢答者的编号和答题剩余时间倒计时20S; (4)在20S内,抢答者答题正确,主持人按下加分按键,分数加一,答错主持人按下减分按键,分数减一(默认抢答者的初始分数为60)。
185 0
|
12月前
|
Python
使用proteus实现51单片机的串口通讯仿真
使用proteus实现51单片机的串口通讯仿真
456 0
|
传感器 数据采集 监控
资料转发分享【毕业设计】单片机和stm32设计选题,proteues仿真、程序完整资料
资料转发分享【毕业设计】单片机和stm32设计选题,proteues仿真、程序完整资料 基于单片机寻迹巡线避障智能小车系统设计 基于单片机体温心率脉搏检测仪系统设计 基于单片机温湿度光照自动窗帘系统设计 基于单片机环境监测温湿度PM2.5系统设计 基于51单片机的波形发生器(四种波形) 基于单片机SO2 NO2 PM温湿度空气质量检测仪 基于51单片机冰箱温度控制器设计
1206 1
资料转发分享【毕业设计】单片机和stm32设计选题,proteues仿真、程序完整资料
|
芯片
基于单片机的抢答器设计 proteus仿真资料
基于单片机的抢答器设计 proteus仿真资料
100 0
基于单片机的抢答器设计 proteus仿真资料
|
6天前
|
编译器 C语言 开发者
单片机原理与应用:探索微型计算机世界
单片机原理与应用:探索微型计算机世界
13 1
|
6天前
|
数据采集 数据处理 C语言
单片机:探索其原理、应用与编程实践
单片机:探索其原理、应用与编程实践
16 1
|
1天前
|
存储 芯片
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)