51单片机学习历程---单片机入门
主要用来做控制的,如果要驱动外部设备的话,需要使用驱动电路
proteus 模拟
51 8位
最小系统
晶振电路-----提供时钟 12M(方便计算机器周期) 11.0592M(非常适合串行通信,设置波特率的时候误差是0)
复位电路------提供系统复位(手动复位)-----(上电自动复位)
电源电路-----供电电压(51漏极开路,要输出高电平要外接上拉电阻)
只能实现单片机的正常运行
如果需要烧写就要加上-----下载电路
电平特性
不是说一定要到5V才算是高电平,也不是0V才是低电平,有一个临界电压,在临界电压之上就算是高电平,之下就是低电平。
高电平,低电平,高阻态
Sbit位定义
sbit LED1 = P2^0;
typedef unsigned char u8; 0~127
typedef unsigned int u16; 0~65535
GPIO
是通用输入输出端口的简称,可以通过软件来控制其输入和输出
#include"intrins"
循环左移函数 _crol_(起始位,移动几位)
LED_PORT=~(0x01<<i);//i=0,D1亮;i=1,D2亮
移位的话,左移补0 右移:正数补0,负数补1
使用函数的话:缺省的位是循环的
LED_PROT=~(0x01);
LED_PROT=_crol_(LED_PORT,1);
循环右移函数 _cror_
蜂鸣器(BEEP)
无源蜂鸣器(稍大,需要一定频率的脉冲信号)(改频率改音调)
压电式蜂鸣器
有源蜂鸣器(稍小)(音调一般改变不了)
电磁式蜂鸣器
驱动通常需要30mA 通常IO口不足,不会直接使用IO管脚进行驱动
可以使用一些放大电路(三极管)(如果是无源蜂鸣器,即使三极管导通,不给一定频率的脉冲信号,蜂鸣器也不会有声音)
数码管(7段\8段 位数)
发光二极管
共阳极数码管 单片机电压无法驱动,要外接
共阴极数码管
静态数码管(不推荐)
动态数码管
位选
段选(a-g-dp)
三八译码器----74HC138
一个数码管显示之后,要进行消影 SMG_A_DP_PORT=0x00;//消影
把上一次的数码管赋值的有效对下一个数码管赋值的影响。
独立按键
矩阵按键
行列式
线翻转
IO扩展(串转并)-----74HC595
先传高位再传地位
如果要使用IO扩展的时候,要是OE和GND相连,使芯片工作
SER 数据寄存器
SRCLK 移位寄存器时钟的输入引脚(高低电平转换传输数据)
RCLK 存储寄存器时钟的输入引脚
通过第九引脚QH进行多个IO的扩展
LED点阵
是由发光二极管排列组成的显示器件
使用595芯片进行控制
ULN2003芯片
用于驱动大功率器件(电灯,显示屏)
不仅可以用来驱动直流电机,还可以驱动步进电机。
由七对达灵顿管(NPN)
左右两边相当于一个非门的操作,左边输入是1,右边输出0
但是左边是低电平,右边不会变成高电平。
可以输出低电平,不能输出高电平(如果要输出高电平的话,要外接上拉电阻)
直流电机(没有正负极)
直流单机能将直流电能转换成机械能
需要知道直流电机的额定电压和额定功率。
步进电机
是将电脉冲信号转变成角位移或线位移的开环控制元件
转速,停止的位置-----只取决于脉冲信号的频率和脉冲数
一个脉冲使电机转动一个步距角
单极性步进电机------五线四相步进电机
双极性步进电机-------四线双极性步进电机
技术指标:静态:
相数---电机里的线圈数
拍数----转一圈所需要的脉冲数
步距角----一个脉冲信号驱动电机转动的角度
定位转距-----不通电状态所在的位置
静转矩
四线双极性步进电机
TC1508S芯片驱动
中断系统
分时操作、实时响应、可靠性高
中断嵌套
只要是51的芯片就一定会有INT0、INT1,T1、T2、串口
四个外部中断
INT0、INT1、INT2、INT3
中断响应条件:
1、中断源有中断请求
2、中断源允许位为1
3、CPU开中断
例如:
中断0:
EA=1; //打开总中断EX0=1; //开外部中断0IT0= 0/1; //设置中断的触发的方式void exti0() interrupt 0 -------中断0的入口是0 //1是定时器0的入口{//功能代码}
中断1
EA=1; //打开总中断EX1=1; //开外部中断0IT1= 0/1; //设置中断的触发的方式void exti1() interrupt 2 ------中断1的入口是2{//功能代码}
1、配置TCON的IT0为1或为0
2、EX0(允许位)
3、EA(总中断)
TCON的 INT0 =1----下降沿触发
=0----低电平触发
IE---EX0和EA
EA控制总中断
每个中断的优先级可以通过软件设置(一般不修改)
定时器/计数器
T1、T2、T3、T4
溢出请求,进入中断
CPU时序的有关知识
1、振荡周期
2、状态周期
3、机器周期
4、指令周期
外接晶振为12MHz时,51单片机相关周期的具体值为
振荡周期=1/12us 状态周期=1/6us 机器周期=1us 指令周期1~4us
TF1、TF0:分别是定时器1、定时器0的溢出标志位。当定时器x计满溢出时,由硬件使TFx位置“1”,并申请中断。进入中断服务程序后,由硬件自动清“0”,在查询方式下用软件清“0”。
TR1、TR0:分别是定时器1、定时器0的运行控制位。由软件清“0”关闭定时器。当GATE=1,且INTx为高电平时,TR置“1”启动定时器;当GATE=0,TRx置“1”启动定时器。
IE1、IE0:分别为外部中断1、外部中断0的请求标志位。
IT1、IT0:分别为外部中断1、外部中断0的触发方式选择位。当ITx=0,为低电平触发方式;当ITx=1,为下降沿触发方式。
高八位和低八位T1 T0
GATE一般设为0,启动通过TR0进行控制
C/T 设为1---是计数模式 0----为定时模式
TMOD----确定工作方式
TCON----高四位定时器控制位(停止、启动、溢出)
第四位外部中断
定时器配置
1、对TMOD赋值,确定T0和T1的工作方式
2、根据所要定时的时间计算初值,并将其写入TH0、TL0、TH1\TL1
3、如果使用中断,要EA
4、使TR0或TR1置位,启动定时/计数器
例如:
void time0_init(void){TMOD|=0X01; //选择为定时器0模式,工作方式1(这里使用或运算,可以不影响高八位)TH0=0XFC; //给定时器赋初值,定时1msTHL=0X18;ET0=1; //打开定时器0中断允许EA=1; //开总中断TR0=1; //打开定时器}
void time0() interrupt 1{static u16 i = 0;TH0=0XFC; //进入中断服务程序之后重新赋初值THL=0X18;i++;if(i==1000){LED1=!LED1;i=0;}}
串口
是一种通信标准
DB25 DB9
通常用TXD RXD SGND---设备之间要接地
RS232标准 1 -3~ -15V
0 +3 ~ +15
单片机一般用TTL标准 1 5V
0 0V
MAX232转换芯片 可以将RS232和TTL进行转换
通信设备要共GND
串口通信
尽量使用11.0592M
数据寄存在SBUF
波特率计算靠TH1和TL1里面的数据
在使用串口的时候,要打开定时器1,工作在模式2(自动重载)
先传低位,再传高位
接收完毕RI硬件置1 ,进入中断服务函数之后软件将RI清零
发送完毕TI硬件置1 ,进入中断服务函数之后软件将TI清零
波特率
方式0 fosc/12
方式1 (2^SMOD/32)*(T1溢出率)----溢出率=foc/12/(256-初值)
开发工具里有一个波特率计算
串口初始化步骤
1、确定T1的工作方式(TMOD寄存器)-----定时器1--工作方式2(八位重载)
2、确定串口工作方式(SCON寄存器)
3、计算T1的初值(设置波特率),装载TH1、TL1
4、启动T1(TCON中的TR1位)
5、如果使用中断,需要启动串口中断控制位(IE寄存器) ES=1;EA=1
例如:
void uart_init(u8 baud)------baud用来设置波特率{TMOD|=0x20 //设置定时器1工作方式2SCON=0X50 //设置串口为工作方式1PCON=0X80 //波特率加倍TH1=baud //设置计数器初值TL1=baudES=1 //打开接受中断EA=1 //打开总中断TR1=1 //打开定时器}
void uart() interrupt 4{u8 dat = 0;RI=0;dat = SBUF;SBUF=dat;while(!TI);TI=0;}
CH340 USB转串口
MAX232 RS-232转串口
IIC-EEPROM
SCL
SDA
支持多主机多从机的连接模式
没个设备都有一个独立的地址
接了上拉电阻,空闲状态处于高电平
多个主机需要占用总线时,使用仲裁方式决定哪个设备占用总线
三种传输模式 标准100kbps/s 400k 3.4m
连接设备的数量的最大额度受总线的电容限制400pf
SCL高电平时要求数据稳定
先传高位,再传低位
一次传九位(八位数据位,一位应答位)
AT24C02芯片(256个字节)
芯片掉电不消失
创建多文件工程
App------存放外设的一些驱动文件
Obj-----生成的乱七八糟的文件
Public----各个单片机都能使用的文件
User------用户的主函数
DS18B20温度传感器
NOP()
#include"intrins"
左移右移函数
可以使用nop() 进行延时,一个nop()代表一个机器周期,在12M晶振中相当于延时了1us
DS1302时钟芯片
涓流充电(是用来弥补电池在充满电后由于自放电而造成的容量损失。一般采用脉冲电流充电来实现上述目的。为补偿自放电,使蓄电池保持在近似完全充电状态的连续小电流充电。又称维护充电。)
读数据
读一次得到最低位 temp
读八次
value=(temp<<7)|(value>>1)
或者
dat>>1;
if(读取是1)
dat |=0x80
读取的是0,不管他,直接继续循环进行移位,左边会补0
读一次得到最高位 temp
读八次
value+=temp
value<<1
红外遥控器(HS0038)
NEC协议:
没有接收到脉冲信号的时候为高电平
ADC模数转换器(XPT2046)(逐步逼近)
采样,保持,量化,编码
采样保持电路
直接比较:逐次逼近型ADC、并行的ADC
间接比较:双积分型ADC
板子上接了AD1 电位器、 NTC1 热敏传感器、 GR1 光敏传感器,
DAC数模转换
通常使用PWM(脉冲宽度调制)模拟
使用占空比模拟输出模拟信号
LCD1602液晶显示(字符型)
LCD12864液晶显示(像素点)四行(每行八个字)
带字库的
TFTLCD(彩屏)
薄膜晶体管液晶显示器
图片取模,加const(常量)-----使其存放在flash中
触摸屏:
电阻式触摸屏 精度高,稳定性好,价格低------工业上
容易被划伤,透光性不好。 不支持多点触摸,
电容式触摸屏 人体感应进行触点检测
表面式电容触摸屏----单点触摸
投射式电容触摸屏----多点触摸,寿命长,灵敏度高
51中的const与code & Keil MDK中的const与code
在Keil 51中,code修饰的变量放在ROM(Flash)中,而const修饰的变量为只读(不可修改),放在RAM中!可以用“code const”修饰变量,表示变量存储在ROM中,且为只读,由此看来“code”与“code const”修饰变量有一样的功用。
Keil MDK中的const与code
在Keil MDK中,如进行STM32的开发,code修饰符无法使用,使用的话会报错。那么要怎么来修饰存放在ROM中的变量?此时是用到const,用const修饰的变量是存放在ROM中的。
总结,注意不同编译器对于const与code的规定。code一般用于51中,而const应用则非常广泛,注意其在不同的编译环境中表现的数据存储位置。
xdata
定义的时候加这个,可以把数据存放到外部存储区里
继电器
NC--------不通电处于常闭
NO-------不通电是处于常开
IO拓展(并转串口)--74HC165
RS485通信
半双工
有且只有一个主机,剩下的全是从机
0X30, 这个值是将数字
0-9 转换为 ASCII 码
仿真器和烧录器
烧录器是用来将特定格式的程序文件(比如*.hex *.bin等格式)烧进单片机的内部EEPROM,使其上电后能运行你烧入的程序。也就是说你每次修改完程序需要验证的时候都得烧一次芯片,然后接到板子上,再上电运行,而且不支持多种调试方式。
仿真器是通过硬件和相应的软件对单片机进行仿真,可以直接接在用户板上运行程序,还可以进行程序调试(单步、断点等),它不需要每次修改程序都烧写芯片,更没有来回拆、装芯片的麻烦,是学习单片机极其方便的工具。不过一般情况下,价格较高。
51单片机学习历程---单片机入门相关推荐
- 51单片机学习历程——硬件准备&开发环境搭建
系列文章目录 第一章 51单片机学习历程(1)--开发环境搭建 第二章 51单片机学习历程(2)--建立新的工程 第三章 51单片机学习历程(3)--点亮一颗LED 第四章 51单片机学习历程(4)- ...
- 【小白】【大学】一名嵌入式软件开发小白的单片机学习历程、心路历程、经验分享
我的嵌入式学习之路 我为什么写这篇文章 先简单介绍一下我自己 与每一个技术小白共勉 这篇文章写给谁 我的学习经验分享 我的成长之路 我的单片机学习历程分享 51系列单片机学习历程 预备知识:(可以查百 ...
- 51 单片机学习历程 <一>
软件篇: Keil uVision 5(链接:https://pan.baidu.com/s/1yd4mGlqIAsaFPAOEFbzdpw 提取码:8888) STC (链接:https://pa ...
- 51单片机学习历程(三)点亮单片机的第一盏灯
点亮流水灯共有三种方式 1.一盏一盏的操作:即先令第一盏灯亮,延时,再令它熄灭,延时,再让下一盏灯重复操作即可: 2.利用数组方法点亮:先定义一个数组,其中存入相应8盏灯亮的数字(即0xfe,0xfd ...
- 单片机sleep函数的头文件_单片机学习day8—单片机IO扩展
74HC165芯片-并转串 74HC165中文资料.pdf 267.6K · 百度网盘 8位移位寄存器(并行输入,互补串行输出) 时钟输入端 CLK,CLK INK (上升沿有效) A-H 并行数据输 ...
- 数据科学家之路 - 个人学习历程和入门规划
本文分为两部分:第一部分介绍我学习的过程,第二部分介绍对新人的指导规划 个人反思 总览下我的学习过程,我的学习过程分为一些几个阶段: (1)2017年7月以前 : 没有来学校之前,意识到自己以后开始由 ...
- 51单片机和32单片机有什么区别?该从哪个开始入门学习?
单片机(microcontroller)是一种能够完成特定功能的微型电脑.它包含了中央处理器(CPU).存储器(ROM.RAM)以及输入/输出接口(I/O).单片机被广泛应用于各种电子设备中,如电子手 ...
- 从零学习入门51单片机和STM32单片机
❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分:建议先学习51单片机,其是STM32等高级单片机的基础:这样再学习STM32时才能融会贯通. ☀️ 专栏适 ...
- 《51单片机应用开发从入门到精通》——2.2 跑马灯实例
本节书摘来自异步社区<51单片机应用开发从入门到精通>一书中的第2章,第2.2节,作者 张华杰,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.2 跑马灯实例 ...
- 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础
上篇文章 单片机入门学习四 STM32单片机学习一 跑马灯程序和创建工程 仅介绍了入门程序及其编译运行过程,下面开始对stm32的一些基础知识做一个记录. 1.stm32f103zet6(上篇问题3 ...
最新文章
- 转录组背景、环境设置(目录管理)
- 你了解 Java 的 jstat 命令吗?
- 个人易遗忘的代码记录(6) 汉字转拼音
- iptables命令结构之命令
- 【C++学习笔记三】C++多态、抽象(接口)
- 2020中国直播电商生态白皮书
- 一汽大众t一roc_15万元预算能买到的紧凑型SUV——一汽-大众T-ROC探歌
- 【HC资料合集】2019华为全联接大会主题资料一站式汇总,免费下载!
- python核心装饰_《python核心编程》中高级闭包和装饰器理解?
- 【大数据部落】R语言RFM模型在电商行业的应用
- 腾讯地图拾取坐标html,GitHub - cloydlau/coord-picker: 高德/腾讯地图坐标拾取器 / A coordinates picker for amap/tmap...
- IDEA使用的插件记录
- IDEA断点变成了白色
- 设置360浏览器的背景为护眼模式(浅豆绿色)
- 计算机输入法不能切换用户登录,输入法不能正常切换,输入法切换不出来 - 输入法切换不了,输入法不能切换怎么办? - 安全专题...
- MySQL入门学习之——MySQL Cluster初体验
- 什么是二维数组以及二维数组传参
- MATLAB根据经纬度格网数据画地图
- 干货 | 这些年,我用的绘图工具大合集
- Centos7.1搭建openstack私有云