一, 从点亮第一个LED灯开始
LED介绍:
发光二级管用途:照明,广告灯,指引灯,屏幕等.
进制的转换
C51数据类型
二,独立按键
轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。
注意:在焊接的时候复位按键的用法,不要接错
C51基本语句
C51数据运算
1,按键的抖动
对于机械开关,当机械触点断开,闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动;
三,数码管
LED数码管:数码管是一种简单,廉价的显示器,是由多个发光二极管封装在一起组成的8字型的器件;
一位数码管
8个LED连接
两种连接方式:一个是共阴极连接,一种是共阳极连接;
四位一体
138译码器
它可以通过三个端口来控制8个LED
A B C 是输入端 Y0到Y7是输出端 G1 G2A G2B是它的使能端 在使用时G1输入高电平,G2A和G2B输入低电平(它俩公共端为接线地)
这个芯片叫做双向数据缓冲器(提高驱动能力)他需要的电流来自VCC,输入的信号很微弱; OE叫做芯片的使能接地工作,高电平不工作;LE跳线帽,它接在哪就把哪给短路,DIR输入高电平就是把左边数据输入到右边;如果接低电平就相反。
C51数组
C51子函数
静态数码管段码表
0 1 2
0x3F 0x06 0x5B 0x4F 0x66 0x6D 0x7D 0x07 0x7F 0x6F
A B C D E F 空
0x77 0x7C 0x39 0x5E 0x79 0x71 0x00
动态数码管
消影
位选 段选 清零 位选 段选 位选 段选 位选 段选
数码管驱动方式
单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间
例如:74HC595
可以减少IO口的使用
专属驱动芯片:内部自带显存,扫描电路,单片机只需告诉它显示什么即可
例如
四,模块化编程:
模块化编程框图
模块化变成注意事项
.C文件:函数,变量的定义;
.h文件:可被外部调用的函数,变量的声明
任何自定义的变量,函数在调用前必须有定义或声明(同一个.c)
使用到的自定义函数.c文件必须添加到工程参与编程
使用到的.h文件必须要放在编译器可寻到的地方(工程文件夹根目录,安装目录,自定义)
LCD1602调试工具
LCD_ShowString(1,3,”Hello”); 显示字符串
LCD_ShowNum(1,9,123,3); 显示十进制数字
LCD_ShowSignedNum(1,13,-66,2); 显示有符号十进制数字
LCD_ShowChar(1,1,’A’); 显示一个字符
LCD_ShowHexNum(2,1,0xA8,2); 显示十六进制数字
LCD_ShowBinNumerable(2,4,0xAA,8); 显示二进制数字
C预编译
c语言的预编译以#开头(一般情况都是以#开头),作用是在真正的编译开始之前,对代码做一些处理(预编译)
预编译 意义
#include <REGX52.H> 把REGX52.H文件的内容搬到此处
#define PI 3.14 定义PI,将PI替换3.14
#define ABC 定义ABC
#ifndef__XX_H__ 如果没有定义__XX_H__
#endif 与ifndef,#if匹配,组成“括号”
此外还有#ifdef, #if, #else , #elif, #undef等
五,矩阵键盘介绍
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式
采用逐行或逐列的扫描,就可以读出任何位置按键的状态
扫描概念
这两种扫描方式共性:节省I/O口
数码管扫描(输出扫描)
原理:显示第一位——显示第二位——显示第三位......,然后快速循环这个过程,最终实现所有数码管同时显示的效果
矩阵键盘扫描(输出扫描)
原理:读取第一行(列)——读取第二——第三等然后快速循环过程,最终实现所有按键同时检测的效果
单片机有“弱上拉
六,定时器
定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的链接和运转均在单片机内部完成
定时器作用:
(1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2) 替代长时间的Delay,提高CPU的运行效率和处理速度
stc89c52定时器资源:
STC89C52定时器的资源和单片机的型号使是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的
定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔一秒,计数单元的数值就会加一,当计数单元数值增到设定的闹钟提醒时间时,计数单元就会向中断申请,产生响铃提醒,使程序跳转到中断服务函数中执行
时钟——————计数单元——————中断系统
提供计数单元 时钟计数 产生中断执行定
的时钟脉冲 时任务
左边一次为时钟结构框架 中间为计数框架 右边一侧为中断
TL0 TH0(高字节)范围65535 65535加恢复0 TF0为标志位向中断系统发出信号
定时器时钟
非门,主要作用用来取反;例如输入1,则输出则为0;
或门 输入1/0就是1 0/1也是1 1/1还是1 0/0的时候才输出0
与门有0及0 只有全是1的时候才是1
T0P可以由内部系统提供 也可以通过外部引脚来提供为计数器(记录脉冲的个数)
如果C/T=1那么为计数功能 C/T=0为定时器(计数溢出时发出中断)
高优先级中断可以打断低优先级中断
七,中断系统
中断流程图
STC89C52中断资源
八,定时器和中断系统(传统8051)
左侧为5个中断源 其中RX和TX为发送和接收中断源
有可位寻址可单独赋值和不可位寻址整体赋值
同时使用定时器1和定时器0不能同时使用,如想同时使用那么例如下面
寄存器是连接软硬件的媒介
在单片机寄存器就是一段特殊的RMA存储器(随机存取存储器),一方面,寄存器可以存储和读取数据,另一个方面,每一个寄存器背后都连接了一根导线,控制着电路的连接方式
寄存器相当于一个复杂的机器的“操作按钮”
寄存器控制C/T的开关
九,串口
串口是一种应用十分广泛的通讯接口,串口成本低,容易使用,通信线路简单,可实现两个设备的互相通信。
单片机的串口可以使单片机与单片机,单片机与电脑,单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机的应用范围,增强了单片机系统的硬件实力。
51单片机内部自带UART(异步收发器),可以实现单片机的串口通信。不支持留控制。
还有一种串口VGA它是三排15个针可以用来传出视频的或者用来投屏。而上面那种是用来传输数据的。而DB9需要连接15V的
简单的串口链接
电平标准
在模电里会介绍:差分能消除干扰,抑制PN结的零点漂移
第一个为为单片机所需的电平
第二个为上面的DB9
传的信号大约10几米
第三个差分信号是指
而它可以传送几千米
A减B的范围在+2~+6的时候为1
常见通信接口比较
DQ在单片机上DS18B20温度传感器
CAN汽车用距离远稳定性好
同步的都有时钟线例如:SCL,SCLK;
51单片机的UART
连得是P3.1用的就是IO口;
串口参数及时序图
奇校验就是比如:
想输入0000 0011要保证它是奇才不会报错 所以再其后面补上一个1
当你输入为0000 0111的时候才后面加一个0最后才不会报错;
但是当你输入的是0000 0011 1 的时候它反馈的是0000 0101 1这种错误是无法识别的
串口模式图
TI:发送中断请求标志位。在方式0,当串行发送数据第八位的结束的时候,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后必须用软件复位。即TI=0,在其他方式中,则在停止位开始发送时内部硬件置位,必须用软件复位;
RI:接收中断请求标志位,在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,向主机请求中断,响应中断后必须用软件复位。即RI=0,在其他方式中,串行接收到停止位的中间时刻由内部硬件置位,即RI=1,必须用软件复位,即RI=0;
可以把发送数据理解成用栓动步枪射击,TI是栓 发送数据是扣扳机;TI=0;//软件复位 TI=1;//硬件复位
SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接受寄存器;
这里还是绕不开定时器中断的知识,注意上一节中,中断程序和主程序是并行执行的而不是调用关系,换句话说,cpu在执行主程序的时候,通讯由中断函数自主手法,而数据则公用。
波特率是靠定时器来控制的
TMOD&=0X20设定定时器1为8位自动重装模式)
老师的
当晶振为11.0592的时候需要如下配置:0&=任何数都为0,&=可以用来置0
如果晶振为11.0592的话,是不用勾选波特率倍率,不然会出现00的情况
串口相关寄存器
串口和中断系统
晶振的不同会影响到最终结果的不同
例如51单片机上的12M的晶振和11.0592的晶振在stc上进行复制Delay函数的代码时是不一样的;
数据显示模式
HEX模式/二进制模式/十六进制模式:以原始数据的形式显示;
文本模式/字符模式:以原始数据编码后的形式显示;
如果使用C语言编程,中断查询次序号就是中断号,例如:
中断
ASCIL表
十,LED点阵屏
51单片机的点阵屏原理和开发板矩阵按键的原理类似如下:
注意在使用点阵屏的时候需要借助跳线帽 如图
左边跳线帽拔出可以使74HC595被跳过,从而使LED不亮;
注:用普中开发板的兄弟注意了最后一个数码管旁边不是有一个黄色跳帽,跳到左边2个插针,不然你点不亮
51单片机开发板的引脚对应关系如下:
74HC595
如果想输入从QH到QA顺序为10100000那就先把SER输入高电平1然后再输入0通过SERCLK就可以进行数据向下移动 然后通过RCLK输出·高电压把他们移动到右侧。如果左侧输入已满,还在继续输入,那么之前下面的数字会从QH*输出·,然后输入到下一个寄存器里;
OE(输出使能)表示低电平有效
RCLK寄存器时钟 下面的是串行清零端
GND和OE它俩用跳线帽短接才能有输出
了解:PNP型的三极管开关(是一种驱动方式)
C51的sfr,sbit;
十一,DS1302实时时钟
引脚定义和应用电路
第一个是直插封装,第二个贴片封装
内部结构框图:
十二,蜂鸣器
三极管驱动
Buzzer(LS1)为蜂鸣器的符号
IO口需要给低电平
无源和有源蜂鸣器外观大体相似(分正负极)如果美标可以通过看引脚长短。
蜂鸣器功率大不能跟二极管一样进行驱动方式,
二极管驱动方式为正接正,负接IO口,但由于蜂鸣器的功率较大,所以进行三极管驱动和集成电路驱动。
PNP型的三极管是低电平控制开关开输入0;而NPN型的三极管则不同;电阻需要保证三极管饱和;
51单片机的板子就是采用集成电路,通过ULN2003的一个驱动芯片。
达林顿晶体管阵列
在板子上蜂鸣器的BZ与步进电机的12号引脚相连。
COM为公共
通过P15输入1或者0产生振动频率可以控制蜂鸣器;
无源蜂鸣器不能同时通电;蜂鸣器·打开就是有电流的;但是由于板子有限电器才使得不被烧坏;
例如小字一组向右叫做升高8度向左叫做降低8度。
十三,AT24C02(I2C总线)
AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息。
存储介质:E2PROM
通讯接口 :12C总线
容量:256字节
存储器的介绍:
存储器的简化模型
蓝色二极管极易被击穿相同原理的还有保险丝
引脚及应用保护
I2C总线 (Inter IC BUS) 是由Philips公司开发的一种通用数据总线两根通信线:SCL (Serial Clock) 、SDA(Serial Data)
同步、半双工,带数据应答
通用的12C总线,可以使各种设备的通信标准统一,对于厂家来说使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用着来说,使用通用的通信协议可以避免学习各种各样的自定义协议降低了学习和应用的难度
I2C电路规范
所有12C设备的SCL连在一起,SDA连在一起设备的SCL和SDA均要配置成开漏输出模式
SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题
I2C的时序
起始条件:SCL高电平期间,SDA从高电平切换到低电平
终止条件:SCL高电平期间,SDA从低电平切换到高电平
I2C的时序结构
发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位在前),然后拉高SCL,从机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次即可发送一个字节
接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位在前),然后拉高SCL,主机将在SCL高电平期间读取数据位所以SCL高电亚期间SDA不允许有数据变化,依次循环上述过程8次即可接收一个字节 (主机在接收之前,需要释放SDA)
发送应管:在接收完一个字节之后,主机在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答;
接收应答:在发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答 (主机在接收之前,需要释放SDA)
I2C的时序帧
发送一帧数据
完成任务:向谁发什么
接受一帧数据
完成任务:向谁收什么
先发送再收数据帧(复合式)
完成任务:向谁收指定的什么
AT24C02数据帧
字节写:在WORD ADDRESS处写入数据DATA
随机读:读出在WORD ADRESS处的数据DATA
AT24C02的固定地址为1010,可配置地址本开发板上为000所以SLAVE ADDRESS+W为0xA0,SLAVE ADDRESS+R为0xA1
字节写:在“子地址”处写入数据;
内部地址计数器保存着上次访问时最后一个地址加1的值。只要芯片有电,该地址就一直保存当读到最后页的最后字节,地址会回转到0:当写到某页尾的最后一个字节,地址会回转到该页的首字节。
接收器件地址(读/写选择位为"1")、EEPROM应答ACK后,当前地址的数据就随时钟送出。
主器件无需应答"0",但需发送停止条件。
随机读:读出在字地址处的数据
随机读需先写一个目标字地址,一旦EEPROM接收器件地址和字地址并应答了ACK,主器件就产生一个重复的起始条件。然后,主器件发送器件地址(读/写选择位为"1"),EEPROM应答ACK,并随时钟送出数据。主器件无需应答"0",但需发送停止条件。
十四,DS18B20温度传感器介绍
DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点;
测温范围:-55C到+125°C;
通信接口:1-Wire (单总线);
其它特征:可形成总线结构、内置温度报警功能、可寄生供电;
引脚及应用电路
内部结构框图
64-BIT ROM:作为器件地址,用于总线通信的寻址
SCRATCHPAD(暂存器):用于总线的数据交互
EEPROM:用于保存温度触发闯值和配置参数
存储器结构
单总线介绍
单总线 (1-Wire BUS) 是由Dallas公司开发的一种通用数据总线一根通信线:DQ
异步、半双工
单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DO和GND两根线
第二个是温湿度传感器
单总线电路规范
设备的DO均要配置成开漏输出模式DO添加一个上拉电阻,阻值一般为4.7KQ左右若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路
中间部分MOS管强上拉
单总线时序结构
初始化:主机将总线拉低至少480us,然后释放总线,等待15~60us后,存在的从机会拉低总线60~240us以响应主机,之后从机将释放总线
发送一位:主机将总线拉低60~120us,然后释放总线,表示发送0主机将总线拉低1~15us,然后释放总线,表示发送1。从机将在总读取电平,整个时间片应大于60us线拉低30us后(典型值)读取电平,整个时间片应大于60us
接收一位:主机将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平 (尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1,整个时间片应大于60us
R:(BIT)
发送一个字节:连续调用8次发送一位的时序,依次发送一个字节的8位(低位在前)
接收一个字节: 连续调用8次接收一位的时序,依次接收一个字节的8位(低位在前)
DS18B20操作流程
初始化:从机复位,主机判断从机是否响应
ROM操作:ROM指令+本指令需要的读写操作
功能 操作:功能指令+本指令需要的读写操作
DS18B20数据帧
温度变换:初始化——跳过ROM——开始温度变换
温度读取:初始化——跳过ROM——读暂存器——连续的读操作
温度存储格式
十五,LCD1602
LCD1602 (Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符;
显示容量:16x2个字符,每个字符为5*7点阵;
引脚及应用电路
内部结构框图
存储器结构
时序结构
LCD1602指令集
LCD1602操作流程
初始化:
发送指令0x38 //八位数据接口,两行显示,5*7点阵发送指令0x0C//显示开,光标关,闪烁关
发送指令0x06 //数据读写操作后,光标自动加一,画面不动
发送指令0x01 //清屏
显示字符:
发送指令0x80AC //设置光标位置
发送数据 //发送要显示的字符数据
发送数据 //发送要显示的字符数据
十六,直流电机驱动(PWM)
步进电机
无刷电机是指功率很大
电机驱动电路
IN那侧输入低电平三极管就会导通。中间的是续流二极管,起到保护电路;加二极管防止电流突变
电机是感性负载元件注意他们电感的特性 ;断电电机惯性旋转切割磁力线产生电磁感应,电流通过导线,过大烧毁电路,装个二极管截止电流回路烧毁器件;如果电路有电感或者·电感负载元件那么电路的电压可能高于电源电压;如果没有,则不可能高于电源电压;
断电电机惯性旋转切割磁力线产生电磁感应,电流通过导线,过大烧毁电路,装个二极管截止电流回路烧毁器件;
电压大小只能调节电机的最大负载,和启动加速度吧,调速要么用变频器要么用pwm调速法;
产生PWM方法
输出极性可以进行调节;
十七,红外遥控
红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出;
通信方式:单工,异步;
红外LED波长:940nm;
通信协议标准:NEC标准;
硬件电路
基本发送与接收
空闲状态: 红外LED不亮,接收头输出高电平;
发送低电平:红外LED以38KHZ频率闪烁发光,接收头输出低电平;
发送高电亚:红外LED不亮,接收头输出高电平
NEC编码
上图为示波器检测的波形
遥控器键码
51单片机的外部中断
STC89C52有4个外部中断
STC89C52的外部中断有两种触发方式下降沿触发和低电平触发
中断号:
外部中断寄存器