找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机八位抢答器,请大家帮忙看看程序哪里有错误?

[复制链接]
跳转到指定楼层
楼主
ID:667983 发表于 2020-12-29 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "reg51.h"
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit k1=P1^0;
  5. sbit k2=P1^1;
  6. sbit k3=P1^2;
  7. sbit k4=P1^3;
  8. sbit k5=P1^4;
  9. sbit k6=P1^5;
  10. sbit k7=P1^6;
  11. sbit k8=P1^7;//选手按钮
  12. sbit k_1=P3^0;//主持人开始/结束按钮
  13. sbit k_2=P3^1;//按下系统清零
  14. sbit song=P3^7;//蜂鸣器

  15. uint biaozhi;
  16. unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//数码管0-9段码

  17. void delay(uint t)//输入数据延时
  18. {  
  19.     uint i,j;
  20.     for(i=0;i<t;i++)
  21.     for(j=0;j<600;j++);
  22. }
  23. void disp(uint a,uint b)//输入数字显示内容(十位,个位)  时间用途
  24. {        
  25.         P2=0xfe;
  26.         P0=led[a];
  27.         p2=0xfd;
  28.         P0=led[b];
  29.         delay(1000);
  30. }

  31. void disp2(uint a,uint b,uint c)//输入数字显示内容(十位,个位)  号牌用途
  32. {   
  33.     uint a,b,c;
  34.     P2=0xfc;
  35.     P0=led[a];
  36.     p2=0xfb;
  37.     P0=led[b];
  38.     delay(c*1000);
  39. }

  40. void clear()
  41. {
  42.     p2=0xf0;
  43.     p0=led[0];
  44. }

  45. void keys()        //抢答程序
  46. { /*处于允许抢答状态,且有人按下抢答按钮  抢答之后显示数值,改变标志终止抢答*/
  47.   //暂时未接蜂鸣器

  48.     if(k1==0&&k1==0){song=0;delay(1);biaozhi=1;disp2(0,1,1000);}     
  49.     if(k2==0&&k1==0){song=0;delay(1);biaozhi=1;disp2(0,2,1000);}
  50.     if(k3==0&&k1==0){song=0;delay(1);biaozhi=1;disp2(0,3,1000);}
  51.     if(k4==0&&k1==0){song=0;delay(1);biaozhi=1;disp2(0,4,1000);}
  52.     if(k5==0&&k1==0){song=0;delay(1);biaozhi=1;disp2(0,5,1000);}
  53.     if(k6==0&&k1==0){song=0;delay(1);biaozhi=1;disp2(0,6,1000);}
  54.     if(k7==0&&k1==0){song=0;delay(1);biaozhi=1;disp2(0,7,1000);}
  55.     if(k8==0&&k1==0){song=0;delay(1);biaozhi=1;disp2(,8,1000);}
  56. }

  57. void time60()//60秒倒计时程序
  58. {
  59.         uint a=5,b=9;
  60.         for(a>=0;a--){   
  61.     for(b<0;b--)
  62.     disp(1,a);
  63.     disp(2,b);
  64.     delay(1000);
  65.         }
  66. }

  67.         void ea()//显示开机界面
  68. {
  69.         unsigned char ci=0;
  70.         while(ci<200)//循环200次(持续一段时间)
  71.         {
  72.                 P2=0xfe;  //位选1
  73.                 P0=0x77;  //显示A
  74.                 delay(5);
  75.                 P2=0xfd;  //位选2
  76.                 P0=0x79;  //显示E
  77.                 delay(5);
  78.                 ci++;
  79.         }
  80. }

  81. void main(){
  82. uint d=10;
  83. ea();
  84. if(K1==0)//主持人按下开始
  85. {
  86. for(d>0;d--)
  87. {
  88.         disp(1,d);//10秒倒计时
  89.         key();//选手抢答
  90.         if(biaozhi==1)
  91.     {
  92.     if (k2==0)//如果按下清零按钮.系统清零
  93.     {
  94.     clear();
  95.     }
  96.         time60();

  97.     }//如果选手抢答,抢答成功进入60秒倒计时
  98.     else if(biaozhi!=1)
  99.     {
  100.     ea();
  101.     }

  102. }
  103. }
复制代码



//请问哪儿出错了啊

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

使用道具 举报

沙发
ID:867408 发表于 2020-12-29 12:22 来自手机 | 只看该作者
最好进行单步调试,这样更容易看出来哦
回复

使用道具 举报

板凳
ID:102963 发表于 2020-12-29 22:28 | 只看该作者
这样是看不出来的,可以根据仿真或实物的现象去找错误点!
回复

使用道具 举报

地板
ID:870739 发表于 2020-12-30 11:09 | 只看该作者
你这有电路图或者仿真图吗?最好发一下,看看你都用了哪些引脚,有没有进行设置。我这也有一份程序 ,要是需要我可以发给你。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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