普中51 | 您所在的位置:网站首页 › c51单片机led点阵 › 普中51 |
普中51 - 普中51
功能与使用 介绍功能模块CMOS是Complementary Metal Oxide Semiconductor(互补金属氧化物半导体)通常 汉字有 16*16 个像素点
P2 51单片机介绍(一)基础第二功能
P3 51单片机介绍(二)P4 C语言基础添加 stc 芯片库keil5新建c51工程 并配置CH340 驱动安装程序的烧录
数字电路与C语言基础电平特性二进制中运算& 与运算| 或运算非运算C51中的基础知识
点亮第一个LEDLED 闪烁reg52.h 头文件介绍
单片机最小系统构成(1)晶振电路(2)复位电路(3)电源电路(4)下载电路
Keil uVision 5-C51和MDK-ARM共存解决中文注释 ??? 的问题外部中断 and 定时器中断1.什么是中断2.中断有什么用3.双重功能的P3引脚4.8051中断体系5.中断特寄存器6.中断的优先级7.中断服务程序的编写8.外部中断实现代码9.定时器/计数器中断工作原理10.定时器/计数器定时数值的计算
https://www.bilibili.com/video/av286413345/ 单核A2产品 基于STC89C52 STC89Cxx 芯片 宏晶公司推出的增强型 51 单片机STC89Cxx/STC90Cxx 等系列更受大众喜爱 低功耗,高性能的51内核的CMOS 8位单片机 产品的 A6/7 双cpu STC8A STM8M 内部资源及功能大大增强外 支持 ISP(在系统可编程)/IAP(在应用可编程), 无需专用编程器或专用仿真器。 宏晶公司推出的 51 芯片种类非常多 STC–表示芯片为 STC 公司生产的产品,其他公司的也有 AT、i、SST 等 8–表示该芯片为 8051 内核芯片 9–表示内部含有 Flash EEPROM 存储器, 还有 如 80C51 中 0 表内部含有MaskROM(掩模 ROM)存储器; 如 87C51 中 7 表示内部含有 EPROM(紫外线可擦除ROM)存储器。 C–表示该器件为 CMOS 产品。 还有如 89LV52 和 89LE58 中的 LV 和 LE 都表示该芯片为低电压产品 (通常为 3.3V 电压供电); 而 89S52 中 S 表示该芯片含有可串行下载功能的 Flash 存储器, 即具有 ISP 可在线编程功能。 5–固定不变。 2–表示该芯片内部程序存储(FLASH)空间大小, 1 为 4KB,2 为 8KB,3 为12KB,即该数乘以 4KB 就是芯片内部的程序存储空间大小。 程序空间大小决定了一个芯片所能装入执行代码的多少。 一般来说,程序存储空间越大,芯片价格也越高, 所以我们再选择芯片的时候要根据自己需求选择合适芯片 功能模块数码管 四位一体 共阴极 数码管 驱动电路(不能直接用 单片机 管脚来驱动) 大的 : 74hc245 CMOS高速收发器 输出 作为 数码管 段选 信号 小的 : 74HC138 高速CMOS器件 74HC138译码器 八个数码管的片选 节约 iO口资源 CMOS是Complementary Metal Oxide Semiconductor(互补金属氧化物半导体)LCD1602液晶显示器 接口 LCD9648 液晶屏 LCD12864 电位器 LED 8*8 点阵
或者 市场上 8*8集成点阵 (带控制引脚) 比较 不太好 初学 io拓展 芯片 74HC595 8位串行输入、并行输出的位移缓存器 串转并 3个管脚 拓展 8个(剩下的 8 个 通过 单片机io口) 节约io口 跳线帽 短接片 595 有一个 使能 管脚控制 切换 默认 接 GND 右 (左边 VCC) 处于 一直工作 状态 有效 使得 管脚 有 默认 的 输出电平 使得 点阵 发光 对应 丝印 LED 模块 4*4 矩阵键盘 独立 按键 一个 io口 一个 按键 (另一端接地) 根据 监测 io口 电平状态 就能 按键功能检测 单片机总共 32 io口 矩阵 4*4 (既要检查 行 又要 检测 列) (也可以拆分成 独立按键) 8个io口可以解决 有效的 拓展 按键数量 (输入) 1602显示器(输出)2*16 = 32 字符 02说明 2行 16能显示16个字符(数字,字符) 12864/9648中文 汉字 图形 96 液晶屏像素点 一行 有48 个 行 每一行128点 每一列64点 通常 汉字有 16*16 个像素点1602 用 5*7 汉字为 两个 字符 大小 128/16 == 8 个 汉字 64/16 = 4 字符 16个 一行 ds18b20 温度传感器 红外 接收头 2.4G 接口 nRF24L01 模块 两个模块 通信 500m左右 通信距离 电源 输出 管脚![]() 3.3 gnd 5v 从 usb 供电口 供电 稳压芯片 将5v 转成 3.3(wifi , 蓝牙 ,2.4G) usb 转 串口 模块 通过 上位机 实现 程序 下载 还可以 供电 短接片 (跳线帽) wifi 蓝牙 gps GSM 等 串口模块 调试 可以通过 串口调试助手 AT指令 进行调试 模拟 单片机 的 串口功能 模块 进行 响应 双方 进行 学习 (电脑 调试助手 / 单片机) usb转 TTL电平信号 (串口) AD/DA 模块 ad芯片xpt2046 精度 12位 四路模拟输入通道通过电位器 改变电压 (模拟电压)输入到 对应通道 采集电压值 - 第一路 光敏 (模拟信号) 光线强弱 变化 ad值 也会变化 转换成 数字信号 给 单片机 处理 - 第二路 热敏电阻 感应环境温度 - 第三路
da 没有用 da芯片 在实际的 开发 中 用的不多 成本高精度 一般 8位一般 单片机 输出 pwm 波 / RC 电路 实现 da 模拟 来实现 da芯片 功能 LM358是双运算放大器信号 放大 da 的 输出 模拟信号 进行 外部 调节 (电机) 通过 灯 进行 变化 体现 功能 无源蜂鸣器有源 只需要 电源 发生 无源 需要 一定频率 脉冲 DS1302 实时时钟芯片 时钟电路 32.768K晶振 给 ds1302 提供 时钟源 电机模块 uln2003 每一对达林顿(两个三极管接在一起)都串联一个2.7K 的基极电阻, 在5V 的工作电压下它能与TTL 和CMOS 电路直接相连, 可以直接处理原先需要标准逻辑缓冲器来处理的数据 五线四相步进电机/直流电机(只能驱动 一个方向/ 不能 反转) 单片机 stc89c52![]() 8051内核 40个 管脚 avr msp430 stm32 连接对应模块 主芯片 晶振电路 12M晶振 复位电路 芯片 重新运行
短路 vcc gnd 对调 ch340 驱动 https://gitee.com/rtthread/rt-thread 开源物联网操作系统设备管理器 串口号 ch340 程序下载软件![]() ![]() 大学里 学 电子的 课程 ROM 只读存储器 (掉电不丢失)(存储程序) RAM 随机存储器 (掉电丢失) (存储变量参数) cpu 位数 rom ram 大小 DIP 封装 双列直插封装 dual in-line package SOP 封装 贴片 封装 AT (Atmel 半导体)
AT 89c51 CMOS是Complementary Metal Oxide Semiconductor(互补金属氧化物半导体)的缩写。 它是指制造大规模集成电路芯片用的一种技术或用这种技术制造出来的芯片, 是电脑主板上的一块可读写的RAM芯片。 因为可读写的特性,所以在电脑主板上用来保存BIOS设置。
32个IO口 40 管脚 通讯 串行接口 RX TX 下载程序
并行 io口 T/C 定时/计数
12MHZ晶振 学习板子
p1 p2 p3 准双向 IO 内部 有 上拉电阻 反相器 通过 上拉电阻 保持 IO口 与 内部输出 同步
数电模电 P4 C语言基础
在下载程序前先确认下开发板上的 USB 转 TTL 串口模块上的 J39 和 J44 端子短接片是否短接好 (即 P31T 与 URXD 连接,P30R 与 UTXD 连接) 单片机是一种数字集成芯片,数字电路中只有两种电平:高电平和低电平 暂时定义单片机输出与输入为 TTL 电平,其中高电平为+5V,低电平为 0V。 计算机的串口为 RS232 电平,其中高电平为-12V,低电平为+12V。 这里强调的是,RS232C 电平为负逻辑电平,大家不要认为上面是我写错了。 因此当计算机与单片机之间要通信时, 需要依靠电平转换芯片,比如 MAX232 电平转换芯片。 TTL 电路和 CMOS 电路的逻辑电平关系如下: ①VOH:逻辑电平 1 的输出电压。 ②VOL:逻辑电平 0 的输出电压。 ③VIH:逻辑电平 1 的输入电压。 ④VIL:逻辑电平 0 的输入电压。 TTL 电平临界值: ①VOHmin=2.4V,VOLmax=0.4V。 ②VIHmin=2.0V,VILmax=0.8V。 CMOS 电平临界值(假设电源电压为+5V): ①VOHmin=4.99V,VOLmax=0.01V。 ②VIHmin=3.5V,VILmax=1.5V。 TTL 和 CMOS 的逻辑电平转换: CMOS 电平能驱动 TTL 电平,但 TTL 电平不能驱动 CMOS 电平,需加上拉电阻 二进制中运算 & 与运算实现“必须都有,否则就没有”这种逻辑关系的一种运算。 C 语言中运算符为“&”,其运算规则如下:0&0=0,0&1=0(1&0=0),1&1=1。 C 语言中“&&”表示“按位与”运算, 意思是变量之间按二进制位数对应关系一一进行“与”运算。 如(0101 0101)&&(1010 1010)=0000 0000,而上面讲到的“&”运算只是对单一位进行运算 | 或运算只要其中之一有就有”这种逻辑关系的一种运算。 C 语言中运算符为“|”,其运算规则如下:0|0=0,0|1=1(1|0=1),1|1=1。 C 语言中“||”表示“按位或”运算, 变量之间按二进制位数对应关系一一进行“或”运算。如(0101 0101)||(1010 1010)=1111 1111, 而上面讲到的“|”运算只是对单一位进行运算 非运算非”运算是实现“求反”这种逻辑关系的一种运算。 C 语言中运算符为“!”,其运算规则如下:!0=1,!1=0 C 语言中 ~ 表示“按位取反”运算。 如~0101 0101=1010 1010,而上面讲到的“!”运算只是对单一位进行运算 C51中的基础知识
C51 扩充数据类型 GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出。 51 单片机芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 不过 GPIO 最简单的应用还属点亮 LED 灯了,只需通过软件控制 GPIO 输出高低电平即可。 当然 GPIO 还可以作为输入控制,比如在引脚上接入一个按键,通过电平的高低判断按键是否按下。 开发板上的电路设计
u16不是 C 语言数据类型关键字, 这是我们重定义的数据类型使用关键字 typedef 对系统默认数据类型 unsigned int 和 unsigned char 重新命名, 主要是方便我们代码的书写和变量类型的查看。 u16 即代表该变量是16 位的无符号整型数据,u8 代表该变量是 8 位的无符号字符型数据。 reg52.h 头文件介绍在代码中引用头文件, 意义就是将这个头文件中的全部内容放到引用 头文件的位置处, 免去我们每次编写同类程序都要将头文件中的语句重复编写。 在代码中加入头文件有两种书写方法, 分别为#include 和#include “reg52.h”,包含头文件时都不需要在后面加分号。 两种写法的区别如下: 1.当使用包含头文件时,编译器先进入到软件安装文件夹处开始搜索这个 头文件,也就是 KEILC51/C51/INC 这个文件夹下, 如果这个文件夹没有引用的头 文件,编译器将会报错。 2.当使用""包含头文件时, 编译器先进入到当前工程所在文件夹处开始搜索 该头文件,如果当前工程所在文件夹下没有该头文件, 编译器将继续回到软件安装文件夹处搜索这个头文件,若找不到该头文件,编译器将报错。 https://blog.51cto.com/990487026/1710519 单片机最小系统构成 (1)晶振电路单片机正常工作需要一个时钟 因此就需要在其晶振引脚上外接晶振 (我们使用STC89CXX 单片机晶振引脚是 18 和 19 脚), 至于需要多大晶振这 就取决于你所使用的单片机, 由于我们使用的是 51 单片机,其时钟频率可在 0-40MHZ 上运行, 一般情况下我们建议选择 12M(适合计算延时时间)或者是 11.0592M(适合串口通信)。 若直接将此晶振接入单片机晶振引脚,会发现系统 工作不稳定, 晶振起振的一瞬间会产生一些电感,为了消除这个电感所 带来的干扰, 可以在此晶振两端分别加上一个电容,电容的选取需要无极性的, 另一端需要共地。 根据选取的晶振大小决定电容值,通常电容可在 10-33PF 值范 围内选取。 我们使用的是 33PF 电容。 这样一来就构成了晶振电路。只有保证晶 振电路稳定,单片机才能继续工作。 系统也有可能会出 现崩溃或者瘫痪状态。 单片机引脚当中就有一个 RST 复位引 脚, 而 STC89CXX 单片机又是高电平复位, 所以只需要让这个引脚保持一段时间 高电平就可以。 要实现此功能通常有两种方式,一种是通过按键进行手动复位, 还有一种是上电复位,即电源开启后自动复位。 手动复位是通过一个按键及电容 电阻所组成,利用按键的开关功能实现复位,按键按下后 VCC 直接进入到单片机 RST 引脚,松开后 VCC 断开,RST 被电阻拉为低电平。 这一合一开就实现了手动 复位。 而自动复位主要是利用 RC 充放电功能,电源已开启,由于电容隔直, VCC 直接进入 RST,然后电容开始慢慢充电,直到充电完成,此时 RST 被电阻拉低。 这样就起到上电复位的效果。 这里我们采用手动复位。 不到系统崩溃,我们几乎 不会操作复位。 当按下按键 RSTK1,VCC 直接连接到 RST 复位脚,VCC 是高电平所以系统复位。 STC89CXX 单片机的工作电压是 3.3-5.5V 范围, 通常我们使用 5V 直流。 将电源接入到各芯片电源引脚即可。 预留了 P3(5V/3V)端子,这些端子可以很方便的给外部模块连 接电源。 程序要烧写到单片机内是通过上位机(PC 机)及对应的软件将编译器生成的 75 xxx.HEX 文件通过单片机串口写入进去。 我们知道现在的笔记本电脑没有 RS232 接口, 所以要使用 USB 转 TTL 串口电 平芯片来建立 PC 机和单片机数据传输通路。 通常使用 CH340G 或者 CH340C 芯片 来完成电平转换。 CH340G 需外接 12M 晶振,而 CH340C 内部自带晶振,所以可以 不接外部 12M 晶振。开发板上使用的是 CH340C 芯片。 一键自动下载电路,无需冷启动。 主要依靠上位机 软件(PZ-ISP)控制 CH340 芯片的 RTS 和 DTR 脚输出, 进而使 MOS 管 Q3 自动断 电后上电,完成冷启动工作。 USB1 接口即为程序下载接口, D-和 D+连接到 CH340 芯片 的 D-和 D+, 然后 CH340 芯片的串口 TXD 和 RXD 管脚就连接到单片机的串口(P3.0、 P3.1)上, 这里不是直接连接到单片机串口,而是通过 P5 端子进行转接。 这样 做不仅可以让开发板 USB 接口下载程序,还可以让单片机串口不受 CH340 干扰, 这样开发板也可以当成 USB 转 TTL 模块使用, 该设计也是考虑 WIFI、蓝牙等模 块与串口通信不受干扰问题。 USB1 接口不仅可以作为程序下载口,还可以作为串口通信口,因为它本身就 是实现串口下载。 同时还可以作为电源供电口,可以看到 USB1 的管脚 1 就是 5V 电源脚, 所以开发板的可以直接使用 USB 线来供电,如果提供的 USB 线有问题, 可以使用安卓手机数据线,接口都是兼容的。 当电源开关打开后,电源指示灯 DP1 即会点亮,表明系统电源正常。
中断就是指CPU正在执行一项任务A, 然后突然停止任务A去执行任务B, 执行完任务B再回来继续执行任务A的过程。 中断跟硬件有关。可以说是硬件来让单片机中断。 2.中断有什么用1.中断能让CPU同时执行多项任务, 例如CPU在执行流水灯程序, 就无法执行 按下按键时,蜂鸣器发声了。 2.当然上面的例子可以用软件轮询检擦案件是否按下来实现, 但这样就消耗了CPU一部分资源来轮询检测 按键是否有按下了,所以中断的另一个优点就是 节省CPU资源 3.双重功能的P3引脚由最小系统板的原理图可知, P3.0~P3.7的引脚对应着 RXD,TXD,INTO,INT1,T0,T1等, 说明P3引脚既是 I/O口, 由有别的功能,这个功能就是中断功能。 4.8051中断体系8051的单片机有 5个中断源,2个优先级 由上图可知, INT0是通过引脚P3.2, INI1时通过引脚P3.3, 定时器T0和T1是 引脚P3.4和P3.5 中断源: INT0(外部中断0), INT1(外部中断1), T0(定时器0),T1(定时器1), RXD和TXD(同属串口中断) 中断相关的特殊寄存器: (1)中断允许控制寄存器(IE)--------控制各中断的开放和屏蔽 (2)定时器/计数器控制寄存器(TCON)-------定时器和外部中断的控制 (3)串行口控制寄存器(SCON)-------串行中断的控制 (4)中断优先级控制寄存器(IP)-------设置各中断的优先级 各寄存器的控制范围如下图: 以INT0为例,INT0产生中断源, 经过TCON寄存器中的IT0为选择是下边沿触发 还是 低电平触发的中断请求 (当然IT0是程序人工设置的), 当中断请求到达IE0的时候, IE0会被硬件置1(当CPU响应此中断请求时,IE0被硬件置0), 然后就到 IE寄存器的地方了, EX0是外部中断INT0的开关, 而 EA 是所有中断的总开关,这都由 IE寄存器控制, 最后经过 IP寄存器 设置优先级,这个一般比较少用, 默认的优先级为,INT0 > T0 > INT1 > T1 >串口中断。 最后把中断请求传给CPU。 5.中断特寄存器TCON寄存器
ES:串行口中断开关 ET1:定时器1中断开关 EX1:外部中断1开关 ET0:定时器0中断开关 EX0:外部中断0开关 IP优先级寄存器 (对应为设置成1说明优先级设置成高,8051只有高低两种优先级) 8051只有高低两种优先级, 默认下优先级从高到低:INT0 > T0 > INT1 > T1 > 串行中断。 1.高优先级的中断可以打断低优先级的中断。 2.正在响应的中断,不能被同级或者低级的中断打断。 3.同时发生几个中断,先响应优先级高的中断 7.中断服务程序的编写中断服务程序就是中断发生后,CPU去执行的函数。 1.中断服务函数没有返回值 2.中断服务函数不能传入参数 例如: void 函数名 (void) interrupt x using y { }x 范围为0~4,分别代表5个中断源,例如外部中断INT0就是0,T0就是1,INT1就是2,T1就是3,串行中断就是4 y 的范围为0~3,分别表示4组工作寄存器,不写就用0. 不写也可以 8.外部中断实现代码 #include sbit LED=P1^0; void main() { IT0=0; //中断触发方式为低电平触发,IT0=1则为下边沿触发 EX0=1; //打开外部中断0 EA=1; //打开中断总开关 while(1) { LED=1; //在没有中断发生时,LED关闭 } } void INTERR(void) interrupt 0 { LED=0;//有中断发生时,LED亮起 }把开发板的 P3.2用杜邦线接到GND上, 就会触发中断,发现LED亮起来了。 (为什么是P3.2?因为由最上面的原理图可知道INT0的引脚是P3.2) 9.定时器/计数器中断工作原理1.由最上面的最小系统原理图可以看出, 定时器T0和T1分别对应的引脚是P3.4和P3.5 2.定时器/计数器 的 计数脉冲来源可以有两个, 一个是芯片内部晶振振荡器输出脉冲12分频后的脉冲, 一个是从外部接入的外部脉冲 3.TLx和THx寄存器,x=0,1。 以TL0和TH0为例, TL0和TH0 都是8位寄存器(8051的寄存器都是8位), 所以TL0和TH0形成高八位和低八位寄存器,用于计数,一共16位。 2^16=65536, 所以 TL0和TH0加一起最大能计数的值是0~65536,一共65536. 4.定时器/计数器的两个寄存器: TCON和TMOD, 其中TCON用于开启定时器/计数器中断, TMOD用于设置定时器/计数器的工作方式(TCON上面 已经说过了) TMOD寄存器:
GATE:门控制。 当GATE=1: INTx引脚为高电平且TRx 要同时为1,定时器Tx才启动。 当GATE=0: 只要TRx =1,定时器Tx就启动,不用理会INTx引脚的电平高低。 C/T:决定是使用 定时功能,还是 计数功能 当C/T=0: 定时功能。加1计数器 对芯片晶振12分频的脉冲计数,一个脉冲过来,就加一,直到 TFx 加满了溢出。 (TFx在TCON寄存器中) 当C/T=1: 计数功能。加1计数器 对来自输入引脚T0(P3.4)或T1(P3.5)的外部脉冲进行计数, 一个脉冲加一,直到TFx加满溢出。 例: 我要定时10ms。晶振频率是12M, 工作模式在方式1 f = 12M/12 =1M (因为要12分频), 也就是说 1秒 1000000个机器周期, 10ms有10000个机器周期。 65536 - 10000 = 55536 ,意思是 计数器从65536 一直减到 55536 所用的时间就是10ms。 55536的十六进制是0xD8F0 所以设置 TH0 = 0XD8,TL0=0XF0 下面给出代码 或者直接下载一个C51定时器计算器:
|
CopyRight 2018-2019 实验室设备网 版权所有 |