![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STC-B
STC-B学习板学习
乖巧乐芬达
这个作者很懒,什么都没留下…
展开
-
I/O口设置
本次的学习板(STC15F2K60S2)共用42个通用I/O口,分为五组(P0~P5)。复位后的I/O模式为准双向/弱上拉。可设置为四种模式:1、准双向口/弱上拉 2、推挽/强上拉 3、输入/高阻 4、开漏模式。想要切换模式就要对I/O口进行设置。每个I/O口的工作模式由2个控制寄存器中的相应位控制(PnM0和PnM1,n=0、1、2、3、4、5)。下图是以P0口为例,其他I/O口的设置也是类似的。但也不仅仅是在初始化函数内赋值P0M1=0和P0M0=1就能将P0的所有端口(I...原创 2021-09-01 11:09:28 · 2109 阅读 · 0 评论 -
单片机中LED灯的使用(流水灯、呼吸灯)
超原创 2021-09-01 12:45:25 · 3564 阅读 · 1 评论 -
八位数码管的使用
八位数码管原理图如下:通过原理图,我们可以知道,数码管和led灯存在公用的线路。要使led灯能发亮,P2.3引脚就要置“1”,但是P2.3引脚为“1”时,数码管是不能正常显示的,所以要使数码管正常显示,要对P2.3引脚置“0”。同时P2.0、P2.1和P2.2引脚对数码管显示也很重要(位置选择),三个引脚的状态(0或1)对应的三位二进制数可以表示0~7(分别对应从左到右的数码管)。与led灯一样,只要通过对P0口赋不同的值就可以显示不同的字符。不同的段(A、B、C、D、E、F、G、D..原创 2021-09-01 17:36:43 · 5894 阅读 · 1 评论 -
数码管显示+流水灯
P2.3引脚控制着到底是数码管可以亮还是led灯可以亮,所以实际上两者是不会同时亮的,肉眼观察到的同时亮其实是一个高速动态扫描切换的过程。实现流水灯,如果使用延时来达到视觉停留效果,就需要确定好延时的时间是多久,如果延时时间太短,则会影响流水灯的显示效果;如果时间过长,则数码管显示会有影响。所以使用累加计数分频的方法就更方便一点,代码如下:#include <STC15F2K60S2.h>#define uint unsigned int#define uchar uns...原创 2021-09-01 18:28:05 · 4583 阅读 · 0 评论 -
中断系统的相关知识(一)(初步理解中断)
当中央处理器CPU正在处理某件事情时,外界发生了紧急事件,请求CPU停止当前工作,转而对发生的紧急事件做出应急处理,处理完以后,再回到原来的事件继续工作,这个过程叫做中断,而实现这种功能的部件称为中断系统,请示CPU中断的请求源叫做中断源(中断请求源)。 左图为本次学习板(STC15F2K60S2)的14个中断请求源除了外部中断2(INT2)、外部中断3(INT3)、定时器2中断和外部中断4(INT4)最低优先级中断以外,其他的中断都具有两个中断优先级,可以实现中断嵌套。之所以...原创 2021-09-01 21:27:47 · 616 阅读 · 0 评论 -
中断系统的相关知识(二)(可位寻址、不可位寻址)
中断系统中会涉及许多寄存器,这个时候我们会遇到一些有点陌生的名词,比如接下来说的“可位寻址”和“不可位寻址”,如下图:位寻址是指对一些内部数据存储器RAM和特殊功能寄存器进行位操作的寻址。简单来说,可位寻址就是指可以对该寄存器当中的某一位(bit)进行操作。例如同样对图中两个寄存器的B0位(EX0、ES2)进行赋值操作,因为IE是可位寻址的,所以我们可以直接将EX0“拿”出来操作EX0=1;而IE2是不可位寻址的,所以我们如果想对ES2赋值,就要对IE2整个寄存器赋值,不能“拿”...原创 2021-09-01 21:57:22 · 3622 阅读 · 0 评论 -
学习板中振动传感器的简单使用
首先我们通过原理图寻找振动传感器的引脚,原理图如下:发现振动传感器的引脚V&P在P2.4引脚处,把此引脚定义为输入端口,即将P2^4引脚置1,并不断检测此引脚状态。当振动发生时,振动传感器内部被短接,P2^4引脚的电平为0。基本使用方法就是这么简单,以下是一个简单的样例代码:#include <STC15F2K60S2.h>#include <intrins.h> //_nop_();#define uchar unsigned ch...原创 2021-09-02 12:42:10 · 292 阅读 · 0 评论 -
中断系统的相关知识(三)(中断的开关、优先级)
在中断系统中一定会用到的寄存器就是IE,因为IE寄存器中有中断的总开关(EA)。EA:CPU的总中断允许控制位,EA=1时,CPU开放中断(允许中断的发生),EA=0时,屏蔽所有的中断申请。同理以下其他允许位,置1时开放对应中断,置0时屏蔽对应中断。ELVD:电压检测中断允许位 EADC:A/D转换中断允许位 ES:串行口1中断允许 ET1:定时/计数器T1中断允许位 EX1:外部中断1中断允许位ET0:定时/计数器T0中断允许位 ...原创 2021-09-02 16:14:07 · 2846 阅读 · 0 评论 -
中断系统的相关知识(四)(定时/计数器)
定时/计数器的核心部件是一个加法计数器,本质是对脉冲进行计数,只是计数脉冲的来源不同。当计数脉冲来自系统时钟时,是定时方式,此时定时/计数器每12个时钟或每1个时钟得到一个计数脉冲,计数值加一;当计数脉冲来自单片机外部引脚,则为计数方式,每来一个脉冲加一。定时/计数器0(T0)有四种工作方式:16位自动重装模式、16位不可自动重装模式、8位自动重装模式和不可屏蔽中断的16位自动重装模式;T1除了模式3无效(T1在模式3时,停止计数)以外,其他工作方式与T0相同;T2、T3和T4的工作模式固定位16位自动原创 2021-09-02 20:55:43 · 1107 阅读 · 0 评论 -
中断系统的相关知识(五)(外部中断)
外部中断0(INT0)和外部中断1(INT1)均有两种触发方式:上升沿或下降沿均可触发方式和仅下降沿触发方式。因为引脚的状态有0和1,0代表低电平,1代表高电平。从高电平变为低电平,这种电平突然下降的地方叫做下降沿;从低电平变为高电平,这种电平突然上升的地方叫做上升沿。TCON中的IT0和IT1分别决定了INT0和INT1是哪种触发方式,如果ITx(x=0,1)=0,当系统在INTx(x=0,1)引脚检测到上升沿或下降沿均可触发外部中断;如果ITx(x=0,1)=1,当系统在INTx(x=0,1)引原创 2021-09-02 21:33:46 · 5728 阅读 · 0 评论 -
八位数码管滚动显示
代码如下:#include "STC15F2K60S2.H"#define uint unsigned int#define uchar unsigned charuchar num1;uchar num2;uchar num3;uchar num4;uchar num5;uchar num6;uchar num7;uchar num8;uchar smg;uchar UintCount;uchar duanxuan[] = {0x3f, 0x06, 0x5b, 0x4f.原创 2021-09-02 23:01:29 · 1763 阅读 · 1 评论 -
可变调的蜂鸣器、电子音乐
利用定时器定时翻转蜂鸣器的beep引脚,产生方波使蜂鸣器发生,所以根据定时器不同的定时产生不同的方波,就可以改变蜂鸣器的音调(与改变led灯亮度类似)。void time0() interrupt 1{ TH0=timeh; //赋值,改变定时 TL0=timel; beep=~beep; //翻转产生方波}用二维数组music[n][m]来存储乐谱,方便歌曲的切换和简化代码,m要开大点,要比最长的乐谱大一点。#include <STC15F.原创 2021-09-02 23:57:23 · 436 阅读 · 0 评论 -
基于定时器实现呼吸灯
呼吸灯的关键在于调节led灯的亮度,也就是在肉眼观察不到的情况下调节灯亮的时间占比。在学习中断以后,可以引用定时中断来方便我们调节led灯亮的时间占比void Delay1us(uint x) //@11.0592MHz{ while(x--) { _nop_(); _nop_(); _nop_(); }}延时函数之一使用了微妙级延时函数,这样既可以在肉眼观察不到的范围内调节时间占比,又能使亮度过度的更丝滑。以下是代码:#include<STC15F2K60S2.H&原创 2021-09-03 04:42:36 · 3005 阅读 · 0 评论 -
A/D转换器
STC15系列单片机A/D转换器由多路选择开关、比较器、逐级比较寄存器、10位DAC(数/模转换器)、转换结果寄存器(ADC_RES和ADC_RESL)以及ADC_CONTR构成。以下是STC15系列单片机A/D转换器的结构图下图是与ADC有关的寄存器:要作为A/D使用的端口,需要先将P1ASF特殊功能寄存器中相应位置“1”(将相应的口设置位模拟功能)。P1其他不需要作为A/D使用的端口,可继续作为I/O口使用(建议只作为输入)。...原创 2021-09-03 12:06:57 · 1395 阅读 · 1 评论