HNU小学期BSP软件编程基础十道测试题

http://t.csdnimg.cn/Yv0R1 文章参考了这位大佬的代码,在他的基础上进行了纠错、完善等处理。

配置

编程前的准备工作按大佬的流程即可,稍有不同的是学习通课程网站的资料里没有头文件的整个压缩包了,但我们可以下载某个BSP版的工程文件,并在里面找到inc文件夹,里面包含所有头文件。

后面把这个文件夹复制到你想要的地方,然后配置的时候引用这个路径就好。

库文件也在刚刚的BSP版的工程文件里面的source里,选择全部文件类型才能看到库文件STCBSP_V3.6.LIB。

不同之处就以上两点,其余的按大佬文中的配置流程即可。

测试题(持续更新中)

1、Display: 在数码管指定位置显示指定内容。编写程序,在数码管显示"  12HL- 21" 。
#include "STC15F2K60S2.H"
#include "displayer.H" 
#include "sys.H"code unsigned long SysClock=11059200L;        //必须。 (定义系统工作时钟频率,用户可以修改,且必须与实际工作频率(下载时选择的)一致#ifdef _displayer_H_                          //显示模块选用时必须。(数码管显示译码表,用戶可修改、增加等) 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08,0x40,0x01,0x77,0x7c,0x39,0x5e,0x79,0x78,0x76,0x38,0x54,0x5c,0x73,0x67,0x3e,0x6e};  /* 序号:   0    1    2    3    4    5    6    7    8    9    10     11	 12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27 *//* 显示:   0    1    2    3    4    5    6    7    8    9    (无)   下-  中-  上-   A    b    C    d    E    F    H    L    n    o    P    q    U    y */  
#endifvoid main()
{  				displayerInit();                              LedPrint(0);SetDisplayerArea(0,6);                           Seg7Print(1,2,20,21,12,2,1);	 MySTC_Init();while(1)MySTC_OS();
}

按老师要求加上了其他一些字母的编码,修改在decode_table[]中。


2、按键:按下K1,数码管灯显示"H"。松开后灭掉。
#include "STC15F2K60S2.H"
#include "sys.H"
#include "displayer.H"            
#include "key.H" code unsigned long SysClock=11059200;#ifdef _displayer_H_                          
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08,0x40,0x01,0x76,0x38};/* 序号:   0    1    2    3    4    5    6    7    8    9    10     11	 12   13   14   15  *//* 显示:   0    1    2    3    4    5    6    7    8    9    (无)   下-  中-  上-   H    L  */  #endifchar a=10;void myKey_callback()
{ char k;k=GetKeyAct(enumKey1);if( k == enumKeyPress ) a=14;else if( k == enumKeyRelease ) a=10;Seg7Print(10,10,10,10,10,10,10,a);}
}void my10mS_callback(){
Seg7Print(10,10,10,10,10,10,10,a);}void main(){DisplayerInit();   KeyInit(); LedPrint(0);SetDisplayerArea(0,7);//SetEventCallBack(enumEventSys10mS, my10mS_callback);SetEventCallBack(enumEventKey, myKey_callback);MySTC_Init();while(1){MySTC_OS();}
}

在系统事件10ms即SetEventCallBack(enumEventSys10mS, my10mS_callback)那里进行了修改,去掉了那句语句,实际上对应的处理函数也可以去掉。因为系统事件10ms会耗费系统资源,不如只用按键事件,并对按键事件处理函数稍作修改即可。

同时注意,当前版本按键初始化KeyInit();中间没有下横线_

3、蜂呜器:开机后发出指定频率。开机后发出1.2KHz 1.8S的声音。
#include "STC15F2K60S2.H"
#include "sys.H"
#include "beep.H"code unsigned long SysClock=11059200L;int main(){BeepInit();SetBeep(1200,180);MySTC_Init();while(1)MySTC_OS();}

暂无修改。

4、音乐:开机后A调,每分钟100拍,播放1、2、3、4、5 (给简谱)。
#include "STC15F2K60S2.H"
#include "sys.H"
#include "displayer.H" 
#include "Beep.H"
#include "music.H"code unsigned long SysClock=11059200;#ifdef _displayer_H_ 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08,0x40,0x01,0x76,0x38};/* 序号:   0    1    2    3    4    5    6    7    8    9    10     11	 12   13   14   15  *//* 显示:   0    1    2    3    4    5    6    7    8    9    (无)   下-  中-  上-   H    L  */  #endifcode unsigned char arr[]={0x31,0x10,0x32,0x10,0x33,0x10,0x34,0x10,0x35,0x10};int main(){DisplayerInit();LedPrint(0);SetDisplayerArea(0,7);BeepInit();MusicPlayerInit();SetPlayerMode(enumModePlay);SetMusic(100,0xFA,arr,10,enumMscDrvSeg7andLed);MySTC_Init();while(1){MySTC_OS();}}

增加了用7段数码管Seg7显示信息和用Led指示灯打拍的功能。

记得添加dispalyer模块,并且指定数码管范围即语句SetDisplayerArea(0,7);

数码管左侧显示每分钟拍数;右侧横线前的数字表示音调,如1代表A调等;横线后数字代表当前音是do、re、mi、fa、so、la、si中的哪一个,如1代表do等。

修改SetMusic(100,0xFA,arr,10,enumMscDrvSeg7andLed);的最后一个参数即可设置是否显示,具体可以看学习板说明文档。


5、秒表:数码管显示分、秒、毫秒。
#include "STC15F2K60S2.H"
#include "sys.H"
#include "displayer.H"  code unsigned long SysClock=11059200L;#ifdef _displayer_H_
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08,0x40,0x01,0x76,0x38};   /* 序号:   0    1    2    3    4    5    6    7    8    9    10     11	 12   13   14   15  *//* 显示:   0    1    2    3    4    5    6    7    8    9    (无)   下-  中-  上-   H    L  */  
#endiflong min=0,sec=0,ms=0,temp=0;
char oput[8]={0};void fun(){temp++;ms=temp;sec=(temp/1000)%60;min=temp/60000;oput[0]=ms%10;oput[1]=(ms/10)%10;oput[2]=(ms/100)%10;oput[3]=12;oput[4]=sec%10;oput[5]=(sec/10)%10;oput[6]=12;oput[7]=min;Seg7Print(oput[7],oput[6],oput[5],oput[4],oput[3],oput[2],oput[1],oput[0]);
}int main(){DisplayerInit(); 	SetDisplayerArea(0,7);Seg7Print(1,1,1,1,1,1,1,1);LedPrint(0);SetEventCallBack(enumEventSys1mS, fun);MySTC_Init();while(1)MySTC_OS();
}

大佬的原代码中,sec=(temp/1000)%60000;这一行不太对,一分钟是60s,因此temp除了1000以后应该是对60取余而不是60000。

此外,大佬代码中的if(sec>59) sec=sec-60;也不对,由于上面他的代码是取余60000,所以sec可能会比59大,因此需要用到这个if。但是这又带来了另一个问题,就是如果上面计算得到的sec>=120的话,比如sec=121,if语句也只减了一个60,会导致数码管显示秒的部分在2分钟后变为从60开始,61、62、63...而不是从00开始,这也是个bug。

因此,简化代码即可。对应代码改为sec=(temp/1000)%60;并把后面的if语句删去,即可得到正确的逻辑。

由于数码管位数限制,这个程序只能显示10分钟以内的计时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 找出一个二维数组中的鞍点

找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。 #include <stdio.h>int main() {int matrix[4][4] {{10, 17, 13, 28},{21, 14, 16, 40},{30, 42, 23, 39},{24, 11, 19, 17}};int n 4, m 4;int found 0;for (int i 0; i …

磁力搜索引擎是什么?为什么有些资源喜欢用磁力链接?

磁力链接是什么东西&#xff1f;在日常生活中&#xff0c;我们接触的比较多的下载链接是直链。 所谓的直链简单来说就是直接指向服务器文件资源的链接&#xff0c;如B站app的下载链接&#xff0c;这种链接有统一的服务器提供保障&#xff0c;通常比较稳定&#xff0c;可以追溯源…

python调用qt编写的dll

报错&#xff1a;FileNotFoundError: Could not find module F:\pythonProject\MINGW\sgp4Lib.dll (or one of its dependencies). Try using the full path with constructor syntax. 只有两种情况&#xff1a; 1.路径不对 2.库的依赖不全 1、如果是使用了qt库的&#xff0…

transformer的了解

1.transformer的优化策略 1&#xff09;GQA&#xff0c;减少推理过程中的KV缓存大小&#xff0c;增加上下文长度&#xff08;KV 缓存&#xff08;即 Key-Value 缓存&#xff09;用于加速 Transformer 模型在推理过程中处理长序列时的计算。要减少 KV 缓存的大小&#xff09; 2&…

JAVA Tesseract OCR引擎

Tess4j是一个基于Tesseract OCR引擎的Java库, Tesseract库最初由惠普实验室于1985年开发&#xff0c;后来被Google收购并于2006年开源。识别效果不好&#xff0c;速度还慢&#xff0c;但是好早好早了。 一、POM依赖 <!--OCR识别https://digi.bib.uni-mannheim.de/tesserac…

一文洞悉巴基斯坦电子游戏出海引流获客广告风口不容忽视

一文洞悉巴基斯坦电子游戏出海引流获客广告风口不容忽视 随着全球数字经济的蓬勃发展&#xff0c;电子游戏行业也迎来了前所未有的机遇。巴基斯坦&#xff0c;这个拥有庞大人口基数和日益增长的消费能力的国家&#xff0c;其电子游戏市场潜力巨大。本文旨在探讨巴基斯坦电子游戏…

springboot驾校管理系统-计算机毕业设计源码49777

驾校管理系统 摘 要 驾校管理系统是一个基于Spring Boot框架开发的系统&#xff0c;旨在帮助驾校提高管理效率和服务水平。该系统主要实现了用户管理、年月类型管理、区域信息管理、驾校信息管理、车辆信息管理、报名信息管理、缴费信息管理、财务信息管理、教练分配管理、更换…

获取和设置Spring Cookie

一.获取浏览器中的cookie public void testGetCookie(HttpServletRequest request){//request获取的Cookie是个数组Cookie[] cookies request.getCookies();if (cookies ! null&&cookies.length>0) {for (Cookie cookie : cookies) {//获取Cookie名称String cooki…

探索未知,悦享惊喜 —— 您的专属盲盒APP开发之旅

在这个充满无限可能的数字时代&#xff0c;每一份期待都值得被精心打造。我们诚邀您一同踏入盲盒APP开发的奇妙世界&#xff0c;共同开启一场融合趣味、惊喜与社交的全新体验。 【概念启航&#xff1a;盲盒文化的数字化演绎】 盲盒&#xff0c;这一源自传统玩具的趣味玩法&am…

java Object 转 Integer

在 Java 中&#xff0c;可以通过多种方法将一个 Object 转换为 Integer。这里有几种常见的方法&#xff1a; 使用类型转换和自动装箱&#xff08;如果 Object 实际上是一个 Integer 类型&#xff09;&#xff1a; Object obj 42; // 假设这是一个 Integer 对象 if (obj instan…

Java面试题系列 - 第6天

题目&#xff1a;深入理解Java内存模型&#xff08;JMM&#xff09;及线程可见性 背景说明&#xff1a;Java内存模型&#xff08;Java Memory Model&#xff0c;简称JMM&#xff09;是Java虚拟机规范的一部分&#xff0c;用于描述Java程序中各种变量&#xff08;线程共享变量&…

含空格字符串处理方法总结

读取按单个字符判断的字符串 chcin.get() 读取含空格的字符串方法 getline(cin,s); 想要对回车符号单独处理 getchar() //吸收回车符 真题练习&#xff0c;用字符串流的方法处理空格情况。 通用方法&#xff1a;字符串流 istringstream ss(字符串)(ss >> )分割。 151…

python爬虫基础入门

步骤 获取网页内容&#xff1a; http请求 python的Requests库 解析网页内容 html网页结构 python的Beautiful Soup库 储存或分析数据 储存进数据库 作为ai分析的数据 转化为图表显示出来 DDoS攻击 通过给服务器发送海量高频请求&#xff0c;大量消耗网页资源&#…

昇思25天学习打卡营第12天|基于MindSpore的GPT2文本摘要

基于MindSpore的GPT2文本摘要 数据集加载 使用nlpcc2017摘要数据&#xff0c;共包含5万个样本&#xff0c;内容是新闻正文及其摘要。 from mindnlp.utils import http_get from mindspore.dataset import TextFileDataset# 下载数据集 url https://download.mindspore.cn/t…

MVC 可以把通用命名空间放在配置文件

这种方式的引入,是将命名空间引入到所有视图中了,不需要在使用using单独引用了。

【框架】ABP(ASP.NET Boilerplate Project)

ABP架构是“ASP.NET Boilerplate Project”&#xff08;ASP.NET样板项目&#xff09;的简称&#xff0c;它是一个基于领域驱动设计&#xff08;DDD&#xff09;的开源应用程序框架&#xff0c;支持.NET Framework和.NET Core。ABP旨在成为开发现代WEB应用程序的新起点&#xff…

使用Gstreamer时遇到WARNING: erroneous pipeline: no element “x264enc“(亲测有效)

WARNING: erroneous pipeline: no element “x264enc” 解决&#xff1a; 我下了gstreamer1.0-plugins-ugly包就解决了 sudo apt install -y gstreamer1.0-plugins-ugly

MATLAB实现-基于CNN-LSTM卷积神经网络结合长短期记忆神经网络数据分类预测(多输入多分类)

MATLAB实现-基于CNN-LSTM卷积神经网络结合长短期记忆神经网络数据分类预测&#xff08;多输入多分类&#xff09; 基于CNN-LSTM卷积神经网络结合长短期记忆神经网络数据分类预测&#xff08;多输入多分类&#xff09; 1.数据均为Excel数据&#xff0c;直接替换数据就可以运行…

【ASSEHR出版】第四届现代教育技术与社会科学国际学术会议(ICMETSS 2024)

第四届现代教育技术与社会科学国际学术会议&#xff08;ICMETSS 2024&#xff09;将于2024年8月23-25日在马来西亚 吉隆坡举行。 会议旨在为从事教育相关领域的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff0c;拓…

【区分vue2和vue3下的element UI Tooltip 文字提示组件,分别详细介绍属性,事件,方法如何使用,并举例】

在 Vue 2 和 Vue 3 中&#xff0c;Element UI&#xff08;针对 Vue 2&#xff09;和 Element Plus&#xff08;针对 Vue 3&#xff09;提供了 Tooltip 文字提示组件&#xff0c;用于在鼠标悬停时显示一段文本信息。这两个库中的 Tooltip 组件在属性、事件和方法的使用上有所相似…