请教大神,我想使用按键控制数码管显示不同的内容,为啥实现不了呢

m0_37814612 2020-07-20 11:04:32
教大神,我想使用按键控制数码管显示不同的内容,为啥实现不了呢,同一个按键,按一次显示温度、按一次显示时间,如此循环。按键加了延时后,按下去后数码管会变黑也切换不了。感觉按键处理这块有问题,求帮我分析下。


u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值
u8 DisData[8];
u8 DisplayData[8];
u8 Data[8];



u8 keypro() //按键处理函数
{
u8 i,flag=0,t=0;
if(k1==0)
{
if(k1==0)
{
for(i=0;i<2;i++)
{
delay2s();
flag++;
if(flag==2)flag=0;
}
}
//while(!k1);
}
switch(flag)
{
case (0):t=0;break;
case (1):t=1;break;
}
return t;

}


void dyna() \\数码管显示函数
{
unsigned int i;
for(i=0;i<8;i++)
{
switch(i)
{
case (0):SA=0;SB=0;SC=0;break;
case (1):SA=1;SB=0;SC=0;break;
case (2):SA=0;SB=1;SC=0;break;
case (3):SA=1;SB=1;SC=0;break;
case (4):SA=0;SB=0;SC=1;break;
case (5):SA=1;SB=0;SC=1;break;
case (6):SA=0;SB=1;SC=1;break;
case (7):SA=1;SB=1;SC=1;break;
}
switch(keypro())
{
case 1:Data[i]=DisplayData[i];break;
case 0:Data[i]=DisData[i];break;
}
GPIO_DIG=Data[i];
delay(20);
GPIO_DIG=0x00;//消隐
}
}
...全文
2773 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_22603493 2020-07-21
  • 打赏
  • 举报
回复
+1同样的问题
weixin_40285464 2020-07-21
  • 打赏
  • 举报
回复
不错,很实用。。。
jjhzml 2020-07-21
  • 打赏
  • 举报
回复
不错,很实用。。。
  • 打赏
  • 举报
回复
我的按键代码不需要IF,要充分理解程序,莫生搬硬套。
  • 打赏
  • 举报
回复
u8 keypro() //按键处理函数 返回的都是同一个值哪里实现切换? 要实现切换很简单即设置一个布尔变量bit k=0;然后每按一次按键就取反即可。 {char a=0;while(++a==0&&!k1);k=~k;return k;}这样的逻辑思路就可以实现了。 然后判断k的逻辑值去执行不同事件即可。
  • 打赏
  • 举报
回复
加松手检测{char a=0;while(++a==0&&!k1);k=~k;while(!k1);return k;}另外k不能声明在函数内,这些都是基础知识。
m0_37814612 2020-07-20
  • 打赏
  • 举报
回复
引用 1 楼 智者知已应修善业 的回复:
u8 keypro() //按键处理函数
返回的都是同一个值哪里实现切换?
要实现切换很简单即设置一个布尔变量bit k=0;然后每按一次按键就取反即可。
{char a=0;while(++a==0&&!k1);k=~k;return k;}这样的逻辑思路就可以实现了。
然后判断k的逻辑值去执行不同事件即可。



u8 keypro()
{
bit k=0;
if(k1==0)
{char a=0;
while(++a==0&&!k1);
k=~k;
}
return k;
}

按键按下去切换了,但是没有锁定, 松开又显示回温度了

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧