打印
[AVR单片机]

maga128控制灯的一个问题

[复制链接]
1325|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cyun0223|  楼主 | 2012-7-10 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
控制元器件:矩阵键盘、八个指示灯、数码管

工作:按下按键1,第一位数码管显示1,第一个指示灯亮 (且灯亮2秒);
        按下按键2,第二位数码管显示2,第二个指示灯亮(且灯亮2秒);
        依此类推,按下按键8时,又回到第一位数码管显示8,第一个指示灯亮(且灯亮2秒);

待解决问题:例如按下1时,一灯亮。再接着快速按下2时,2灯亮,1灯还会亮一会。此
                 时如何控制?我现在只能做到按下2时,1灯就灭了。

求大侠指点,万分感谢!!!!!

相关帖子

沙发
cyun0223|  楼主 | 2012-7-10 11:07 | 只看该作者
也即是要满足,每个灯单独控制,灯亮的时间又不影响程序的运行.

刚学着写一些程序,求帮助

使用特权

评论回复
板凳
joyme| | 2012-7-10 14:29 | 只看该作者
取决于你控制灯的硬件接法,只是硬件上要保证每个灯能单独控制亮或灭
最简单的是不同的灯用不同的IO口控制,程序上,每个灯定义一个字节,第八位表示状态,低七位是个计数器
e.g. 定义一个函数
uchar       b_ledcnt[8] = {0}
void         LEDCtrl(void)
{
       uchar      i;
       for(i=0;i<8;i++)
       {
                if((b_ledcnt[i] & 0x80) !=0)
                {
                       b_ledcnt[i]++;
                       if((b_ledcnt[i] & 0x7f) >= 20)   
                        {
                                b_ledcnt[i]  = 0;
                                clr_led(i);                       
                        }
                }
        }
}
b_ledcnt[i] 在灯点亮(即按下响应按键时)设置为 0x80; 主循环里每100ms调用一次这个函数就能完成定时2s后灭灯

使用特权

评论回复
地板
joyme| | 2012-7-10 14:31 | 只看该作者
每次按键控制亮灯函数可以这么写
void     Light_LED(uchar    index)
{
       set_led(index);
       b_ledcnt[index] = 0x80;
}

使用特权

评论回复
5
cyun0223|  楼主 | 2012-7-10 15:16 | 只看该作者
3# joyme



clr_led(i);
是什么函数啊?是关灯?
真是感谢,马上试试

使用特权

评论回复
6
cyun0223|  楼主 | 2012-7-10 15:29 | 只看该作者
4# joyme



B口控制8个灯,

使用特权

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

本版积分规则

0

主题

40

帖子

1

粉丝