news 2026/6/23 22:14:04

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
笔记 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)

谢谢

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 21:58:40

Python Selenium自动化问卷填写实战:从环境搭建到验证码处理

1. 项目概述与核心价值最近在帮一个朋友处理一个挺有意思的需求&#xff1a;他手头有一批问卷需要填写&#xff0c;来源是问卷星&#xff0c;数量大概有几百份。手动操作显然不现实&#xff0c;不仅耗时耗力&#xff0c;还容易出错。他问我能不能用技术手段自动化搞定&#xff…

作者头像 李华
网站建设 2026/6/23 21:57:00

Selenium Python自动化测试实战:从环境搭建到CI/CD集成

1. 项目概述&#xff1a;为什么你需要这份PDF学习资源&#xff1f; 如果你正在搜索“Selenium Python 自动化测试”&#xff0c;大概率已经听过或者尝试过一些零散的教程。网上的资料很多&#xff0c;但往往要么是零基础语法课&#xff0c;要么是直接甩给你一个复杂的框架代码…

作者头像 李华
网站建设 2026/6/23 21:56:10

Acunetix Web应用安全扫描:从原理到CI/CD集成的实战指南

1. 项目概述&#xff1a;为什么我们需要Acunetix这样的“数字安全探照灯”&#xff1f;在今天的数字化世界里&#xff0c;一个企业的门面早已不是街边的实体店铺&#xff0c;而是它的官方网站、移动应用和后台管理系统。这些Web应用程序&#xff0c;就像一栋大楼的玻璃幕墙&…

作者头像 李华
网站建设 2026/6/23 21:54:21

DeepSeek V4:开源大模型的协作基础设施与协议级工程实践

1. DeepSeek V4 不是“又一个开源模型”&#xff0c;而是重构开源大模型协作范式的起点最近在几个技术社区里刷到“DeepSeek V4”这个词的频率&#xff0c;已经高到让我下意识打开终端查 commit log 的程度——不是因为好奇它参数多大、上下文多长&#xff0c;而是因为它发布方…

作者头像 李华