开发环境
1、开发软件Keil5C51
2.烧录软件
3,普中的51单片机开发板
介绍这里便不展开了,下面直接开始实战环节
实战一:点亮一个LED灯
创建开发环境
首先打开STC-ISP添加芯片到开发环境
先选择好单片机型号(STC89C52RC),这一步很重要选择错则会导致最后的烧录出现问题
创建工程
点击Project,创建文件
点击第一个,随后选择一个文件夹进行创建(建议将文件夹放在桌面,方便查找打开)
选择完文件夹后选好型号(AT89C52)
创建c文件
ok,到这里我们已经完成了工作环境的创建,开始编写程序’
看一下LED的硬件原理图
我们只需明白VCC是高电平,那么为了让电路正常流通则需要给P2_0一个低电平,同时我们需要了解到给这个寄存器写1为高电平,0为低电平(不太严谨,只为了方便记忆)
编写程序
首先需要引入头文件**#include <REGX52.H>**,这个头文件的作用是定义所有的寄存器,
写下最激动的代码点亮第一个LED灯(就像显示出HelloWorld!)
#include <REGX52.H>
void main()
{
while(1)
{
P2 = 0xFE; //1111 1110
}
}
随后点击左上角的Translate,创建成功!
创建hex文件
点击这小锤子
点击output,点击creat HEX File
点击ok后点击bulid,最下面就会显示我们的hex文件创建成功
最后在烧录软件上打开这个程序文件(.hex)那么就可以让单片机点亮第一个LED灯了!
实操二 LED闪烁
文件的创建如上,这边直接实战
代码
通过STC-ISP拷贝延时代码
#include <REGX52.H>
void Delay100ms() //@12.000MHz
{
unsigned char i, j;
i = 195;
j = 138;
do
{
while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0xFE;
Delay100ms();
P2=0xFF;
Delay100ms();
}
}
独立按键的使用
原理图
可以看的GND为接地线,那么当K1被按下的时候P3_1的值应该为0,所以我们只需要检测P3_1的值就可以知道是否k1被按下
消抖
首先我们要知道的就是独立按键是物理按键,那么难免会有一些抖动,为了告诉单片机我们确实是按下这个键改怎么办呢
看这个图,那么我们在按键检测的时候加入一个延迟函数就可以避免这个物理抖动,并且在松开的时候再次延迟
流程如下:
检测–>消抖–>检测–>消抖
代码
void main()
{
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0); //检测是否松手;
Delay(20);
//插入代码段
}
}
}
c语言的位运算符号
简单总结:
&:两个数都是1才为1=
| :两个数为0即为0
^:两个数为1即为0,否则为1
这些符号有什么作用呢,其实在我们修改寄存器的值是有很大的用处的。(这里不做详细说明)
数码管的显示
原理图
单单看这两张图,若没有电路基础可能就有些懵逼了,不过没关系,我们只需要知道咋用就ok
段选
我们首先选择在第几显示我们想显示的数字
看第二张图,我们可以通过写入P2的值来达到让第几个led亮
这里记住P2_4为高电位(你问为什么?我也不知道 )
这里从下往上看,下面的为高电位(至少数码管这一个内容都是这样的)
P2_4=0;P2_3=0;P2_2=1;
这里LED1亮(为1则亮)
显示什么数字或者字母
看第一张图:
通过配置P0的值即可实现操作
假设显示U,那么需要bcdef亮
那么对应的P0值为0x3E //0011 1110,也是哪个是1哪个亮
代码思路
ok,我们已经知道原理了,
可以开始想一想如何让我们实现静态显示和动态显示的思路
静态:段选完后,配置P0的值,不改变即可一直显示
但是显然静态显示的缺点很大,我们只能显示一个位的数字
动态:即动态扫描,也就是利用我们人眼的一个视觉残留的效果,让每个数字快速的显示,(只延迟1ms),那么就可以做到一个动态扫描的效果
细节:记得显示完,令P0=0x00,消影