找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4094|回复: 8
收起左侧

基于51单片机的八路抢答器仿真+代码设计

[复制链接]
ID:116400 发表于 2018-12-16 22:39 | 显示全部楼层 |阅读模式
大家好,我是51hei的终实粉丝”小小鸟“,在我闲暇之余会给大家分享一些小的设计,本次设计的是基于51单片机的1602显示的八路抢答器(附件中有用keil4编写的完整程序和Proteus8.6绘制的仿真图),有一个教师端口的独立按键,教师按下时候代表开始抢答,1-8号任意一位同学抢答后,其他同学在按下没有效果,直到教师再一次按下下一次抢答开始又开启新一轮的抢答,在本设计中还设置了9S的倒计时,计时时间到了同学们不能够抢答,直到老师开启新一轮的抢答才能够抢答。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]="  Qiang Da QI  ";
  5. uchar code table1[]="Student:  Time:";
  6. sbit lcden=P1^2;        //液晶使能端
  7. sbit lcdrs=P1^0;        //液晶数据命令选择端
  8. sbit RW=P1^1;
  9. sbit s1=P3^2;
  10. uchar num,num1,num2,num3,shu,flag=0;
  11. void delay(uint z)
  12. {
  13.         uint x,y;
  14.         for(x=z;x>0;x--)
  15.                 for(y=110;y>0;y--);
  16. }
  17. void write_com(uchar com)
  18. {
  19.         lcdrs=0;
  20.         P0=com;
  21.         delay(5);
  22.         lcden=1;
  23.         delay(5);
  24.         lcden=0;
  25. }
  26. void write_data(uchar date)
  27. {
  28.         lcdrs=1;
  29.         P0=date;
  30.         delay(5);
  31.         lcden=1;
  32.         delay(5);
  33.         lcden=0;
  34. }
  35. void init()
  36. {
  37.         RW=0;
  38.         lcden=0;
  39.         write_com(0x38);//设置16X2显示,5X7点阵,8位数据接口
  40.         write_com(0x0c);//设置开显示,不显示光标
  41.         write_com(0x06);//写一个字符后地址指针加1
  42.         write_com(0x01);//显示清零,数据指针清零
  43. }
  44. void init1()
  45. {
  46.         TMOD=0X01;
  47.         TH0=(65536-45872)/256;
  48.         TL0=(65536-45872)%256;
  49.         EA=1;
  50.         ET0=1;
  51. }

  52. void matrixkeyscan(void)
  53. {
  54.         uchar temp,key;
  55.     P2=0xfe;
  56.     temp=P2;
  57.     temp=temp&0xf0;
  58.     if(temp!=0xf0)
  59.     {
  60.       delay(10);
  61.           temp=P2;
  62.           temp=temp&0xf0;
  63.       if(temp!=0xf0)
  64.       {
  65.         temp=P2;
  66.         switch(temp)
  67.         {
  68.           case 0xee:
  69.                shu=1;
  70.                            flag=0;
  71.                            TR0=0;
  72.                break;
  73.           case 0xde:
  74.                shu=2;
  75.                            flag=0;
  76.                            TR0=0;                  
  77.                break;
  78.           case 0xbe:
  79.                shu=3;
  80.                            flag=0;
  81.                            TR0=0;
  82.                break;
  83.           case 0x7e:
  84.                shu=4;
  85.                            flag=0;
  86.                            TR0=0;
  87.                break;
  88.          }
  89.          while(temp!=0xf0)
  90.          {
  91.            temp=P2;
  92.            temp=temp&0xf0;
  93.          }

  94.       }
  95.     }
  96.     P2=0xfd;
  97.     temp=P2;
  98.     temp=temp&0xf0;
  99.     if(temp!=0xf0)
  100.     {
  101.       delay(10);
  102.       temp=P2;
  103.       temp=temp&0xf0;
  104.       if(temp!=0xf0)
  105.       {
  106.         temp=P2;
  107.         switch(temp)
  108.         {
  109.           case 0xed:
  110.                shu=5;
  111.                            flag=0;
  112.                            TR0=0;
  113.                break;
  114.           case 0xdd:
  115.                shu=6;
  116.                             flag=0;
  117.                            TR0=0;
  118.                break;
  119.           case 0xbd:
  120.                shu=7;
  121.                            flag=0;
  122.                            TR0=0;
  123.                break;
  124.           case 0x7d:
  125.                shu=8;
  126.                             flag=0;
  127.                            TR0=0;
  128.                break;
  129.          }
  130.          while(temp!=0xf0)
  131.          {
  132.            temp=P2;
  133.            temp=temp&0xf0;
  134.          }

  135.       }
  136.       }
  137.    
  138. }
  139. void main()
  140. {
  141.         init();
  142.         init1();
  143.         write_com(0x80);
  144.         for(num=0;num<15;num++)
  145.         {
  146.                 write_data(table[num]);
  147.                 delay(5);
  148.         }
  149.         write_com(0x80+0x40);
  150.         for(num=0;num<15;num++)
  151.         {
  152.                 write_data(table1[num]);
  153.                 delay(5);
  154.         }
  155.         while(1)
  156.         {
  157.                 if(s1==0)
  158.                 delay(10);
  159.                 if(s1==0)
  160.                 {       
  161.                         while(s1==0);               
  162.                         flag=1;
  163.                         TR0=1;
  164.                         num2=0;
  165.                         shu=0;
  166.                 }
  167.                 while(flag)
  168.                 {
  169.                         if(s1==0)
  170.                         delay(10);
  171.                         if(s1==0)
  172.                         {
  173.                                 while(s1==0);
  174.                                 flag=0;
  175.                                 TR0=0;
  176.                         }
  177.                         matrixkeyscan();
  178.                         write_com(0xC8);
  179.                         write_data(shu+48);
  180.                         write_com(0xCF);
  181.                         write_data(9-num2+48);
  182. //                        if(1<=shu<=8)
  183. //                        {
  184. //                                flag=0;
  185. //                                TR0=0;
  186. ……………………

  187. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
抢答器1.zip (153.94 KB, 下载次数: 84)

评分

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

查看全部评分

回复

使用道具 举报

ID:68189 发表于 2018-12-17 09:31 | 显示全部楼层
感谢楼主的贡献.
回复

使用道具 举报

ID:116400 发表于 2018-12-19 12:58 | 显示全部楼层

老弟,在学习上有啥想法和疑问了发出来大家一起讨论谈论
回复

使用道具 举报

ID:426284 发表于 2018-12-19 18:39 | 显示全部楼层
怎么不会显示呢
回复

使用道具 举报

ID:116400 发表于 2018-12-21 12:57 | 显示全部楼层

老铁你先添加HEX文件然后仿真,如果还不显示了麻烦你添加一下我好友QQ2623724652我仔细看看是什么原因,如果存在问题我会把具体的问题发到论坛我的贴子下面的的
回复

使用道具 举报

ID:451659 发表于 2018-12-21 17:09 | 显示全部楼层
感谢楼主
回复

使用道具 举报

ID:454841 发表于 2018-12-26 11:22 来自手机 | 显示全部楼层
我想问下你的那个仿真工作是怎么样的
回复

使用道具 举报

ID:116400 发表于 2018-12-26 17:53 | 显示全部楼层
1111姐 发表于 2018-12-26 11:22
我想问下你的那个仿真工作是怎么样的

附件里面有仿真文件,你可以从附件里面看
回复

使用道具 举报

ID:672691 发表于 2019-12-24 18:19 | 显示全部楼层
楼主,代码可以改段一点吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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