蓝桥杯单片机组——榨干选手资源包(STC)

这篇具有很好参考价值的文章主要介绍了蓝桥杯单片机组——榨干选手资源包(STC)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

笔者参加的是第十一届蓝桥杯的单片机组,当时由于疫情,比赛一直推迟,推到最后还和电赛测评弄到了同一天,可以说相当刺激了,弄完蓝桥出来接着就是电赛测评,好在最后结果还比较让人满意,虽然没有国奖,但笔者自己觉得已经满足了。此系列主要是分享部分参赛经验,没有到国奖的水平,就提供一些省赛的基础技巧了,此篇主要是介绍STC的一些使用技巧。

巧用STC

其实蓝桥杯的门槛和难度在电子类竞赛中算是比较好拿奖的,只要运用好工具,需要自己记住的代码量是比较少的,用好STC会大大需要记忆的代码量。

STC生成定时器

首先是软件延时函数,打开STC后在上方工具栏找到软件延时计算器
蓝桥杯单片机组——榨干选手资源包(STC)
然后按照一下步骤配置一下即可
1.选择系统频率,IAP15是内部晶振频率为12M;
2.选择所需的延时时间;
3.选择8051指令集,IAP15对应STC-Y5;
4.生成代码;
然后复制粘贴到自己的代码即可。
蓝桥杯单片机组——榨干选手资源包(STC)
蓝桥杯单片机组——榨干选手资源包(STC)

STC配置定时器(定时器中断)

蓝桥杯单片机组——榨干选手资源包(STC)

定时器

定时器是每届必考的,要记住整个配置过程也不难,步骤如下:
1.选择定时器时钟(AUXR寄存器);
2.配置定时器模式(TMOD寄存器);
3.高低八位的的初始值赋值(TLn和THn);
4.清除溢出标志位(TFn);
5.开启计时(TRn);
6.判断TF有没有溢出,溢出表示定时时间到,如果需要重复计时就需要清除溢出标志并对高低八位重新赋值。
但是为了节约时间和降低错误率,建议大家还是采用STC直接生成,步骤如下:
蓝桥杯单片机组——榨干选手资源包(STC)
根据自己需求配置即可,这里一般是会配置一个1ms的定时器,这样方便后面做标志。

定时器中断

整个开发过程很少纯粹的使用定时器来进行计时,更多的是和中断结合起来,使得程序能够运行的更合理。
定时器中断的配置只是在定时器配置的基础上再多配制两个寄存器即可,步骤如下:
1.选择定时器时钟(AUXR寄存器);
2.配置定时器模式(TMOD寄存器);
3.高低八位的的初始值赋值(TLn和THn);
4.清除溢出标志位(TFn);
5.开启计时(TRn);
6.使能定时中断(ETn);
7.使能总中断(EA);
一钟二模三赋值;四清五开使六七;
然后编写对应的中断服务函数即可。
也就是说初始化的配置过程中只需要添加两个寄存器的配置即可。
例如配置定时器0的中断;

//初始化函数
void Timer_Init(void)
{
	AUXR |= 0x80;	
	TMOD &= 0xF0;
	TL0 = 0xCD;		
	TH0 = 0xD4;		
	TF0 = 0;		
	TR0 = 1;		
	ET0 = 1;
	EA=1; 
}
//中断服务函数
void timer0() interrupt 1  using 1   
{
//1ms进一次中断。
}

上述代码估计有同学会问,为什么中断服务函数为啥没有重新装载值,这是因为在上面定时器配置模式的时候已经开启了自动重装载。
蓝桥杯单片机组——榨干选手资源包(STC)
切记中断服务函数需要注意中断号对应,不然就麻烦了。
蓝桥杯单片机组——榨干选手资源包(STC)
当然如果你临场紧张了,一下子忘记了中断服务函数该咋写,不急,还有保命方案。
STC是没有直接配置定时器中断的工具的,但是他有示例,里面就有很多可以参考的例子。按照下图操作即可找到。
蓝桥杯单片机组——榨干选手资源包(STC)
这个代码可能看起来有一堆复杂的寄存器没见过,最好的办法就是对他们视而不见,直接找自己认识的,有映像的,
例如上面这个例子中就可以提取出这些有用的东西:

/*-----------------------------------------------------------------
/* --- STC15F4K60S4 系列 定时器0的16位自动重装载模式举例---------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序        */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序        */
/*---------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//若无特别说明,工作频率一般为11.0592MHz
#include "reg51.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
//-----------------------------------------------
#define FOSC 11059200L
#define T1MS (65536-FOSC/1000)      //1T模式
sfr AUXR = 0x8e;                    //Auxiliary register
sbit P10 = P1^0;
//-----------------------------------------------
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1
{
    P10 = ! P10;                    //将测试口取反
}
//-----------------------------------------------

/* main program */
void main()
{
    AUXR |= 0x80;                   //定时器0为1T模式
//  AUXR &= 0x7f;                   //定时器0为12T模式

    TMOD = 0x00;                    //设置定时器为模式0(16位自动重装载)
    TL0 = T1MS;                     //初始化计时值
    TH0 = T1MS >> 8;
    TR0 = 1;                        //定时器0开始计时
    ET0 = 1;                        //使能定时器0中断
    EA = 1;
    while (1);
}

这不代码框架直接就有了吗,实测是可以用的,大家可以自己试试,看看哟没有bug。所以利用好STC可以省去很多麻烦。
友情提示:
在配置好定时框架后,一定务必要写一个测试函数,比如闪灯来检查一下自己的框架有没有问题。
整个比赛过程中一定要阶段性的编译检查和验证功能,不要托大一次写好多东西再去检查。

STC获取数码管码表

数码管的码表想必也是不少人的一个难题,还在自己根据这个推测或者硬记那就慢了。
蓝桥杯单片机组——榨干选手资源包(STC)
快速使用小妙招:
按下图操作,在示例中找到任意一个右数码管的例程。
蓝桥杯单片机组——榨干选手资源包(STC)
往下滑,就可以看见了一个标准字库,直接CV,解决问题。
蓝桥杯单片机组——榨干选手资源包(STC)
但是需要注意一点,这里的是共阴码表,比赛平台是供阳码,所以在显示的时候需要做一个小小的处理(赋值时注意取个反就行了):
蓝桥杯单片机组——榨干选手资源包(STC)

STC上升沿下降沿检测

类似第十届省赛的频率计,说白了还是记录单位时间的上升或者下降沿的个数,然后计算出频率。
这个可以用外部中断的方式,可能不是很熟悉整个中断体系的同学遇到这种会有些麻,但是请不要放弃,记住STC是个好东西。
继续来到示例,找到里面的
蓝桥杯单片机组——榨干选手资源包(STC)
还是认识的就需要,不认识的就直接忽略。
就可以得到这样一个代码:

void Timer0Init(void)
{
    AUXR = 0x80;                    //定时器0为1T模式
    TMOD = 0x04;                    //设置定时器0为16位自动重装载外部记数模式
    TH0 = TL0 = 0xff;               //设置定时器0初始值
    TR0 = 1;                        //定时器0开始工作
    ET0 = 1;                        //开定时器0中断

    EA = 1;

}

  //中断服务程序
void t0int() interrupt 1            //中断入口
{
    P10 = !P10;                     //将测试口取反
}

这样就有了一个下降沿中断了,只需要在给一个准确的时间段,记录下降沿个数,然后二者相比就可以得到频率了。

其他

STC的示例代码中有很多例子,IIC、SPI、数码管甚至矩阵键盘这些都是有的,不一定能够直接拿来就用,但逻辑大致相同,有时间还是可以多看看和移植了试一试。
蓝桥杯单片机组——榨干选手资源包(STC)

总结

蓝桥杯比赛时间是五个小时,希望此文能够节约大家代码框架搭建的时间,还有差不多一个月就比赛了,安安心心多练,拿到国赛门票是不难的笔者在此祝看到此文的学弟学妹都能取得让自己满意的成绩。此文如有不妥之处欢迎批评指正。

目录

蓝桥杯单片机组——榨干选手资源包(STC)
蓝桥杯单片机组——榨干选手资源包(芯片数据手册)
蓝桥杯单片机组——程序框架及客观题
蓝桥杯CT107D单片机组第四至第九届省赛完整过程代码文章来源地址https://www.toymoban.com/news/detail-417857.html

到了这里,关于蓝桥杯单片机组——榨干选手资源包(STC)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯STC15F2K60S2单片机 CCP/PCA/PWM模块的学习与使用

    有道是 “一花独放不是春,万紫千红春满园” 我们不能只满足于 眼前所谓的 “够用、能用” 的少量知识,而不去深入学习探究,进而不慎封锁了自己的见识 和 更多 创新开发上的可能性。 曾经仅满足于学习了蓝桥杯单片机的三个外部晶振 定时器: 定时器0、1、2. 就认为完

    2024年02月08日
    浏览(36)
  • 蓝桥杯:国二选手经验贴 附蓝桥杯历年真题

    🤩 那么恭喜你呀 ~ 看到一篇宝藏参赛指南 🤩 楼主将结合自己的参赛经历 手把手教你拿到省一进国赛嗷!!!(文章结尾有历年真题及VIP试题链接 建议收藏 ~✌️) 楼主是参加了2022年的蓝桥杯算法竞赛Python大学A组 先浅浅晒一下证书: 目录  ⭐️引言⭐️ ⭐️本文适合

    2023年04月09日
    浏览(35)
  • STC15单片机-低功耗设计

    STC15省电模式(数据手册有介绍) STC15系列单片机可以运行3种省电模式以降低功耗,它们分别是: 低速模式 , 空闲模式 和 掉电模式 。 正常工作模式下,STC15系列单片机的典型功耗是2.7mA ~7mA,而掉电模式下的典型功耗是0.1uA,空闲模式下的典型功耗是1.8mA 低速模式由时钟分

    2024年02月05日
    浏览(67)
  • 【STC15单片机】动态数码管

    目录 点亮一位数码管 动态数码管 100s倒计时 动态数码管封装代码 段选:选中哪一位数码管 位选:选中的数码管要显示的内容 这是我对段选位选的理解,就是选中某个位置,赋值字形码,显示想要的图形 如果只想让第一个数码管显示,就只需要让com1 = 1即可,其他comx都=0 如

    2024年02月13日
    浏览(27)
  • STC宏晶单片机初始开发教程

    STC宏晶单片机开发教程(以STC15F101W为例),包括所需开发软件、烧录器与单片机的连线。 STC官网:http://www.stcmcudata.com/ 相关步骤: 下载开发软件:Keil uVision5(注意要注册C51内核).。 下载并安装芯片包:“keil5_c51v954a”。 到STC官网下载 “STC-ISP软件”。 根据“STC-ISP”软件上

    2024年02月02日
    浏览(36)
  • 为STC32单片机搭建开发环境

            自去年起,STC推出了51内核的32位单片机,但是单纯的51内核已经驾驭不了32位总线了。因此STC32单片机才用的是251内核,多了一个2,使得底层指令从111条扩充到了268条,这或许意味着以后的STC单片机会有更广大的想象空间?         也因此,STC32的开发环境与传统

    2024年02月08日
    浏览(74)
  • STC15系列单片机学习4:串口通讯

    在使用单片机的串口前,得先知道所使用的单片机有几个串口,再结合你的硬件电路图来使用哪个串口。 以下是STC15各系列单片机的串口数量,STC15W4K32S4系列有4个串口 工作模式0:同步移位寄存器(官方建议初学者不学) 工作模式1:8位串口,波特率可变 工作模式2:9位串口

    2024年04月13日
    浏览(30)
  • STC51单片机解码433M程序说明

    最近需要用到433M的单片机解码,上网搜了一下。大部分的程序都是基于定时器定时检测。感觉逻辑不够严谨。对于新手理解起来也比较困难。 查看EV1527手册 我是用的240K电阻。得到了每个数据宽度是1.29MS,每个数据宽度为16个LCK,每个LCK宽度大约为80us, 可以算出同步位的高

    2024年02月11日
    浏览(30)
  • 基于STC15系列单片机的智能门锁

    一、项目背景及功能需求 1.1项目背景 智能门锁是一种智能化、高效、安全的门锁,它可以实现密码识别开锁方式,极大地提高了门锁的安全性和便利性。随着人们对安全性的要求越来越高,智能门锁已经成为了现代家庭和企业的必备设备。因此,本项目旨在设计一款基于S

    2024年02月04日
    浏览(46)
  • STC15系列单片机学习6:外部中断

    外部中断,就是通过单片机IO引脚电平的变化触发的中断。 STC15系列单片机的外部中断源一共有5个,分别是外部中断0(INT0)、外部中断1(INT1)、外部中断2(INT2)、外部中断3(INT3)、外部中断4(INT4);当然不是所有的STC15系列单片机都有着5个外部中断。 中断源 触发行为

    2024年03月12日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包