找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1228|回复: 0
收起左侧

抢答器的单片机源码

[复制链接]
ID:405619 发表于 2018-11-30 16:40 | 显示全部楼层 |阅读模式
抢答器

单片机源程序如下:
  1. #include<reg52.h>
  2. #include"key.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit LSA=P2^2;
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;
  8. sbit k1=P3^1;
  9. sbit k2=P3^0;
  10. sbit k3=P3^2;
  11. sbit k4=P3^3;
  12. sbit beep=P1^5;
  13. uchar wei[8],flag=1,flag2,flag1;
  14. char ns=0,ms=0,s=10;
  15. uchar num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  16.              0x07,0x7f,0x6f,0x40};

  17. void init()
  18. {
  19. TMOD=0x01;        //定时器0,方式一
  20. TH0=(65536-400)/256;                //赋初值
  21. TL0=(65536-400)%256;
  22. EA=1;           //开总中断
  23. ET0=1;           //开定时器1的中断
  24. TR0=0;           //开定时
  25. }

  26. void feng()
  27. {
  28. uchar i;
  29. for(i=0;i<50;i++)
  30. {
  31.   beep=0;
  32.   delayns(200);
  33.   beep=1;
  34.   delayns(200);
  35. }
  36. }

  37. void zhuanhua()
  38. {
  39. wei[0]=num[ns%10];
  40. wei[1]=num[ns/10];
  41. wei[2]=num[10];
  42. wei[3]=num[ms%10];
  43. wei[4]=num[ms/10];
  44. wei[5]=num[10];
  45. wei[6]=num[s%10];
  46. wei[7]=num[s/10];
  47. }

  48. void xianshi()
  49. {
  50. uchar i;
  51. for(i=0;i<8;i++)
  52. {
  53.   switch(i)
  54.   {
  55.    case 0:
  56.     LSA=0,LSB=0,LSC=0;break;
  57.    case 1:
  58.     LSA=1,LSB=0,LSC=0;break;
  59.    case 2:
  60.     LSA=0,LSB=1,LSC=0;break;
  61.    case 3:
  62.     LSA=1,LSB=1,LSC=0;break;
  63.    case 4:
  64.     LSA=0,LSB=0,LSC=1;break;
  65.    case 5:
  66.     LSA=1,LSB=0,LSC=1;break;
  67.    case 6:
  68.     LSA=0,LSB=1,LSC=1;break;
  69.    case 7:
  70.     LSA=1,LSB=1,LSC=1;break;
  71.   }
  72.   P0=wei[i];
  73.   delayns(200);
  74.   P0=0x00;
  75. }
  76. }

  77. void keyscan()
  78. {
  79.   if(flag==1)
  80.   {
  81.    if(k1==0)
  82.    {
  83.     delayns(100);
  84.     if(k1==0)
  85.     {
  86.          if(flag1==0)
  87.          {
  88.       TR0=1;
  89.       flag=0;
  90.           flag2=0;
  91.           flag1=1;
  92.          }
  93.     }
  94.    }
  95.   }
  96. while(k1!=1);
  97. if(flag==0)
  98. {
  99.    if(k2==0)
  100.    {
  101.     delayns(100);
  102.     if(k2==0)
  103.     {
  104.      s=10;ms=0;ns=0;
  105.      TR0=0;
  106.      flag=1;
  107.          flag1=0;
  108.          flag2=0;
  109.     }
  110.   }
  111. }
  112. while(k2!=1);
  113.      if(flag1==1)
  114.          {
  115.           key_num();
  116.       if((keynum>=1)&&(keynum<=9))
  117.       {          
  118.        TR0=0;
  119.        LSA=0;LSB=0;LSC=0;
  120.        P0=num[keynum];
  121.            keynum=0;
  122.            flag1=0;
  123.        flag2=1;
  124.           }
  125.          }
  126. }

  127. void main()
  128. {
  129. init();
  130. while(1)
  131. {
  132.   keyscan();
  133.   if(flag2==0)
  134.   {
  135.    zhuanhua();
  136.    xianshi();
  137.   }
  138. }
  139. }

  140. void zd() interrupt 1
  141. {
  142. TH0=(65536-400)/256;//赋初值
  143. TL0=(65536-400)%256;       
  144. ns--;                                 
  145. if(ns==-1)
  146. {
  147.   ns=49;
  148.   ms--;
  149.   if(ms==-1)
  150.   {
  151.    ms=49;
  152.    s--;
  153.   }
  154. }
  155. if((s==0)&&(ms==0)&&(ns==0))
  156. {
  157.   s=0;ms=0;ns=0;       
  158.   TR0=0;
  159.   feng(); //在嵌套一个中断,消除蜂鸣器占用问题
  160. }
  161. }
复制代码

所有资料51hei提供下载:
抢答器.zip (37.91 KB, 下载次数: 7)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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