找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个单片机按键程序是哪里错了

  [复制链接]
跳转到指定楼层
楼主


请问想实现独立键盘k4(sbit k4=P1^3)按下,会从“欢迎使用”画面进入“IC”数据画面,但是在烧写程序时,单片机不会等待按键按下或者按键按下TFT屏幕出错。请问是哪里错了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2018-4-28 16:26 | 只看该作者
子函数是一直等待的,主函数中,怎么能判断得到start==1呢

~~~~~~~~~~
回复

使用道具 举报

板凳
ID:318910 发表于 2018-4-29 14:36 | 只看该作者
等待按键按下前不就调用了welcom()吗
回复

使用道具 举报

地板
ID:318910 发表于 2018-4-29 14:37 | 只看该作者
等待按键按下之前就调用welcom ()了
回复

使用道具 举报

5#
ID:319019 发表于 2018-4-29 17:32 | 只看该作者
welcome放到按键函数里去
回复

使用道具 举报

6#
ID:302865 发表于 2018-5-1 09:49 | 只看该作者
devcang 发表于 2018-4-28 16:26
子函数是一直等待的,主函数中,怎么能判断得到start==1呢

~~~~~~~~~~

那请问应该怎么改
回复

使用道具 举报

7#
ID:302865 发表于 2018-5-1 09:51 | 只看该作者
cj52 发表于 2018-4-29 14:37
等待按键按下之前就调用welcom ()了

先调用welcome,然后等待子函数,按键按下会让start=1,再判断start==1,调用IC函数
回复

使用道具 举报

8#
ID:319344 发表于 2018-5-1 11:59 | 只看该作者
我来说一下为什么单片机不会等待按键按下,你在键值按下前有个延时1000,就会对按键判断产生影响,而且软件延时消抖根本用不了那么长时间,10~20us就可以了,如果你是按下就松开,不建议你设置成这样,除非你是按下后直到执行了相应功能再松开
回复

使用道具 举报

9#
ID:319538 发表于 2018-5-1 12:14 来自手机 | 只看该作者
你发出来的都没问题啊,欢迎界面如果能显示的话,按键按下去再出错说明错误有冲突,你把欢迎放在清屏语句后面,不放在循环里面试试看
回复

使用道具 举报

10#
ID:319538 发表于 2018-5-1 12:15 来自手机 | 只看该作者
因为你延时之后马上又继续循环,那就会在没有清屏的时候直接出现欢迎这个语句,导致屏幕出错
回复

使用道具 举报

11#
ID:301728 发表于 2018-5-1 14:50 | 只看该作者
while(1)
{
   welcome();
   Delay(1000);
   judge1();
  if(start==1)
   break;
}
clear();
Ic();
Delay(1000);
如果把welcome放在while(1)里面,就算是start=1也会显示welcome
回复

使用道具 举报

12#
ID:302865 发表于 2018-5-3 09:39 | 只看该作者
wenzedong 发表于 2018-5-1 11:59
我来说一下为什么单片机不会等待按键按下,你在键值按下前有个延时1000,就会对按键判断产生影响,而且软件 ...

网上说消抖时间一般是10-20ms,那如果是按下松开应该怎么写程序
回复

使用道具 举报

13#
ID:302865 发表于 2018-5-3 10:39 | 只看该作者
许三少天 发表于 2018-5-1 12:14
你发出来的都没问题啊,欢迎界面如果能显示的话,按键按下去再出错说明错误有冲突,你把欢迎放在清屏语句后 ...

请问,欢迎界面放在了循环外边,但是按键按下,没有反应,一直是欢迎界面。是什么问题
回复

使用道具 举报

14#
ID:321043 发表于 2018-5-3 10:40 | 只看该作者
进不了判断程序
回复

使用道具 举报

15#
ID:319538 发表于 2018-5-6 09:30 | 只看该作者
sacredyy 发表于 2018-5-3 10:39
请问,欢迎界面放在了循环外边,但是按键按下,没有反应,一直是欢迎界面。是什么问题

那就要分析了,按键检测模块没有问题,但是按键没有反应,说明你这个延时模块有问题。Delay(1000)这句有问题
回复

使用道具 举报

16#
ID:319538 发表于 2018-5-6 09:33 | 只看该作者
无法进入while(1)这个循环,说明问题出在前面的语句,你需要把你的显示语句welcome()检查一下。不过正常来说,编译通过的话应该不是一些死循环这种逻辑错误
回复

使用道具 举报

17#
ID:323345 发表于 2018-5-6 11:41 | 只看该作者
可能是语法错误吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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