笔记整理自B站UP主江科大自化协教程《51单片机入门教程-2020版 程序全程纯手打 从零开始入门》
所用单片机为普中51 STC89C52单片机2022新款,文中所提到的调试现象及结果也都基于此款单片机。
如何控制单片机的某个引脚输出高低电平?
图解分析如下:
![](https://img-blog.csdnimg.cn/img_convert/0fb275f5953e1a9c658269a3f2a817ee.png)
总结:CPU通过配置寄存器来控制硬件电路
51单片机下载时一直显示正在检测目标单片机?
解决办法如下图所示:
![](https://img-blog.csdnimg.cn/img_convert/225e84fa45ad5af608c9d109aac4d2da.png)
C51数据类型
![](https://img-blog.csdnimg.cn/img_convert/f29d01f6661abcf0513cc61637a15041.png)
按键的抖动
![](https://img-blog.csdnimg.cn/img_convert/b668408b05756ca1cfccc93f7abebce0.png)
数码管消影
单片机速度很快,在上一次的段选和下一次的位选之间会出现问题,会出现串位的现象。
![](https://img-blog.csdnimg.cn/img_convert/be713d2c4a0567d46da5e2b53a37accd.png)
解决办法如下图所示:
![](https://img-blog.csdnimg.cn/img_convert/6dde23f4a2f4a36487142a34b7b01d67.png)
数码管驱动方式
![](https://img-blog.csdnimg.cn/img_convert/00686080b92531b52d2d16b3842fd1ce.png)
模块化编程框图
![](https://img-blog.csdnimg.cn/img_convert/4cf382b8c4c956f991d8806937197964.png)
![](https://img-blog.csdnimg.cn/img_convert/02b7b9ad776b908a3c344233116474e5.png)
扫描的概念
![](https://img-blog.csdnimg.cn/img_convert/dbca22682e746c486072a24d0c60d9d5.png)
很多显示器都会采用矩阵的方式进行扫描
I/O口结构
简单理解:
弱上拉,即输出的1驱动能力是有限的
弱上拉内部简单模型:
![](https://img-blog.csdnimg.cn/img_convert/e11526804b86de76ffede4d74baae623.png)
![](https://img-blog.csdnimg.cn/img_convert/bd7baef4ab8411bee539aae3f2fd0666.png)
![](https://img-blog.csdnimg.cn/img_convert/a15047fc2f89605c57341bc5d4d915fc.png)
![](https://img-blog.csdnimg.cn/img_convert/f9122604922224ee361b3ee5992ce7f2.png)
![](https://img-blog.csdnimg.cn/img_convert/cfe82031372040a92df3b0047c3c7eeb.png)
这也解释了为什么驱动LED低电平点亮,高电平熄灭,是因为输出1驱动能力很弱,允许外部装置将其拉低(输入),按键也是采用这种方式。
有源蜂鸣器和无源蜂鸣器的区别
有无振荡源,有源蜂鸣器内部带振荡源,所以只要一通电就会叫;而无源蜂鸣器内部不带振荡源,所以如果用直流信号无法令其鸣叫。
定时器
用定时器前首先要确定此型号的单片机有没有这个定时器!
![](https://img-blog.csdnimg.cn/img_convert/5ce5ede6807b8594d7bae7b4fa3482a3.png)
![](https://img-blog.csdnimg.cn/img_convert/bf66548b653cb5595f168bca81188bef.png)
寄存器是连接软硬件的媒介
在单片机中寄存器就是一段特殊的RAM存储器,一方面,寄存器可以存储和读取数据,另一方面,每一个寄存器背后都连接了一根导线,控制着电路的连接方式
寄存器相当于一个复杂机器的“操作按钮”
循环左移和循环右移函数
包含#include <INTRINS.H>头文件
循环左移函数——_crol_
eg:a = 0x01; a = _crol_(a, 1); a = 0x02;
循环右移函数——_cror_
串口通信(Serial)
![](https://img-blog.csdnimg.cn/img_convert/950ab97c95be60a4b5f838c7a83fce14.png)
![](https://img-blog.csdnimg.cn/img_convert/8cfb6a5f9ff6f46c78aa046058c523b1.png)
![](https://img-blog.csdnimg.cn/img_convert/4f49aac7a520b0aec361769d24f42460.png)
![](https://img-blog.csdnimg.cn/img_convert/32502bcf5c4a9c6dd728288c474517e4.png)
![](https://img-blog.csdnimg.cn/img_convert/3cc71290f14c35f904ce22e3a8412776.png)
奇校验:保证1的个数是奇数,如果发的数据是0000 0011,后面再补一位1,保证1的个数是奇数
偶校验:保证1的个数是偶数,如果发的数据是0000 0011,后面再补一位0,保证1的个数是偶数
![](https://img-blog.csdnimg.cn/img_convert/a0a62602882ab866a6b75addff48b2bb.png)
波特率如何计算
对于12MHz的晶振
0xF3 = 243
每隔256溢出一次,计数值256 - 243 = 13
12MHz晶振,在12T的模式下,每1us计一次数
溢出率 1 / 13 = 0.0769230769230769
模式1/模式3的波特率 = 2 / 32 * 0.0769230769230769 = 0.0048076923076923MHz ≈ 4807Hz(有误差)
对于11.0592MHz的晶振
0xF4 = 244
每隔256溢出一次,计数值256 - 244 = 12
11.0592MHz晶振,在12T的模式下,每0.9216us计一次数
溢出率 0.9216us / 12 = 0.0768
模式1/模式3的波特率 = 2 / 32 * 0.0768 = 0.0048MHz = 4800Hz
![](https://img-blog.csdnimg.cn/img_convert/e0fad3e1297b9d47115365bf6774b22d.png)
74HC595模块
![](https://img-blog.csdnimg.cn/img_convert/2890c837b3c8b397c818252310394027.png)
OE:OutPut Enable输出使能,低电平有效,所以要有输出,OE要接GND(跳线帽)
RCLK:Register clock寄存器时钟
SRCLR:Serial Clear串行清空,接VCC,代表它不清空
QH':用于多片级联
74HC595这里是恒压输出,相对于单片机的IO口(弱上拉),它输出1的驱动能力较大,所以LED点阵屏阳极是接74HC595的。
![](https://img-blog.csdnimg.cn/img_convert/a99d563bc2cd0c0b9a2c8edff8791e44.png)
LED点阵屏
同数码管一样,也需要消影
段选 位选 延时 位清零 段选 位选 延时 位清零
RAM和ROM
ROM:程序存储器(相当于计算机硬盘)FLASH
RAM:随机存储器,数据存储器(相当于计算机内存)
例如对数组的定义:
unsigned char Animation[]——定义在RAM中
unsigned char code Animation[]——定义在FLASH中,FLASH空间更大,但是数组就不能更改了unmodifiable lvalue
DS1302
![](https://img-blog.csdnimg.cn/img_convert/e79fd0033cbac4d6e5d646839cc76440.png)
使用LCD1602显示DS1302时钟时,屏幕总是会乱闪,出现一些乱码
![](https://img-blog.csdnimg.cn/img_convert/acd2d7fadcf926b858e7be59304594b4.png)
解决方法:J24跳线帽接OE和VCC
关于WP(写入保护):
如果开了写入保护,控制写入保护的0x8E寄存器也被保护了,你也无法靠写入0x8E来关闭保护,所以你一旦开了写入保护,你就无法关闭了 ——摘自B站弹幕
BCD码
![](https://img-blog.csdnimg.cn/img_convert/f90fdf8afe4899c9060c369e44c49fec.png)
感谢抽出宝贵时间阅读的各位小读者们,创作不易,如果感觉有帮助的话,帮忙点个赞再走吧!你的支持是我创作的动力,希望能带给大家更多优质的文章。