2686|8

16

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

按键功能实现不了 [复制链接]

#include
#include
#define uchar unsigned char
#define uint  unsigned int
  sbit key1=P0^1;         //显示‘1’按下
  sbit key2=P0^3;          //显示‘2’按下
  sbit key3=P0^5;          //显示‘3’按下
  sbit key4=P0^7;           //显示‘4’按下
  sbit over=P2^0;                 //结束标志

  #define temp1 1
  #define temp2 2
  #define temp3 3
  #define temp4 4
uchar c,count,count1,count2,temp,num;
uchar code table[]={ 0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   //数码管显示
  void delayms(uchar xms)             //延时函数
  { uchar i,j;
    for(i=xms;i>0;i--)
          for(j=110;j>0;j--);
          }
void  c_to_port(uchar c)          //发送单个字符
  { SBUF=c;
    while(TI==0);
        TI=0;
           }
  void         s_to_port(uchar *s)            //发送字符串
  {  while(*s!='\0')
      { c_to_port(*s);
            s++;
            delayms(5);
          }
        }

        void keyscan( uchar temp)         //键盘扫描
        {           count1=0;
        if( key1==0)
              { delayms(10);
                       
                     if(key1==0)
                           {   if( temp1==temp)
                                    count1++;          //判断正确,count1+1
                                   else
                                   { count2++;                   //判断错误,count2+1
                                    if(count2==3)            //错误超过两次,结束
                                         over=0;                 //低电平,P2^0口LED亮                  
                                         }         
                                }
                         while(!key1);                
                  }
          if( key2==0)
              { delayms(10);
                     if(key2==0)
                           {   if(temp2==temp)
                                count1++;
                                   else
                                   { count2++;
                                     if(count2==3)
                                         over=0;
                                   }          
                                }
                            while(!key2);             
                  }
           if( key3==0)
              { delayms(10);
                     if(key3==0)
                           { if( temp3==temp)
                                    count1++;
                                 else
                                   { count2++;
                                     if(count2==3)
                                      over=0;
                                   }               
                                }
                            while(!key3);      
                  }                                                                                           
           if( key4==0)
              { delayms(10);
                     if(key4==0)
                           {   if( temp4==temp)
                                    count1++;
                                   else
                                   { count2++;
                                   if(count2==3)
                    over=0;       
                                   }
                           }
                            while(!key4);             
                  }
            count=count1;
        }

        void main()
        { P0=0xaa;         //4个按键,初始值置高电平
          over=1;
          SCON=0x40;
      TMOD=0x21;
          TH1=0xfd;
          TL1=0xfd;
          TH0=(65536-45872)/256;
          TL0=(65536-45872)%256;  //定时50ms
          PCON=0x00;
          TI=0;
          TR1=1;
          TR0=1;
          ET0=1;
          EA=1;
          delayms(100);
           while(1)
                {   if(num==60)           //延时3s
                      { num=0;
                            c=rand()%4;          //产生随机数
                            c_to_port(c+'1');  //发送给主机
                                temp=c+1;          //与按下的对应键对比
                                keyscan(temp);
                           P1=table[count-1]; //显示正确的个数
                          }
            }
       
        }
          
void T0_time() interrupt 1             //定时器T0中断
         { TH0=(65536-45872)/256;
           TL0=(65536-45872)%256;
           num++;
         }
此帖出自51单片机论坛

最新回复

问题说的太笼统了,把问题说清楚详细一些,先实现一个按键的,再综合起来  详情 回复 发表于 2014-4-4 18:04
点赞 关注
 

回复
举报

994

帖子

3

TA的资源

一粒金砂(高级)

沙发
 
先把中断去掉,跟踪下寄存器,看结果怎么样
此帖出自51单片机论坛
 
 
 

回复

2886

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
怎么个实现不了法?
此帖出自51单片机论坛
 
个人签名昵称:灰小子
 
 

回复

1298

帖子

0

TA的资源

纯净的硅(高级)

4
 
先单个按键的功能实现后再慢慢添加功能,单元实验成功后再把多个单元汇聚到一起,我一向都是这么做的,另外其实一般很少有人有耐心去看程序的,这是实话……
此帖出自51单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

4008

帖子

0

TA的资源

版主

5
 
楼上说的是
此帖出自51单片机论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

6
 
4L说的对,大部分人根本没心思去看完这段程序……不过LZ可以尝试看看汇编
此帖出自51单片机论坛

点评

让楼主看汇编?  详情 回复 发表于 2014-4-4 15:32
 
 
 

回复

173

帖子

0

TA的资源

纯净的硅(初级)

7
 
ll6030711 发表于 2014-4-2 17:52
4L说的对,大部分人根本没心思去看完这段程序……不过LZ可以尝试看看汇编

让楼主看汇编?
此帖出自51单片机论坛

点评

一些简单的汇编应该还是看得懂的吧,如果不行的话,那不如把一个个模块分开来运行,一个一个测试,做好一个再说其他的  详情 回复 发表于 2014-4-4 17:39
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

8
 
ahshmj 发表于 2014-4-4 15:32
让楼主看汇编?

一些简单的汇编应该还是看得懂的吧,如果不行的话,那不如把一个个模块分开来运行,一个一个测试,做好一个再说其他的
此帖出自51单片机论坛
 
 
 

回复

196

帖子

0

TA的资源

一粒金砂(高级)

9
 
问题说的太笼统了,把问题说清楚详细一些,先实现一个按键的,再综合起来
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表