找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机六路抢答器Proteus仿真设计包含源程序仿真文件

  [复制链接]
跳转到指定楼层
楼主
ID:331717 发表于 2021-12-4 21:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原创作品,禁止转载售卖,仅供学习参考!!!
功能描述:1、采用4位数码管设计。2、下排按键一一对应六位选手。
3、上排三个按键,从左到右依次为:开始、暂停、复位。
4、操作流程:上电后数码管显示“----”当主持人按下“开始”键后,倒计时60秒,开始计时,此时,六位选手就可以抢答,如有紧急情况需要停止的话,主持人按“暂停”键就可以,如果有选手抢答成功,数码管显示“1  03”,1表示是1号选手,03表示总得分3,此时按查看计分键加一分,按设置时间键减一分,当倒计时为0秒时,此题结束,表示超时没有任何选手抢答成功,蜂鸣器报警,主持人按“复位”键后重新开始。若选手超前抢答,则犯规并报警。
5、可以设定倒计时时间,在上电后,数码管显示“----”,此时按下设置时间对应的按键,进入倒计时时间设定状态,1号选手对应的按键为时间加,2号选手对应的按键为时间减,设定完成后再按设置时间键退出。
6、可以查看各选手计分情况,在初始界面下数码管显示“----”,按下查看计分对应的按键,进入计分查看状态,此时分别按下选手对应的按键可查看各选手的计分,按复位键可清空计分。

制作实物图:


仿真图:


必备的单片机开发软件和教程视频我已上传到群里,有需要的可以自行进去下载


仿真代码下载:
仿真代码.7z (97.38 KB, 下载次数: 120)





评分

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

查看全部评分

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

使用道具 举报

沙发
ID:990304 发表于 2021-12-10 10:04 | 只看该作者
代码看不到?为什么呀?
回复

使用道具 举报

板凳
ID:262 发表于 2021-12-10 16:55 | 只看该作者
1531487593 发表于 2021-12-10 10:04
代码看不到?为什么呀?

代码在附件里面,用Keil5打开,代码很大 网页好像发不完
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
  4. #define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535
  5. sbit smg1=P2^7;                //定义数码管第一位
  6. sbit smg2=P2^6;                //定义数码管第二位
  7. sbit smg3=P2^5;                //定义数码管第三位
  8. sbit keyks=P3^4;        //定义开始按键
  9. sbit keytz=P3^5;        //定义停止按键
  10. sbit keyqc=P3^6;        //定义清除按键
  11. sbit key1=P1^0;                //定义1号抢答选手
  12. sbit key2=P1^1;                //定义2号抢答选手
  13. sbit key3=P1^2;                //定义3号抢答选手
  14. sbit key4=P1^3;                //定义4号抢答选手
  15. sbit key5=P1^4;                //定义5号抢答选手
  16. sbit key6=P1^5;                //定义6号抢答选手
  17. sbit key7=P1^6;                //定义修改时间按键
  18. sbit key8=P1^7;                //定义查看计分按键
  19. sbit beep=P2^1;                //定义蜂鸣器
  20. int djs=60,js=0;                   //djs和bt是初始倒计时时间,可修改
  21. int value;
  22. int jifen1,jifen2,jifen3,jifen4,jifen5,jifen6,jifen_flag=1;
  23. //int table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳
  24. int table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40};//共阴

  25. sbit scl = P2^3;        //24C02 IO口定义
  26. sbit sda = P2^2;        //24C02 IO口定义
  27. sbit LED = P2^0;        //led IO口定义

  28. void delayms(int x)           //延时函数
  29. {
  30. char i;
  31. while(x--)
  32. {
  33.   for(i=500;i>0;i--);
  34. }
  35. }

  36. /***********************1ms延时函数*****************************/
  37. void delay_1ms(uint q)
  38. {
  39.         uint i,j;
  40.         for(i=0;i<q;i++)
  41.                 for(j=0;j<120;j++);
  42. }


  43. //24C02程序
  44. /***************启始信号 ***************************/
  45. void start()
  46. {
  47.         sda = 1;
  48.         scl = 1;
  49.         sda = 0;
  50.         scl = 0;
  51. }

  52. /****************结束信号 **************************/
  53. void stop()
  54. {
  55.         sda = 0;
  56.         scl = 1;
  57.         sda = 1;
  58.         scl = 0;
  59. }

  60. /*****************检测应答*************************/
  61. void ack()
  62. {
  63.         uchar i;
  64.         sda = 1;   
  65.         scl = 1;        
  66.         while((i < 100) & (sda == 1))        i++;
  67.         scl =0;
  68. }


  69. //void ack_zhuji()
  70. //{
  71. //        sda = 0;
  72. //        scl = 1;
  73. //        scl = 0;
  74. //        sda = 1;
  75. //}

  76. /*****************非应答*************************/
  77. void no_ack()
  78. {
  79.         sda = 1;
  80.         scl = 1;
  81.         scl = 0;
  82. }

  83. /*****************写一个字节*************************/
  84. void write_iic(uchar dat)
  85. {
  86.         uchar i;
  87.         for(i=0;i<8;i++)
  88.         {
  89.                 scl = 0;
  90.                 dat <<= 1 ;
  91.                 sda = CY;
  92.                 scl = 1;
  93.         }
  94.         scl = 0;
  95. }

  96. /*******************读一个字节***********************/
  97. uchar read_iic()
  98. {
  99.         uchar i,value;
  100.         for(i=0;i<8;i++)
  101.         {
  102.                 scl = 1;
  103.                 value <<= 1;
  104.                 if(sda == 1)
  105.                         value |= 0x01;
  106.                 scl = 0;
  107.         }
  108.         return value;
  109. }
复制代码

回复

使用道具 举报

地板
ID:361812 发表于 2022-8-5 10:53 | 只看该作者
24C02的作用是什么?
回复

使用道具 举报

5#
ID:137643 发表于 2022-8-18 16:02 | 只看该作者
yifeng5730 发表于 2022-8-5 10:53
24C02的作用是什么?

储存设定的时间,掉电不丢失
回复

使用道具 举报

6#
ID:1105312 发表于 2023-12-20 15:19 | 只看该作者
为什么一上电蜂鸣器就响,不明白
回复

使用道具 举报

7#
ID:262 发表于 2023-12-20 15:52 | 只看该作者
77777770 发表于 2023-12-20 15:19
为什么一上电蜂鸣器就响,不明白

我用的Proteus8.13没有这个情况呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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