第三十四天:Tiny4412驱动开发之按键驱动与蜂鸣器驱动

编写按键驱动的过程和编写LED灯的驱动类似。区别在于按键是在底板上的。要从底板的电路图开始看。

   使用key为关键字查找电路图:

  

 可以得知的信息:按键松开时候XEINT26为高电平。按下时候为低电平。所以要判断按键是否被按下,就要检测XEINT26的状态。

 使用XEINT26为关键字,在核心板上查看其定义。找到下图:

   

  XEINT26在核心板上链接到GPX3_2上。然后就是去datasheet中查找GPX3_2的说明了。

  

 

   按键为检测,GPX3CON置0,GPX3DAT置1,表示按键被按下。代码如下:

 1 int (*show)(char *,...) = 0xc3e114d8;
 2 int (*udelay)(int) = 0xc3e25f90;
 3 void key(void)
 4 {
 5     unsigned long *GPX3CON = 0x11000c60;
 6     unsigned long *GPX3DAT = 0x11000c64;
 7 
 8     *GPX3CON = 0x0;    
 9     while(1){
10         if((*GPX3DAT & 0x04) == 0x0){
11             show("good moring\n");
12             udelay(1000000);
13         }
14         if((*GPX3DAT & 0x08) == 0x0){
15             show("hello world\n");
16             udelay(1000000);
17         }
18         if((*GPX3DAT & 0x10) == 0x0){
19             show("hello bunfly\n");
20             udelay(1000000);
21         }
22         if((*GPX3DAT & 0x20) == 0x0){
23             break;
24         }
25     
26     }
27 }

 

  代码的功能是按KEY1,KEY2,KEY3输出字符串,KEY4退出。

 蜂鸣器的驱动代码编写步骤类似,我这里就不描述具体过程了。直接贴代码:

 1 void (*udelay)(int) = 0xc3e25f90;
 2 void  abc(void)
 3 {
 4     volatile unsigned long  *GPD0CON  = 0x114000a0;
 5     volatile unsigned long  *GPD0DAT  = 0x114000a4;
 6     
 7     *GPD0CON =  0x0001;
 8 #if 1
 9     while(1){
10         *GPD0DAT = 0x1;// on
11         udelay(250000);
12         *GPD0DAT = 0x0;
13         udelay(250000);//off
14     }
15 #endif
16     
17 }

 没有对其它控制的位进行保护。差评!

    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值