发新帖我要提问
12
返回列表
打印

单片机菜鸟求助:状态机、独立按键问题

[复制链接]
楼主: 初学-菜鸟
手机看帖
扫描二维码
随时随地手机跟帖
21
初学-菜鸟|  楼主 | 2012-5-29 21:49 | 只看该作者 回帖奖励 |倒序浏览
一会就沉了,晕。。
系统晶振12MHz,12T。4位共阴数码管,P3的低4位分别连着4个独立按键,P1口接8个LED。

怎么每次都要输验证码。。。。

使用特权

评论回复
22
初学-菜鸟|  楼主 | 2012-5-30 19:40 | 只看该作者
咋办,问题还是解决不了,,,, 1# 初学-菜鸟

使用特权

评论回复
23
joyme| | 2012-5-31 16:39 | 只看该作者

    TH1 += (65536-10000)/256;
    TL1 += (65536-10000)%256;

前面没注意看附件,问题很简单,就是重载Timer初值错误 ,不知道你哪里学的这样重载Timer初值
你这种写法, THL1,TL1类似全局变量,每次重载的值不一样即定时不一样,把 “+=” 改成 “=”就行了

使用特权

评论回复
24
初学-菜鸟|  楼主 | 2012-5-31 17:12 | 只看该作者
这种方法在网上学来的,可以避免长时间的时间误差累计。
首先非常感谢你的回答,我回家试试。。不过这个时间没差多少吧,产生中断到进入中断的时间差也没有多久吧!
23# joyme

使用特权

评论回复
25
初学-菜鸟|  楼主 | 2012-6-1 09:08 | 只看该作者
回家试了试,还是老样子,看来问题不在这。 23# joyme

使用特权

评论回复
26
domo3020| | 2012-6-1 09:40 | 只看该作者
这两个我觉得应该定义成枚举类型 ,两个共用一个存储空间
static uchar Key_State   = 0;           //按键状态
static uchar Key_Prev    = 0;           //上次按键

使用特权

评论回复
27
joyme| | 2012-6-1 11:50 | 只看该作者
我看到你有用LED测试定时器,如果LED亮、灭的时间差不多就说明重载没有问题。状态机返回的值或了KEY_DOWN和KEY_UP,而主程序里case的Key_Release只或了KEY_UP,你改改

使用特权

评论回复
28
joyme| | 2012-6-1 11:53 | 只看该作者
Key_Press = Get_Key();

Key_Press或了KEY_DOWN
Key_Return  = (KEY_UP | Key_Prev)

Key_Return实际是按键值或 KEY_DOWN | KEY_UP
#define KEY_S1_RELEASE    (KEY_UP|KEY_S1_DOWN)

而Release只或了KEY_UP当然不会正确执行按键

使用特权

评论回复
29
初学-菜鸟|  楼主 | 2012-6-1 12:21 | 只看该作者
注意Get_Key函数返回的是KEY_S1_DOWN,然后或上KEY_UP,相当于KEY_S1_RELEASE了。 28# joyme

使用特权

评论回复
30
初学-菜鸟|  楼主 | 2012-6-1 12:24 | 只看该作者
这个问题真是奇了怪了啊,,,调了好长时间都找不出问题所在:(

使用特权

评论回复
31
joyme| | 2012-6-1 14:48 | 只看该作者
哦,你把这个绕得太复杂了,我以为KEY_S*_DOWN是按下键返回的是或了KEY_DOWN的,你把GET_KEY()里的P3=0xff(在初始化端口时设为输入口就好)去掉试试

使用特权

评论回复
32
joyme| | 2012-6-1 14:56 | 只看该作者
其实一般写程序不建议在中断里调用扫描按键、显示等函数,而是在主循环里做。整个程序分多个任务模块,用一个定时器(做基准时间线,中断里只做重载和相关变量计数),在主循环里判断基准时间线到了某个值就执行某个任务,还可以做不同任务下的超时等等。

使用特权

评论回复
33
阮天宇00| | 2012-6-5 14:04 | 只看该作者
就是中断使用的问题。

以我目前的水平来看是100%中断的问题。

你中断调用这函数,又用中断调用数码管。

而且你调用按键函数的时候,假如你有按键,你这个函数没执行完,就又来一次中断。

改进的方法是:进入按键的时候,把中断允许位关闭!函数调用结束的时候把中断允许位打开。

使用特权

评论回复
34
xouou_53320| | 2013-1-7 10:36 | 只看该作者
楼主犯了一个错误,而且大家都已经指出来了
那就是不要在中断函数中执行其他大时间片函数 扫描按键很占时间片的

使用特权

评论回复
35
a526374696| | 2017-9-1 11:18 | 只看该作者
和厉害

使用特权

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

本版积分规则