打印

怎样实现一个按钮按一下灯亮再按一下灯灭?

[复制链接]
18662|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
九鼎自动化|  楼主 | 2011-6-17 13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人是菜鸟,手头有个ARM的开发板,具体怎么编程实现让一个按钮,按一下灯亮,再按一下等灭!求高人指点~~~~

相关帖子

沙发
lxj3721| | 2011-6-17 14:10 | 只看该作者
就把ARM当51单片机用就ok了,找到你的开发板上的ARM芯片型号,查处对应的引脚功能,编好程序下载进去不就ok了……

使用特权

评论回复
板凳
ytfdhb| | 2011-6-17 14:21 | 只看该作者
哥,这个真没法帮你~~

使用特权

评论回复
地板
liuf| | 2011-6-17 14:44 | 只看该作者
~~

使用特权

评论回复
5
huluoboo| | 2011-6-18 21:17 | 只看该作者
这个需求是状态机理论中的入门案例:)

使用特权

评论回复
6
klpchan| | 2011-6-19 00:20 | 只看该作者
不是裸机程序?像写51的一样写不可以么?
要是驱动就查查宋宝华的linux设备驱动开发详解吧~

使用特权

评论回复
7
九鼎自动化|  楼主 | 2011-6-20 15:46 | 只看该作者
我没学过51呀!就会点PLC编程呀!

使用特权

评论回复
8
九鼎自动化|  楼主 | 2011-6-20 15:54 | 只看该作者
我这个是伟研公司WY-STM32的开发板!刚接触单片机~~

使用特权

评论回复
9
woailala011| | 2011-7-13 09:30 | 只看该作者
两种情况:
裸机的话很简单,几行代码就搞定了,你随便找个单片机例程看懂了套用下或者看教程。。
    采用中断来捕获按键是否按下,然后再软件消抖,确定的确是按下了,执行代码 LED ^= Led_bit;   
要是在操作系统上运行,就得写驱动了,稍微会麻烦一点楼上给出了 宋宝华的 那本linux 驱动详解那本书,参照里面的io控制驱动,还是比较简单的。。

使用特权

评论回复
10
jinkeluck| | 2011-7-14 17:23 | 只看该作者
定义个计数器,按一下,计数器+1。判断计数器,奇数则灯亮,偶数则灯灭。

话说本人是ARM菜鸟。

使用特权

评论回复
11
strang| | 2011-7-14 20:27 | 只看该作者
NXP  LPC的例程:
#include "config.h"

#define         BEEP        1 << 7                // P0.7控制BEEP

const uint32 LED1 = (0x55 << 16);
/*
*********************************************************************************************************
** 函数名称 :IRQ_Eint0()
** 函数功能 :外部中断0 EINT0服务程序
** 入口参数 :无。
** 出口参数 :无。
*********************************************************************************************************
*/
void __irq IRQ_Eint0 (void)
{
        /*         等待外部中断信号恢复为高电平
                 若信号保持为低电平,中断标志会一直置位。*/
        while ((EXTINT & 0x01) != 0)
        {
                EXTINT = 0x01;                                        // 清除EINT0中断标志
        }
       
        VICVectAddr = 0;                                        // 向量中断结束
}

/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :演示外部中断唤醒掉电的CPU
** 入口参数 :无。
** 出口参数 :无。
*********************************************************************************************************
*/
int main (void)
{
        PINSEL0 = 0x00000000;                                // 管脚连接GPIO
        PINSEL1 = 0x00000001;                                // P0.16连接EINT0
        IO0DIR  = BEEP;                                                // 设置BEEP控制口为输出,其余输入
       
        PINSEL2 = PINSEL2 & (~0x08);// P1[25:16]连接GPIO
        IO1DIR  = LED1;                                // 设置LED1控制口为输出
       
        IRQEnable();                                                // 使能IRQ中断
       
        /* 外部中断0初始化 */
        VICIntSelect   = 0x00000000;                // 设置所有中断分配为IRQ中断
        VICVectCntl0   = 0x20 | 14;                        // 分配外部中断0到向量中断0
        VICVectAddr0   = (uint32)IRQ_Eint0;        // 设置中断服务程序地址
        VICIntEnable   = 1 << 14;                        // 使能EINT0中断
        EXTWAKE        = 0x01;                                // 外部中断0唤醒芯片
        EXTINT         = 0x01;                                // 清除EINT0中断标志
       
        IO0SET = BEEP;
       
        IO1SET = LED1;

        while (1)       
        {
                PCONP = 0x00;                                        // 关闭定时器、RTC、UART等功能部件
                PCON  = 0x02;                                        // 系统进入掉电模式
               
                /* 当系统被唤醒后,取反BEEP控制 */
                if ((IO0SET & BEEP) == 0) IO0SET = BEEP;
                        else IO0CLR = BEEP;
                if ((IO1SET & LED1) == 0) IO1SET = LED1;
                        else IO1CLR = LED1;
        }

        return (0);
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

供你参考。

使用特权

评论回复
12
0sidamingbu0| | 2011-7-15 08:38 | 只看该作者
楼主你这 邮递跳级了吧 回去看看单片机取吧

使用特权

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

本版积分规则

0

主题

3

帖子

0

粉丝