zoukankan      html  css  js  c++  java
  • ARM4412裸板驱动LED灯.按键,蜂鸣器的驱动

    首先找出板子电路图,以LED为例

    接下来就是电路的网标:

    到对应的芯片手册里区找寄存器的描述

    通过对相应寄存器的操作来操作LED灯:

    首先将对应的寄存器的地址注册成一个文件:reg.h

     1 
      2 
      3 
      4 
      5 #define gpiobase 0x11000000
      6 
      7 #define GPM4CON (*(volatile unsigned long *)(gpiobase + 0x02E0))
      8 #define GPM4DAT (*(volatile unsigned long *)(gpiobase + 0x02E4))
      9 
     10 #define GPX3CON (*(volatile unsigned long *)(gpiobase + 0x0C60))
     11 #define GPX3DAT (*(volatile unsigned long *)(gpiobase + 0x0C64))
     12 
     13 #define GPD0CON (*(volatile unsigned long *)(gpiobase + 0x4000A0))
     14 #define GPD0DAT (*(volatile unsigned long *)(gpiobase + 0x4000A4))

    然后是对寄存器的赋值:

      1 
      2 
      3 #include "reg.h"
      4 
      5 int(*delay)(int)=0xc3e25f90;
      6 int(*print)(char*)=0xc3e114d8;
      7 
      8 void led_off(void);
      9 void led_on(void);
     10 void pwm_off(void);
     11 void pwm_on(void);
     12 
     13 int test(void)
     14 {
     15         GPX3CON &=  ~(0xf << 8);//设置12位K2为0
     16         GPX3CON &=  ~(0xf << 12);//设置12位K2为0
     17         while(1)
     18         {
     19             if(GPX3DAT & (1 << 2))//如果3_2口为1,则说明按键没按
     20             {
     21                 led_off();
     22                 print("lease input
    ");
     23 
     24             }
     25             else
     26             {
     27                 led_on();
     28                 print("K1 put down ,LED TURN ON
    ");
     29             }
     30             if(GPX3DAT & (1 << 3))//如果3_2口为1,则说明按键没按
     31             {
     32                 pwm_off();
     33                 print("lease input
    ");
     34             }
     35             else
     36             {
     37                 pwm_on();
     38                 delay(5000);
     39                 print("K2 put down ,BWM: TURN ON
    ");
     40             }
     41         }
     42     return 0;
     43 }
     44 
     45 void pwm_on(void)
     46 {
     47     GPD0CON &= ~0xffff;
     48     GPD0CON |= 0x1;//配置寄存器为2
     49     GPD0DAT |= 0x1;//date=0xf
     50 }
     51 
     52 void pwm_off(void)
     53 {
     54     GPD0CON &= ~0xffff;
     55     GPD0CON |= 0x0;
     56 //  GPD0DAT &=0x0 ;//date=0xf
     57 
     58 }
     59 void led_off(void)
     60 {
     61     GPM4CON &= ~0xffff;//清零
     62     GPM4CON |= 0x0000;//0---3位清零
     63     GPM4DAT |= 0x0;//date=0xf关闭置一
     64 }
     65 
     66 void led_on(void)
     67 {
     68     GPM4CON &= ~0xffff;
     69     GPM4CON |= 0x1111;//配置寄存器3-0-----3-3全为1111,全为输出模式
     70     GPM4DAT &= ~0x1;//打开置0-4位为0000
     71 }
     72 
    View Code

    这里写了一个while(1)循环,如果没有按键操作的时候将会一直打印“please input”,当K1按下的时候LED会两起,输出“print("K1 put down ,LED TURN ON ");”当K2按下的时候,蜂鸣器会响起,然后打印 print("K2 put down ,BWM: TURN ON ");

    dnw下载到板子测试程序:

    K1按下:

    K2按下:

  • 相关阅读:
    Algs4-1.3.44文本编辑器的缓冲区
    Algs4-1.3.42复制栈
    Algs4-1.3.41复制队列采用for方式实现
    Algs4-1.3.39环形缓冲区
    Algs4-1.3.40前移编码
    Algs4-1.3.38删除第k个元素-数组实现
    安全测试的一些漏洞和测试方法
    Java内存自动回收,为什么会有内存泄露?
    三款主流静态源代码安全检测工具比较
    Fortify源码安全检测工具
  • 原文地址:https://www.cnblogs.com/hongzhunzhun/p/4506409.html
Copyright © 2011-2022 走看看