裸机调试-led,蜂鸣器,按键

本文介绍了一种裸机调试的方法,通过定义并使用内存地址来控制LED、蜂鸣器的状态。示例代码中,`GPIO_Init`函数初始化了LED和蜂鸣器,`Test`函数则实现了LED闪烁和蜂鸣器响铃的交替效果,使用延时函数`MsDelay`进行定时控制。
摘要由CSDN通过智能技术生成
最近学得比较迷茫,就调试了一下6410的裸机程序,值得注意的是OK6410的裸机程序中蜂鸣器那一段的子程序BeepOn()和BeepOff()刚好写反了,下面给出一段我自己写的led灯走马灯和蜂鸣器的综合程序,其结果是亮一个灯蜂鸣器叫一次,以下是源程序:

#define LEDCON (*(volatile unsigned *)0x7f008820) #define LEDDAT (*(volatile unsigned *)0x7f008824) #define BEEPCON (*(volatile unsigned *)(0x7F0080A0)) #define BEEPDAT (*(volatile unsigned *)(0x7F0080A4)) #define BEEPPUD (*(volatile unsigned *)(0x7F0080A8)) void MsDelay(int time) { volatile unsigned i,j; for(i=0;i<2000000;i++) for(j=0;j<time;j++); } void beepOff() { BEEPDAT=BEEPDAT & 0x7FFF; } void beepOn() { BEEPDAT=BEEPDAT | 0x8000; } void GPIO_Init(void) { LEDCON=0x1111; BEEPCON=BEEPCON&0x3fffffff; BEEPCON=BEEPCON|0X7FFFFFFF; beepOff(); } void Test() { while(1) { volatile unsigned int sum; LEDDAT=0x0e; beepOn(); MsDelay(10); beepOff(); MsDelay(40); for(sum=1;sum<=3;sum++) { LEDDAT=LEDDAT<<1; beepOn(); MsDelay(10); beepOff(); MsDelay(40); } } } void main() { GPIO_Init(); Test(); }



更加深入的大家可以尝试写一个走马灯,不同的灯亮蜂鸣器会按照不同的频率鸣叫。

接下来是一个自己写的按键程序,这个程序是将上面那个程序加以改进,用按键控制走马灯和蜂鸣器,以下是源程序:

#define LEDCON (*(volatile unsigned *)0x7f008820) #define LEDDAT (*(volatile unsigned *)0x7f008824) #define BEEPCON (*(volatile unsigned *)(0x7F0080A0)) #define BEEPDAT (*(volatile unsigned *)(0x7F0080A4)) #define BEEPPUD (*(volatile unsigned *)(0x7F0080A8)) #define KEYCON (*(volatile unsigned *)(0x7F008830)) #define KEYDAT (*(volatile unsigned *)(0x7F008834)) #define KEYPUD (*(volatile unsigned *)(0x7F008838)) void MsDelay(int time) { volatile unsigned i,j; for(i=0;i<2000000;i++) for(j=0;j<time;j++); } void beepOff() { BEEPDAT=BEEPDAT & 0x7FFF; } void beepOn() { BEEPDAT=BEEPDAT | 0x8000; } void GPIO_Init(void) { LEDCON=0X1111; BEEPCON=BEEPCON&0x3fffffff; BEEPCON=BEEPCON|0X7FFFFFFF; beepOff(); KEYCON=0; KEYPUD=0; } int keyscan() { if((KEYDAT&0X3F)==0X3F) return 0; else return 1; } void Test() { volatile unsigned int sum=1,keystatus; LEDDAT=0x0f; beepOff(); while(1) { keystatus=keyscan(); if(keystatus) { beepOn(); MsDelay(5); beepOff(); LEDDAT=0x0f<<sum; sum++; if(sum==5) sum=1; } } } void main() { GPIO_Init(); Test(); }



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值