概述
在学习蓝桥杯的过程中,发现使用工程模板可以使得我们刷题更有效率。掌握一套模板,在比赛过程中,先将框架写上去,也能更快地进入状态。
在这里分享我使用的模板供大家参考使用。
头文件
#include "stc15f2k60s2.h"
#include "intrins.h"
stc15f2k60s2.h
之所以使用 15 这个文件,是因为它里面定义了普通 51 内没有的寄存器。比如:AUXR
、T2H
、T2L
等我们可能会用到的。其次,它也将 GPIO 重新定义,使用更简单的方式。例如:可以使用 P00
代替 P0^0
,方便我们的使用。更详细的可以自行查看该头文件。
如何使用该头文件
如果使用这个头文件 keil 编译报错提示找不到该文件,按照下面步骤添加。
打开 stc 下载器,按照提示将文件添加到正确位置
找到 keil 安装位置,进入 C51 目录。 可以看到如下的文件,进入 INC(include) 目录。找到 STC ,进入目录,将stc15f2k60s2.h
移动到 INC 目录下。
intrins.h
这个头文件包含了 NOP
指令,延时函数会用到。
宏定义和全局变量
#define uchar unsigned char
#define uint unsigned int
enum
{
clc = 0x1f, led = 0x80, rmb = 0xa0, com = 0xc0, seg = 0xe0
};
uchar SEG[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xff}; // 数码管段码表
uchar SEL[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 数码管位选
uchar BUF[] = {0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0}; // 数码管缓冲区
这个枚举变量在我上一篇文章里说过,这里就不说了。
下面三个数组是为数码管服务的。单片机比赛中,数码管非常重要,也是必不可少。
段码不进行说明。SEL 是为了方便数码管刷新,BUF 内存放的是所要显示的数字或字母。
函数
void init();
void init_T0();
void seg_scan();
void init()
{
P2 = ((P2&clc) | rmb);
P0 = 0x00; //关闭继电器、蜂鸣器
P2 = ((P2&clc) | led);
P0 = 0xff; //关闭 led
P2 = ((P2&clc) | com);
P0 = 0xff; //选择所有数码管
P2 = ((P2&clc) | seg);
P0 = 0xff; //关闭数码管
}
void init_T0(void)
{
TMOD = 0x00; // 使用 15 定时器的方式 0
TH0 = 0xFC;
TL0 = 0x18; //定时 1ms
ET0 = 1;
TR0 = 1;
EA = 1; //打开中断
}
void seg_scan()
{
static uchar i = 0; //数码管扫描引索
P2 = ((P2&clc) | seg);
P0 = SEG[buf[i]];
P2 = ((P2&clc) | com);
P0 = slt[i];
P2 &= clc; //关闭 573 防止干扰
i++; //引索自增
if (i >= 8) //满 8 清零
i = 0;
}
总体
#include "stc15f2k60s2.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
void init(void);
void init_T0(void);
void seg_scan(void);
enum
{
clc = 0x1f, led = 0x80, rmb = 0xa0, com = 0xc0, seg = 0xe0
};
uchar SEG[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xff}; // 数码管段码表
uchar SEL[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 数码管位选
uchar BUF[] = {0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0}; // 数码管缓冲区
void main()
{
init();
init_T0();
while (1)
{
}
}
void init()
{
P2 = ((P2&clc) | rmb);
P0 = 0x00; //关闭继电器、蜂鸣器
P2 = ((P2&clc) | led);
P0 = 0xff; //关闭 led
P2 = ((P2&clc) | com);
P0 = 0xff; //选择所有数码管
P2 = ((P2&clc) | seg);
P0 = 0xff; //关闭数码管
}
void init_T0(void)
{
TMOD = 0x00; // 使用 15 定时器的方式 0
TH0 = 0xFC;
TL0 = 0x18; //定时 1ms
ET0 = 1;
TR0 = 1;
EA = 1; //打开中断
}
void seg_scan()
{
static uchar i = 0; //数码管扫描引索
P2 = ((P2&clc) | seg);
P0 = SEG[buf[i]];
P2 = ((P2&clc) | com);
P0 = slt[i];
P2 &= clc; //关闭 573 防止干扰
i++; //引索自增
if (i >= 8) //满 8 清零
i = 0;
}
void interruptTimer0() interrupt 1
{
seg_scan();
}
最后
以上就是风中舞蹈为你收集整理的【蓝桥杯-单片机】工程代码模板头文件宏定义和全局变量函数总体的全部内容,希望文章能够帮你解决【蓝桥杯-单片机】工程代码模板头文件宏定义和全局变量函数总体所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复