当前位置: 首页 > news >正文

笔记 15-3 : 彭老师课本第 7 章, 中断,键盘 key 编程与轮询 :具体的代码实现

(114)配置该按键的初始化

++以及

++中断逻辑


++ 接着看下与讯为板的差异 :

(115)接着学习按键的轮询逻辑


(116)老师布置了作业,可以把蜂鸣声改为音乐,《大海》,代码如下 :

#include"exynos_4412.h"voiddelay_ms(unsignedintnum){inti,j;for(i=num;i>0;i--)for(j=1000;j>0;j--);}voidpwm_init(void){GPD0.CON=GPD0.CON&(~(0xf))|0x2;GPD0.PUD=GPD0.PUD&(~(0xf))|0x3;PWM.TCFG0=PWM.TCFG0&(~(0xff))|0xff;PWM.TCFG1=PWM.TCFG1&(~(0xf))|0x2;PWM.TCMPB0=50;PWM.TCNTB0=100;PWM.TCON=PWM.TCON&(~(0xff))|(1<<0)|(1<<1);}voidbeep_on(void){PWM.TCON=PWM.TCON&(~(0xff))|(1<<0)|(1<<3);}voidbeep_off(void){PWM.TCON=PWM.TCON&(~(1<<0));}#defineSYS_SET_FREQUENCE25000voidbeep_set_frequence(unsignedintfre){//若蜂鸣器的发声频率为0则返回if(0==fre)return;PWM.TCMPB0=SYS_SET_FREQUENCE/(fre+fre);//根据设定频率重新设定计数器比较的值PWM.TCNTB0=SYS_SET_FREQUENCE/fre;//根据频率重新调整计数值}constunsignedchardahai[]={0x13,0x15,0x16,0x16,0x16,0x16,0x21,0x16,0x15,0x15,0x16,0x15,//哀愁0x13,0x12,0x11,0x11,0x11,0x11,0x12,0x13,0x13,0x12,0x11,0x11,0x11,0x11,0x21,0x16,0x15,0x15,0x16,0x15,0x13,0x15,0x16,0x21,0x21,0x16,0x15,0x15,//飘远};/* * 大海的简谱, 控制每一个音的时间 1为长时间 4为短时间 */constunsignedchartime[]={4,4,4,2,4,2,4,4,4,2,4,2,//哀愁4,4,4,2,4,2,2,1,4,4,4,2,4,2,4,4,4,2,4,2,4,4,2,4,2,4,4,1//飘远};constunsignedintyinyue[3][7]={262,294,330,370,415,266,294,//低音523,578,659,698,784,880,988,//中音1046,1174,1318,1396,1567,1700,1975//高音};voidled_init(void){GPK1.CON=(GPK1.CON&(~(0xf<<4)))|(0x1<<4);GPX3.CON=(GPX3.CON&(~(0xf<<4)))|(0x1<<4);}voidled_on(){GPK1.DAT=GPK1.DAT|(0x1<<1);GPX3.DAT=GPX3.DAT|(0x1<<1);}voidled_off(){GPK1.DAT=GPK1.DAT&(~(0x01<<1));GPX3.DAT=GPX3.DAT&(~(0x01<<1));}/* * 裸机代码,不同于LINUX 应用层, 一定加循环控制 */intmain(void){unsignedintloop=0;//循环控制变量unsignedinta=0;//计算高中低音使用的变量unsignedintb=0;//计算do re mi ....使用的变量unsignedintdelay=0;//计算每一个音延时使用的变量led_init();pwm_init();GPX1.CON=GPX1.CON&(~(0xf<<4))|0x0<<4;//按键初始化while(1){if(!(GPX1.DAT&(0x1<<1)))// 返回为真,按键按下{delay_ms(10);if(!(GPX1.DAT&(0x1<<1)))//二次检测,去抖{led_on();delay_ms(500);led_off();for(loop=0;// 在播放每个音节的时候,也检查按键是否被压下即可loop<sizeof(dahai)/(sizeof(unsignedchar))&&!(GPX1.DAT&(0x1<<1));loop++){//查大海的简谱表a=dahai[loop]>>4;//计算出高低音b=(dahai[loop]&0x0f)-1;//计算出DO RE MI FA SO LA XIdelay=0x1500/time[loop];beep_set_frequence(yinyue[a][b]);//重新设定频率beep_on();//发出一个音delay_ms(delay);beep_off();//关闭蜂鸣器, 每个音播放完成后有间隔感// delay_ms(0x10); //关闭蜂鸣器delay_ms(100);}}}}return0;}

(117)

谢谢

http://www.jsqmd.com/news/1069439/

相关文章:

  • JavaScript Mixins 实战:解决重复代码与横切关注点的工程方案
  • @Autowired 工作原理:Spring依赖注入的本质与四大生效条件
  • 量子信道分析:Choi算子与计算条件最小熵的核心原理与应用
  • Ubuntu下SQLite实战指南:嵌入式数据库的精准选型与深度优化
  • Ubuntu 18.04 部署 production-ready code-server 云 IDE 全指南
  • Go CLI开发实战:用Cobra高效处理命令行参数与时间解析
  • 分布式算法实现O(log n)时间测地凸分解,赋能可编程物质形态控制
  • Puppeteer Docker化部署到DigitalOcean App Platform实战指南
  • POD模型降阶与滚动时域控制:实现复杂流体系统实时优化控制
  • 面向对象编程中的抽象:接口设计与责任切割实战
  • 基于CGAN与LSTM的加密市场异常检测:合成数据生成实战
  • 阿尔伯塔软件项目管理 VI 笔记(二)
  • Ubuntu 18.04 上部署 MySQL Galera 高可用集群实战
  • 构建CI-beNNch框架:HPC性能基准测试的自动化与持续集成实践
  • VPS部署Web应用:Apache+MySQL+PHP全栈配置指南
  • Nuxt.js如何系统性解决Vue SSR落地难题
  • macOS Ruby环境搭建与Hello World实操指南
  • Node.js Docker最小可用闭环:从本地开发到容器化部署
  • SYCL内存模型实战对比:USM与Buffer-Accessor性能深度解析
  • React Native四大核心:Text、View、state与props深度解析
  • JavaScript事件循环详解:从宏任务微任务到async/await执行机制
  • macOS Node.js 开发环境构建与排错指南
  • rsync同步原理与生产级故障排查实战
  • 2026团队AI编程协作:从工具接入到知识协同的工程化落地
  • JavaScript事件循环与异步执行机制深度解析
  • React Native Text、state、props、JSX 运行时原理深度解析
  • UI自动化测试核心:8种元素定位方法实战与工具推荐
  • 用AST读JavaScript源码:从字符串匹配到语义解析的工程实践
  • Eclipse Theia云IDE部署实践:Debian 10 + Docker Compose生产级架构
  • CSS !important 使用决策指南:原理、场景与工程化管控