历史上的今天
今天是:2025年02月06日(星期四)
2020年02月06日 | ARM4412裸板驱动LED灯.按键,蜂鸣器的驱动
2020-02-06 来源:eefocus
首先找出板子电路图,以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 inputn");
23
24 }
25 else
26 {
27 led_on();
28 print("K1 put down ,LED TURN ONn");
29 }
30 if(GPX3DAT & (1 << 3))//如果3_2口为1,则说明按键没按
31 {
32 pwm_off();
33 print("lease inputn");
34 }
35 else
36 {
37 pwm_on();
38 delay(5000);
39 print("K2 put down ,BWM: TURN ONn");
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
这里写了一个while(1)循环,如果没有按键操作的时候将会一直打印“please input”,当K1按下的时候LED会两起,输出“print("K1 put down ,LED TURN ONn");”当K2按下的时候,蜂鸣器会响起,然后打印 print("K2 put down ,BWM: TURN ONn");
dnw下载到板子测试程序:

K1按下:

K2按下:
史海拾趣
|
IGBT负载短路下的几种后果 (1) 超过热极限:半导体的本征温度极限为250℃,当结温超过本征温度,器件将丧失阻断能力,IGBT负载短路时,由于短路电流时结温升高,一旦超过其热极限时,门级保护也相应失效. (2) 电流擎住效应:正常工作电流下,IGBT由于薄 ...… 查看全部问答> |
|
条码手持终端应用程序开发!!! 本人在条码行业有多年的工作经验,一直从事条码手持终端应用程序的开发 开发过多种设备: CASIO DT900,DT300,DTX10; Cipher 711 ; SYMBOL MC50,MC1000,PPT8800; Intermec 700系列 有需要的请联系本人 QQ:6 ...… 查看全部问答> |
|
急!!!如何在PC机上实现对单片机的控制(用VC++6.0编程) 小弟正在想弄一个在PC机上实现对单片机的控制,但不知道从哪个方面入手? 希望各位达人给予小弟一些指点.发个程序给小弟参考参考(用C语言编写的)… 查看全部问答> |
|
经历了很多推销的宣传,今天买了10片样品,准备把以前ATMEL8的东西都移植过来. 有几个问题,一直没搞明白: 1. STM8S103K3会不会象ATMEL那样,1000元就能把代码都读出来?STM8S103K3的 解密难度有多大? 2. 以前一直用ICC和KEIL开 ...… 查看全部问答> |
|
2812程序烧到片内flash中运行,能否用CCS和仿真器观察内部变量 2812程序烧到片内flash中运行,能否用CCS和仿真器观察内部变量, 调试电机程序,使用仿真器容易跑飞,希望能烧到flash中运行,同时也希望能像在ccs里仿真一样观察几个关键变量,听有的工程师说是能实现的,希望有能得到指点?… 查看全部问答> |
|
这是个试验程序,就是把整页写入同一个数据,,另外ID什么都可以读出来,,个人感觉数据是可以读出来的,,但读出来的全是FF,2112个FF后是64个0x15,我把读命令改错的话,读出来的是那个输入的数据,说明内部没把数据读出来,这是不是说明FF读出来 ...… 查看全部问答> |
|
在整个APF中基准电流的产生方法是核心环节,只有产生正确的基准电流信号才能很好的补偿谐波和无功电流。当只是补偿谐波电流时只需获取负载电流中的谐波分量即可,当补偿谐波及无功时除了要获取谐波电流信号外还需获取基波电流中的无功分量。基准电 ...… 查看全部问答> |




