尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

笔记 15-3 : 彭老师课本第 7 章, 中断,键盘 key 编程与轮询 :具体的代码实现
📅 发布时间:2026/6/23 22:30:12

(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)

谢谢

相关新闻

  • @Autowired 工作原理:Spring依赖注入的本质与四大生效条件
  • 形态-控制协同进化中拉马克机制与多样性压力的冲突与权衡
  • 量子信道分析:Choi算子与计算条件最小熵的核心原理与应用

最新新闻

  • 如何通过构建核心技术项目实现编程技能突破
  • 使用自动化脚本一般可以实现哪些任务?
  • Dorks Eye完整用户指南:从基础搜索到高级技巧的完整教学
  • Ember Charts常见问题解答:解决图表渲染与数据绑定难题
  • TFFM高级特性解析:稀疏输入处理与TensorBoard可视化技巧终极指南
  • TaskJuggler脚本编程入门:用代码实现自动化项目管理

日新闻

  • 终极指南:如何用shadPS4在电脑上免费畅玩PS4游戏
  • 打造个性化Instagram Clone:主题定制与用户体验优化技巧
  • 未来展望:RoseTTAFold-All-Atom的发展路线图与社区支持资源汇总

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号