找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3179|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机8人抢答器仿真程序 易学简单

[复制链接]
跳转到指定楼层
楼主

一、设计内容简介
8位抢答器由主体电路与扩展电路组成。通过8位按键产生相应电平变换通过单片机使得数码管及LED灯显示相应信息。经过布线、调试等工作后8位抢答器成形。单片机体积小价格低,应用方便,稳定可靠。单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。 选手们都站在同一个起跑线上,体现了公平公正的原则。一、设计内容简介
8位抢答器由主体电路与扩展电路组成。通过8位按键产生相应电平变换通过单片机使得数码管及LED灯显示相应信息。经过布线、调试等工作后8位抢答器成形。单片机体积小价格低,应用方便,稳定可靠。单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。 选手们都站在同一个起跑线上,体现了公平公正的原则。三、设计所涉及的原理
以AT89C51单片机为核心,起着控制作用。系统包括数码管显示电路、LED显示电路、按键输入电路。设计思路分为晶振电路模块、AT89C51、 数码管显示电路、LED显示电路、按键输入电路这五个模块。
1.单片机最小系统
1.1电源电路
  电源电路就是单片机的供电电路,一般是3.3V或者5V,具体多少要参考各种型号的单片机的工作电压,通常情况下是5V,这里是指通常情况下。
  1.2时钟电路
  时钟电路就是晶振电路,一般选择12MHz的晶振,方便使用定时器、计数器的功能。AT89C51中有高增益的反相放大器,它是是构成内部振荡器的主要单元,XTAL2和引脚XTAL1分别是该放大器的输出端和输入端。
  片外石英晶体或陶瓷谐振器和放大器共同构成自激振荡器,旁路电容Cl、C2与外接石英晶体(或陶瓷谐振器)接在具有反馈功能的放大器中,构成了并联反馈振荡电路。
对外接旁路电容Cl、C2即使没非常严厉的要求,但是电容容量的大小也会轻微影响振荡器频率的稳定性、振荡频率的幅值、起振的难易程序程度和温度稳定性等等。加入使用石英晶体,通常电容选,而如果使用陶瓷谐振器,通常选择电容
1.3复位电路
  无论是在单片机刚开始接上电源时,还是运行过程中发生故障都需要复位。复位电路用于将单片机内部各电路的状态恢复到一个确定的初始值,并从这个状态开始工作。单片机的复位条件:必须使其RST引脚上持续出现两个(或以上)机器周期的高电平。单片机的复位形式:上电复位、按键复位。
  上电复位电路中,利用电容充电来实现复位。在电源接通瞬间,RET引脚上的电位是高电平(Vcc),电源接通后对电容进行快速充电,随着充电的进行,RST引脚上的电位也会逐渐下降为低电平。只要保证RST引脚上高电平出现的时间大于两个机器周期,便可以实现正常复位。
按键复位电路中,当按键没有按下时,电路同上电复位电路。如在单片机运行过程中,按下RESET键,已经充好电的电容会快速通过200Ω电阻的回路放电,从而使得RST引脚上的电位快速变为高电平,此高电平会维持到按键释放,从而满足单片机复位的条件实现按键复位。
2.LED灯及数码管显示
2.1 LED灯显示
由于单片机额P0口作为一般的I/O口时用时,由于内部没有上拉电阻,故要接上上拉电阻。P0口接上拉电阻LED灯连接单片机P0口,通过单片机输出的数据来改变LED亮灯顺序。
2.2数码管显示
数码管的一种是半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP,其基本单元是发光二极管。本实验采用74LS245驱动7段数码管。
74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据

单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code1[9]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
  5. sbit key1=P3^0;
  6. sbit key2=P3^1;
  7. sbit key3=P3^2;
  8. sbit key4=P3^3;
  9. sbit key5=P3^4;
  10. sbit key6=P3^5;
  11. sbit key7=P3^6;
  12. sbit key8=P3^7;
  13. sbit keep=P2^0;
  14. sbit key9=P2^2;
  15. void delay(uint t) //延时程序
  16. {
  17. uint j;
  18. for(;t>0;t--)
  19. for(j=121;j>0;j--);
  20. }
  21. void display(uchar i)//数码管显示
  22. {
  23. switch(i)
  24. {
  25.   case 0:P1=code1[0];break;
  26.   case 1:P1=code1[1];break;
  27.   case 2:P1=code1[2];break;
  28.   case 3:P1=code1[3];break;
  29.   case 4:P1=code1[4];break;
  30.   case 5:P1=code1[5];break;
  31.   case 6:P1=code1[6];break;
  32.   case 7:P1=code1[7];break;
  33.   case 8:P1=code1[8];break;
  34.   default:break;
  35. }

  36. }

  37. void key() //键盘扫描,判断哪个人抢答
  38. {
  39. uchar n;
  40.   n=0;        
  41.   display(n);
  42.     keep=1;
  43.          if(key1==0)
  44.          {
  45.           delay(5);
  46.           if(key1==0)
  47.                   {
  48.                     n=1;
  49.                     display(n);
  50.                         P0=0xfe;
  51.                         while(1)
  52.                         {
  53.                         keep=0;                         //开启蜂鸣器
  54.                         delay(500);
  55.                         keep=1;
  56.                         delay(500);
  57.                          if(key9==0)
  58.                         {
  59.                          delay(5);
  60.                          if(key9==0)
  61.                          {
  62.                             keep=1;
  63.                             n=0;        
  64.                 display(n);
  65.                                 P0=0xff;
  66.                           while(1)return;
  67.                          }
  68.                          while(!key9);
  69.                      delay(5);
  70.                          while(1);   
  71.                         }
  72.                         }
  73.                   }                  
  74.                   while(!key1);
  75.                   delay(5);
  76.                  
  77.          }
  78.          if(key2==0)
  79.          {
  80.                   delay(5);
  81.                   if(key2==0)
  82.                   {
  83.                            n=2;
  84.                            display(n);
  85.                                    P0=0xfd;
  86.                            while(1)
  87.                            {
  88.                            keep=0;                         //开启蜂鸣器
  89.                            delay(500);
  90.                            keep=1;
  91.                            delay(500);
  92.                             if(key9==0)
  93.                                 {
  94.                                  delay(5);
  95.                                  if(key9==0)
  96.                                  {
  97.                                     keep=1;
  98.                                     n=0;        
  99.                         display(n);
  100.                                         P0=0xff;
  101.                                    while(1)return;
  102.                                  }
  103.                                          while(!key9);
  104.                                      delay(5);
  105.                                          while(1);   
  106.                                         }
  107.                                 }
  108.                           }         
  109.                           while(!key2);
  110.                           delay(5);
  111.          }         
  112.          if(key3==0)
  113.          {
  114.                   delay(5);
  115.                   if(key3==0)
  116.                   {
  117.                            n=3;
  118.                            display(n);
  119.                                    P0=0xfb;
  120.                             while(1)
  121.                         {
  122.                         keep=0;                         //开启蜂鸣器
  123.                         delay(500);
  124.                         keep=1;
  125.                         delay(500);
  126.                          if(key9==0)
  127.                         {
  128.                          delay(5);
  129.                          if(key9==0)
  130.                          {
  131.                             keep=1;
  132.                             n=0;        
  133.                 display(n);
  134.                                 P0=0xff;
  135.                           while(1)return;
  136.                          }
  137.                          while(!key9);
  138.                      delay(5);
  139.                          while(1);   
  140.                         }
  141.                         }
  142.                   }                                       
  143.                   while(!key3);
  144.                   delay(5);         
  145.          }
  146.          if(key4==0)
  147.          {
  148.                   delay(5);
  149.                   if(key4==0)
  150.                   {
  151.                            n=4;
  152.                            display(n);
  153.                                    P0=0xf7;
  154.                            while(1)
  155.                         {
  156.                         keep=0;                         //开启蜂鸣器
  157.                         delay(500);
  158.                         keep=1;
  159.                         delay(500);
  160.                          if(key9==0)
  161.                         {
  162.                          delay(5);
  163.                          if(key9==0)
  164.                          {
  165.                             keep=1;
  166.                             n=0;        
  167.                 display(n);
  168.                                 P0=0xff;
  169.                           while(1)return;
  170.                          }
  171.                          while(!key9);
  172.                      delay(5);
  173.                          while(1);   
  174.                         }
  175.                         }
  176.                   }                                       
  177.                   while(!key4);
  178.                   delay(5);         
  179.          }               
  180.          if(key5==0)
  181.          {
  182.                   delay(5);
  183.                   if(key5==0)
  184.                   {
  185.                            n=5;
  186.                            display(n);
  187.                                    P0=0xef;
  188.                            while(1)
  189.                         {
  190.                         keep=0;                         //开启蜂鸣器
  191.                         delay(500);
  192.                         keep=1;
  193.                         delay(500);
  194.                          if(key9==0)
  195.                         {
  196.                          delay(5);
  197.                          if(key9==0)
  198.                          {
  199.                             keep=1;
  200.                             n=0;        
  201.                 display(n);
  202.                                 P0=0xff;
  203.                           while(1)return;
  204.                          }
  205.                          while(!key9);
  206.                      delay(5);
  207.                          while(1);   
  208.                         }
  209.                         }
  210.                   }                                       
  211.                   while(!key5);
  212.                   delay(5);         
  213.          }
  214.          if(key6==0)
  215.          {
  216.                   delay(5);
  217.                   if(key6==0)
  218.                   {
  219.                            n=6;
  220.                            display(n);
  221.                            P0=0xdf;
  222.                            while(1)
  223.                         {
  224.                         keep=0;                         //开启蜂鸣器
  225.                         delay(500);
  226.                         keep=1;
  227.                         delay(500);
  228.                          if(key9==0)
  229.                         {
  230.                          delay(5);
  231.                          if(key9==0)
  232.                          {
  233.                             keep=1;
  234.                             n=0;        
  235.                 display(n);
  236.                                 P0=0xff;
  237.                           while(1)return;
  238.                          }
  239.                          while(!key9);
  240.                      delay(5);
  241.                          while(1);   
  242.                         }
  243.                         }
  244.                   }                                       
  245.                   while(!key6);
  246.                   delay(5);
  247.          }        
  248.           if(key7==0)
  249.          {
  250.                   delay(5);
  251.                   if(key7==0)
  252.                   {
  253.                            n=7;
  254.                            display(n);
  255.                            P0=0xbf;
  256.                            while(1)
  257.                         {
  258.                         keep=0;                         //开启蜂鸣器
  259.                         delay(500);
  260.                         keep=1;
  261.                         delay(500);
  262.                          if(key9==0)
  263.                         {
  264.                          delay(5);
  265.                          if(key9==0)
  266.                          {
  267.                             keep=1;
  268.                             n=0;        
  269.                 display(n);
  270.                                 P0=0xff;
  271.                           while(1)return;
  272.                          }
  273.                          while(!key9);
  274.                      delay(5);
  275.                          while(1);   
  276.                         }
  277.                         }
  278.                   }                                       
  279.                   while(!key7);
  280.                   delay(5);         
  281.          }        
  282.          if(key8==0)
  283.          {
  284.                   delay(5);
  285.                   if(key8==0)
  286.                   {
  287.                            n=8;
  288.                            display(n);
  289.                            P0=0x7f;
  290.                            while(1)
  291.                         {
  292.                         keep=0;                         //开启蜂鸣器
  293.                         delay(500);
  294.                         keep=1;
  295.                         delay(500);
  296.                          if(key9==0)
  297.                         {
  298.                          delay(5);
  299.                          if(key9==0)
  300.                          {
  301.                             keep=1;
  302.                             n=0;        
  303.                 display(n);
  304.                                 P0=0xff;
  305.                           while(1)return;
  306.                          }
  307.                          while(!key9);
  308.                      delay(5);
  309.                          while(1);   
  310.                         }
  311.                         }
  312.                   }                                       
  313.                   while(!key8);
  314.                   delay(5);         
  315.          }        
  316. }
  317. void main()
  318. {
  319.    while(1)
  320.    {
  321.            key();
  322.    }
  323. }  
复制代码

所有资料51hei提供下载:
抢答器.rar (38.13 KB, 下载次数: 49)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表