普通网站报价多少,扬中论坛网,软件源码购买一般在哪个网站,网站建设环境配置http://t.csdnimg.cn/Yv0R1 文章参考了这位大佬的代码#xff0c;在他的基础上进行了纠错、完善等处理。
配置
编程前的准备工作按大佬的流程即可#xff0c;稍有不同的是学习通课程网站的资料里没有头文件的整个压缩包了#xff0c;但我们可以下载某个BSP版的工程文件在他的基础上进行了纠错、完善等处理。
配置
编程前的准备工作按大佬的流程即可稍有不同的是学习通课程网站的资料里没有头文件的整个压缩包了但我们可以下载某个BSP版的工程文件并在里面找到inc文件夹里面包含所有头文件。 后面把这个文件夹复制到你想要的地方然后配置的时候引用这个路径就好。 库文件也在刚刚的BSP版的工程文件里面的source里选择全部文件类型才能看到库文件STCBSP_V3.6.LIB。
不同之处就以上两点其余的按大佬文中的配置流程即可。 测试题持续更新中
1、Display: 在数码管指定位置显示指定内容。编写程序在数码管显示 12HL- 21 。
#include STC15F2K60S2.H
#include displayer.H
#include sys.Hcode unsigned long SysClock11059200L; //必须。 定义系统工作时钟频率用户可以修改且必须与实际工作频率下载时选择的一致#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 SysClock11059200;#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 a10;void myKey_callback()
{ char k;kGetKeyAct(enumKey1);if( k enumKeyPress ) a14;else if( k enumKeyRelease ) a10;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.Hcode unsigned long SysClock11059200L;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.Hcode unsigned long SysClock11059200;#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 SysClock11059200L;#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 min0,sec0,ms0,temp0;
char oput[8]{0};void fun(){temp;mstemp;sec(temp/1000)%60;mintemp/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(sec59) secsec-60;也不对由于上面他的代码是取余60000所以sec可能会比59大因此需要用到这个if。但是这又带来了另一个问题就是如果上面计算得到的sec120的话比如sec121if语句也只减了一个60会导致数码管显示秒的部分在2分钟后变为从60开始61、62、63...而不是从00开始这也是个bug。
因此简化代码即可。对应代码改为sec(temp/1000)%60;并把后面的if语句删去即可得到正确的逻辑。
由于数码管位数限制这个程序只能显示10分钟以内的计时。