目录
51单片机
一 基本介绍
1.单片机介绍
单片机,英文Micro Controller Unit,简称MCU
内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能
单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机,LED等)的控制
单片机跟计算机相比,单片机算是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。但在性能上,与计算机相差甚远,但单片机成本低、体积小、结构简单,在生活和工业控制领域大有所用
结构图如下
CPU:(中央处理单元)负责处理和执行指令 CPU的核心是从程序或应用程序获取指令并执行计算。该过程分为三个关键阶段:获取,解码和执行。CPU从RAM中提取指令,对指令的实际含义进行解码,然后使用CPU的相关部分执行指令。
RAM: RAM是随机存取存储器(random access memory),是计算机内部存储器中的一种,也是其中最重要的,计算机和手机中一般把其叫做(运行)内存,它的速度要比硬盘快得多,所以用运行程序在RAM中,而存放运行时不用的数据则在硬盘中,什么时候需要数据,便把数据从硬盘中拿到内存,但同时RAM断电会丢失数据,所以我们电脑如果断电了就会丢失原来正在运行的数据。
ROM:ROM是只读存储器(Read-Only Memory),它具有断电不丢失数据的特性。
2创建工程及烧录程序
选择新建
新建工程名
选格式
烧录(顺次选择,打开)
二 LED
[1] 点亮一个LED灯
1.点亮原理
以8位2进制数代表控制8个led的电压
0代表0V,1代表5V
只有输出0V时led会亮
再将8位2进制制数改写为16进制数(如1111 1110即可写成FE前面加上0x表示16进制)
2.编写程序
烧录后重启单片机即可点亮
改进
[2] LED闪烁
1.用stc中的软件延时计算器生成一个500ms的延时函数
选择图中选项
2.编写代码
使LED在亮、灭情况下循环,且通过Delay函数分别延时500ms(注意插入头文件)
[3] LED流水灯
1.编写可控延时函数
将函数内部主体放入循环,引入变量x,每次循环-1,直至x=0循环结束。
此时函循环x次,即延时了x毫秒。
此函数可直接通过控制改变x以改变延时时间。
2.编写程序
Led由1位依次后移,中间插入延时
[4] 独立按键控制LED亮灭
1.独立按键
按下时接通,接通时低电压用0表示。如K1按下时可用P3_1==0表示
要控制单个LED也可用相应方式。如P2_0=0,表示使第一个led亮起,而不影响其他led
2.新见到的位运算
<< 按位左移 (补位上补0)
>> 按位右移
& 按位与 (都为1才为1,只要一个不是1就是0)
| 按位或 (只要有一个为1就是1,都为0才是0才是0)
^ 按位异或 (相同时为0,不同时为1)
~ 按位取反 (0变1,1变0)
[5] 独立按键控制LED状态
1.除颤
2.左右移位
注意!!!(P3_0->K2
P3_1->K1
P3_2->K3
P3_3->K4)顺序有问题
以0x01为基点,按下K1与K2分别对n加减,然后使0x01中0的位置左移n位。
注意按下K1时n不能大于7,按下K2时n不能小于1,因为P2赋值是个八位2进制,移动位数只能在0~7。
三 数码管
[1] 数码管介绍
1.显示
数码管由八个LED组成,通过点亮不同组合以显示不同数字。
2.接法
依据就近,3、8引脚为位选端,其他为段选端
位选控制哪一位可以亮,段选控制亮的内容
上图为共阴极(我们手中版本)想让LED亮时,需要让段选段为1
3.四位一体数码管
想要显示的位置通过控制位选端
因为段选端相同,所以同时只能显示一种数字,只能通过高频率重现不同位置上的数字实现视觉上的同时出现不同数字
4.138译码器
右侧控制8个数码管的位选端顺次接到Y0~7上
左侧P2_4,P2_3,P2_2为输入端,需由高位排向低位
通过输入0或1来控制Y0~7的输出,通过将3位2进制数转化为十进制数,可知使哪个LED亮起。
如:P2_4=1;P2_3=0;P2_2=0;便是使Y4输出1,即点亮LED5
5.74HC245
将P0传来的信号加强传给数码管
同样P0的八位2进制也要由高位排向低位
如:1的显示为 P0=0x06//即0000 0110,使表中b、c亮起
[2] 静态数码管
通过一个函数简化主函数内容,以数组表示每个数字的表现段选端。
[3] 动态数码管
同一时间数码管只能显示一个数字,想要显示多个需要依靠视觉残留
只需循环高频显示多个数字即可,但紧接着容易出现错乱,所以每个数字间需要延时(Delay)后清零(P0=0x00)即消影操作。