第一部分
一、单片机介绍:
1、基础知识
单片机,英文Micro Controller Unit,简称MCU;
内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能
单片机的任务:信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机,LED等)的控制
单片机跟计算机相比,单片机算是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。
在性能上,与计算机相差甚远,但单片机成本低、体积小、结构简单,在生活和工业控制领域大有所用;
同时,学习使用单片机是了解计算机原理与结构的最佳选择
2、单片机的应用领域
单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词“智能型”,如智能型洗衣机等
3、STC89C52单片机
所属系列:51单片机
公司:STC公司
位数:8位
RAM:512字节(bit) 相当于 电脑的内存条(一般为4G、8G)
ROM:8K(Flash) 相当于电脑的硬盘(几百G,几千G)
工作频率:12MHz
二、实际操作
1、点亮第一个LED
中文名:发光二极管
英文名:Light Emitting Diode
简称:LED
用途:照明、广告灯、指引灯、屏幕
1.1 单片机的规范:TTL
即 高电平为 5V,低电平为 0V
1.2 高低电平的控制原理
CPU通过控制每个 IO口所配置的寄存器来控制硬件电路,执行我们想要的硬件功能。
例如:我们要电量 P20口的LED
1.3 点亮第一个LED灯的操作
C语言程序不能像下面这样直接写二进制,它会认为你写的是十进制:
应该写16进制的,16进制实际上是 2进制的简写(该图要记,其实写多了就能记得住啦)
所以应该写为:
1 为灭,0 为亮;
并且排列的顺序与单片机上的顺序 是相反的。
但是此时,编译器 并不认识 P2口,所以:在主函数前添加头文件
这个代码的执行过程是,单片机从main开始执行,执行完 P2 = 0xFE;时,继续从main开始执行,无限的循环执行下去。
那如何让它停下来呢?
执行完以后,现象并没有变化,但现在实际上它现在已经没有一直对 IO口进行配置了。
1.4 亮灭亮灭 亮灭亮灭
1.5 循环亮灭
(1、可以用STC-ISP自动生成延时代码
(2、整体代码如下
(3、写一个方便修改的延时函数
存数据的小盒子
unsigned int 16位(单片机) 0~65535
int 16位(单片机) -32768~32767(一半表示负数,一半表示整数)
(3.1) 用STC-ISP 生成一个 延时1ms的函数
(3.2)添加函数参数、while循环 和 递减语句
2、独立按键
轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。
两句的功能相同,都是使得 D1 点亮
### 2.1查看按键的引脚数据
2.1.1 Key1 连接在RXD 上
2.1.2 RXD 又连接在 P3.1上
2.1.3 长按 Key1 D1点亮,松开则灭
2.2 C51数据运算
2.3 按键的抖动
对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
长按Key1 没变化,松开后 D1点亮
2.4 独立按键控制LED 显示二进制
初始状态 P2全为高电平 1111 1111
P2++ 则溢出来 0000 0000
~P2 则 1111 1111
一直都是 1111 1111 所以灯一直不亮
(1、定义一个无符号字符,unsigned char LEDNum = 0;
【因为它是一个 0~255 的八位的二进制数,正好符合51单片机寄存器的特性】
2.5 独立按键控制LED移位
#include void Delay1ms(unsigned int xms); unsigned char LEDNum; void main() { P2=~0x01; //先让 D1亮 while(1) { if(P3_1==0)//按下Key1(查看HC6800-ES+V2.0新版pdf可知) { Delay1ms(20); while(P3_1==0); Delay1ms(20); LEDNum++; if(LEDNum >= 8) LEDNum=0; P2=~(0x01< if(P3_0==0)//按下Key2(查看HC6800-ES+V2.0新版pdf可知) { Delay1ms(20); while(P3_0==0); Delay1ms(20); if(LEDNum==0) { LEDNum=7; } else { LEDNum--; } P2=~(0x01< } } } void Delay1ms(unsigned int xms) { unsigned char i, j; while(xms) { i = 2; j = 239; do { while (--j); } while (--i); xms--; } }
上一篇:【单片机】【学习日志】51单片机学习日志[Day2、2022.1.10]
下一篇:【51单片机】普通I/O口模拟SPI口C语言程序
设计资源 培训 开发板 精华推荐
- 无抽头ZVS感应加热 4管
- ADA4610-4ACPZ-R7 正峰值检波器运算放大器的典型应用电路
- 使用 Richtek Technology Corporation 的 RT8811B 的参考设计
- AM1G-1215DH30Z ±15V 1 瓦 DC-DC 转换器的典型应用
- TS80002 无线电源系统高效发射控制器典型应用
- MC34074DR2G 运算放大器用作 LED 驱动器的典型应用
- VAR-DVK-OM37_CE7,基于安装了 Windows Embedded Compact 7 的 VAR-SOM-OM37 SOM 处理器的开发套件
- LTC1733 的典型应用 - 具有热调节功能的单片式线性锂离子电池充电器
- 便携式 3V 差分放大器
- 爱寻式5号 - MPQ4210气氛下的双100W数控快充多功能坞