打印

把程序精简下来就是这样 怎么让按“shezhi”键时数码管不闪

[复制链接]
1720|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
国境之南|  楼主 | 2013-3-2 13:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 国境之南 于 2013-3-3 10:28 编辑

void display(uchar fen,uchar miao,uchar a_fen,uchar b_fen) //数码管显示子函数
{
dula=1;   
P0=miaotable[a_shi];
dula=0;
P0=0x00;
wela=1;
P0=0x10;
wela=0;
delay(3);
}
void keyscan()        //键盘扫描子函数
{
if(shezhi==0)       //计数按下"设置"键的次数
{
  delay(5);
  if(shezhi==0)
  {
   shezhinum++;
   while(!shezhi);
   if(shezhinum==5)    //按第五次"设置"时归零
    shezhinum=0;
  }
}
}
void main()         //主函数
{  
while(1)
{
  display(fennum,miaonum,a_num,b_num);
  keyscan();
}
}
void T0_time() interrupt 1     //中断函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
numt0++;
if(fennum!=0||miaonum!=0)
  {
   if(numt0==20)
   {
    numt0=0;
    miaonum--;
    if(miaonum==-1)
    {
     fennum-=1;
     miaonum=59;
    }
   }
  }
else
{
  TR0=0;
}   
}

相关帖子

沙发
国境之南|  楼主 | 2013-3-2 13:08 | 只看该作者
据说是因为按键扫描程序里太多延迟子函数?可该怎么改呢

使用特权

评论回复
板凳
wangyy608| | 2013-3-2 13:59 | 只看该作者
论坛里有很多按键扫描的例子,建议参考着修改;
另外还有个办法不推荐使用,在按键扫描程序的每一个while里调一下显示程序

使用特权

评论回复
地板
国境之南|  楼主 | 2013-3-2 15:15 | 只看该作者
wangyy608 发表于 2013-3-2 13:59
论坛里有很多按键扫描的例子,建议参考着修改;
另外还有个办法不推荐使用,在按键扫描程序的每一个while里 ...

我精简了下程序  你帮我指示一下呗?

使用特权

评论回复
5
wangyy608| | 2013-3-2 16:18 | 只看该作者
void keyscan()        //键盘扫描子函数
{
if(shezhi==0)       //计数按下"设置"键的次数
{
  if( ++shezhi_cnt>XXX ){shezhi_cnt=XXX+1;}
  else{shezhi_cnt=0;}
}
  if(shezhi_cnt==XX)
  {
   shezhinum++;
   if(shezhinum==5)    //按第五次"设置"时归零
    shezhinum=0;
  }
}

使用特权

评论回复
6
349264710| | 2013-3-3 15:49 | 只看该作者
既然都会使用定时器,那就设置两个标志,一个用于按键扫描,一个用于刷新数码管,在主程序中根据标志来执行对应的动作呗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝