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

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分钟以内的计时。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java学习
  • Linux基础IO
  • 海外金融机构银行保险证券数字化转型营销销售数字化成功案例讲师培训师讲授开户销售营销客户AI人工智能创新思维
  • 红酒知识百科:从入门到精通
  • 入门PHP就来我这(高级)18 ~ 获取结果集
  • 【C++】开源:坐标转换和大地测量GeographicLib库配置使用
  • 【Java算法】二分查找 下
  • 大模型学习笔记0-前言
  • vue 切换主题色切换主题色切换主题色切换主题色切换主题色
  • python使用tkinter添加下载进度UI
  • 如何使用uer做多分类任务
  • 刷题之多数元素(leetcode)
  • 11.索引_创建不同种类索引(primary+unique+复合....)
  • Spring MVC深入理解之源码实现
  • .net core Redis 使用有序集合实现延迟队列
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaScript对象详解
  • js对象的深浅拷贝
  • k个最大的数及变种小结
  • Spring框架之我见(三)——IOC、AOP
  • vue2.0项目引入element-ui
  • windows下使用nginx调试简介
  • 爱情 北京女病人
  • 当SetTimeout遇到了字符串
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 如何实现 font-size 的响应式
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 一道闭包题引发的思考
  • 源码安装memcached和php memcache扩展
  • UI设计初学者应该如何入门?
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 我们雇佣了一只大猴子...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #考研#计算机文化知识1(局域网及网络互联)
  • (7) cmake 编译C++程序(二)
  • (Charles)如何抓取手机http的报文
  • (ZT)一个美国文科博士的YardLife
  • (二)PySpark3:SparkSQL编程
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • *** 2003
  • .axf 转化 .bin文件 的方法
  • .htaccess 强制https 单独排除某个目录
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net web项目 调用webService
  • .NET 回调、接口回调、 委托
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET框架设计—常被忽视的C#设计技巧