找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机的四路抢答器程序设计

[复制链接]
跳转到指定楼层
楼主
ID:322693 发表于 2023-4-15 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4.        
  5. uchar code0[10]={0x84,0xde,0xa2,0xc2,0xd8};   //上  P1
  6. //uchar code1[10]={0x04,0xb7,0x8a,0x81,0x15,0x41,0x40,0xa7,0x00,0x01};   //下  //P2
  7. uchar code1[10]={0x04,0xb7,0x8a,0x83,0x17,0x43,0x42,0xa7,0x02,0x03};   //下  //P2

  8. sbit key1=P0^2;
  9. sbit key2=P0^4;
  10. sbit key3=P0^5;
  11. sbit key4=P0^6;

  12. sbit npn1=P0^3;
  13. sbit npn2=P0^7;

  14. sbit beep=P3^1;
  15. sbit key9=P3^6;   //复位按键

  16. uchar flag=0;
  17. uchar jishi=10;
  18. uchar n=0;

  19. uchar start=0;

  20. void delay(uint t) //延时程序
  21. {
  22. uint j;
  23. for(;t>0;t--)
  24. for(j=121;j>0;j--);
  25. }

  26. void display_P1(uchar i)//数码管显示
  27. {
  28. switch(i)
  29. {
  30.   case 0:P1=code0[0];break;
  31.   case 1:P1=code0[1];break;
  32.   case 2:P1=code0[2];break;
  33.   case 3:P1=code0[3];break;
  34.   case 4:P1=code0[4];break;
  35.   case 5:P1=code0[5];break;
  36.   case 6:P1=code0[6];break;
  37.   case 7:P1=code0[7];break;
  38.   case 8:P1=code0[8];break;
  39.   default:break;
  40. }
  41. }

  42. void display_P2(uchar i)//数码管显示
  43. {
  44. switch(i)
  45. {
  46.   case 0:P2=code1[0];break;
  47.   case 1:P2=code1[1];break;
  48.   case 2:P2=code1[2];break;
  49.   case 3:P2=code1[3];break;
  50.   case 4:P2=code1[4];break;
  51.   case 5:P2=code1[5];break;
  52.   case 6:P2=code1[6];break;
  53.   case 7:P2=code1[7];break;
  54.   case 8:P2=code1[8];break;
  55.         case 9:P2=code1[9];break;
  56.   default:break;
  57. }
  58. }

  59. void key() //键盘扫描,判断哪个人抢答
  60. {
  61.   if(start)
  62.         {
  63.         if(key1==0)
  64.         {
  65.                 delay(5);
  66.                 if(key1==0)
  67.                 {
  68.                         flag=0;
  69.                         P2=0xff;
  70.                         display_P1(1);
  71.                         while(1)
  72.                         {
  73.                                 delay(500);
  74.                                 if(key9==0)
  75.                                 {
  76.                                         delay(5);
  77.                                         if(key9==0)
  78.                                         {               
  79.                                                 jishi=9;
  80.                                                 P1=0xff;
  81.                                                 while(1) return;
  82.                                         }
  83.                                         while(!key9);
  84.                                 }
  85.                         }
  86.                 }                  
  87.                 while(!key1);
  88.         }
  89.        
  90.         if(key2==0)
  91.         {
  92.                 delay(5);
  93.                 if(key2==0)
  94.                 {
  95.                        
  96.                         flag=0;
  97.                         P2=0xff;
  98.                         display_P1(2);
  99.                         while(1)
  100.                         {
  101.                                 if(key9==0)
  102.                                 {
  103.                                         delay(5);
  104.                                         if(key9==0)
  105.                                         {
  106.                                                 jishi=10;
  107.                                                 P1=0xff;
  108.                                                 while(1) return;
  109.                                         }
  110.                                         while(!key9);  
  111.                                 }
  112.                         }
  113.                 }         
  114.                 while(!key2);
  115.                 delay(5);
  116.         }       

  117.          
  118.         if(key3==0)
  119.         {
  120.                 delay(5);
  121.                 if(key3==0)
  122.                 {
  123.                         flag=0;
  124.                         P2=0xff;
  125.                         display_P1(3);
  126.                         while(1)
  127.                         {
  128.                                 delay(500);
  129.                                 if(key9==0)
  130.                                 {
  131.                                         delay(5);
  132.                                         if(key9==0)
  133.                                         {
  134.                                                 jishi=10;
  135.                                                 P1=0xff;
  136.                                                 while(1)return;
  137.                                         }
  138.                                         while(!key9);
  139.                                           
  140.                                 }
  141.                         }
  142.                 }                                       
  143.                 while(!key3);
  144.                
  145.         }
  146.        
  147.        
  148.         if(key4==0)
  149.         {
  150.                 delay(5);
  151.                 if(key4==0)
  152.                 {
  153.                         flag=0;
  154.                         P2=0xff;
  155.                         display_P1(4);
  156.                         while(1)
  157.                         {
  158.                                 delay(500);
  159.                                 if(key9==0)
  160.                                 {
  161.                                         delay(5);
  162.                                         if(key9==0)
  163.                                         {
  164.                                                 jishi=10;
  165.                                                 P1=0xff;
  166.                                                 while(1)return;
  167.                                         }
  168.                                         while(!key9);
  169.                        
  170.                                 }
  171.                         }
  172.                 }                                       
  173.                 while(!key4);
  174.         }               
  175.         }
  176.         if(key9==0)
  177.         {
  178.                
  179.                 delay(5);
  180.                 if(key9==0)
  181.                 {
  182.                         beep=1;
  183.                         flag=1;
  184.                         start=1;
  185.                         jishi=10;
  186.                         display_P2(9);
  187.                 }
  188.                 while(!key9);
  189.         }
  190.        
  191. }

  192. void Timer0Init()
  193. {
  194.         TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

  195.         TH0=0XFC;        //给定时器赋初值,定时1ms
  196.         TL0=0X18;       
  197.         ET0=1;//打开定时器0中断允许
  198.         EA=1;//打开总中断
  199.         TR0=1;//打开定时器                       
  200. }

  201. void main()
  202. {
  203.         Timer0Init();
  204.         beep=1;
  205.         npn1=0;
  206.         npn2=0;
  207.   while(1)
  208.   {
  209.                 key();        

  210.   }
  211. }  

  212. void Timer0() interrupt 1
  213. {
  214.         static uint i;
  215.         TH0=0XFC;        //给定时器赋初值,定时1ms
  216.         TL0=0X18;
  217.         i++;
  218.         if(i==1000)
  219.         {
  220.                 i=0;
  221.                 jishi--;
  222.                 if(flag)
  223.                 {       
  224.                         display_P2(jishi);
  225.                         if(jishi==0)
  226.                         {
  227.                                 beep=0;               
  228.                                 flag=0;
  229.                                 start=0;
  230.                         }
  231.                 }
  232.         }       
  233. }
复制代码


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

使用道具 举报

沙发
ID:1079417 发表于 2023-5-23 18:09 来自手机 | 只看该作者
请问有图纸吗
回复

使用道具 举报

板凳
ID:1079417 发表于 2023-5-23 18:19 | 只看该作者
请问有这个程序的Proteus仿真电路图吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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