主要用来做控制的,如果要驱动外部设备的话,需要使用驱动电路

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单片机学习历程---单片机入门相关推荐

  1. 51单片机学习历程——硬件准备&开发环境搭建

    系列文章目录 第一章 51单片机学习历程(1)--开发环境搭建 第二章 51单片机学习历程(2)--建立新的工程 第三章 51单片机学习历程(3)--点亮一颗LED 第四章 51单片机学习历程(4)- ...

  2. 【小白】【大学】一名嵌入式软件开发小白的单片机学习历程、心路历程、经验分享

    我的嵌入式学习之路 我为什么写这篇文章 先简单介绍一下我自己 与每一个技术小白共勉 这篇文章写给谁 我的学习经验分享 我的成长之路 我的单片机学习历程分享 51系列单片机学习历程 预备知识:(可以查百 ...

  3. 51 单片机学习历程 <一>

    软件篇: Keil uVision 5(链接:https://pan.baidu.com/s/1yd4mGlqIAsaFPAOEFbzdpw  提取码:8888) STC (链接:https://pa ...

  4. 51单片机学习历程(三)点亮单片机的第一盏灯

    点亮流水灯共有三种方式 1.一盏一盏的操作:即先令第一盏灯亮,延时,再令它熄灭,延时,再让下一盏灯重复操作即可: 2.利用数组方法点亮:先定义一个数组,其中存入相应8盏灯亮的数字(即0xfe,0xfd ...

  5. 单片机sleep函数的头文件_单片机学习day8—单片机IO扩展

    74HC165芯片-并转串 74HC165中文资料.pdf 267.6K · 百度网盘 8位移位寄存器(并行输入,互补串行输出) 时钟输入端 CLK,CLK INK (上升沿有效) A-H 并行数据输 ...

  6. 数据科学家之路 - 个人学习历程和入门规划

    本文分为两部分:第一部分介绍我学习的过程,第二部分介绍对新人的指导规划 个人反思 总览下我的学习过程,我的学习过程分为一些几个阶段: (1)2017年7月以前 : 没有来学校之前,意识到自己以后开始由 ...

  7. 51单片机和32单片机有什么区别?该从哪个开始入门学习?

    单片机(microcontroller)是一种能够完成特定功能的微型电脑.它包含了中央处理器(CPU).存储器(ROM.RAM)以及输入/输出接口(I/O).单片机被广泛应用于各种电子设备中,如电子手 ...

  8. 从零学习入门51单片机和STM32单片机

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分:建议先学习51单片机,其是STM32等高级单片机的基础:这样再学习STM32时才能融会贯通. ☀️ 专栏适 ...

  9. 《51单片机应用开发从入门到精通》——2.2 跑马灯实例

    本节书摘来自异步社区<51单片机应用开发从入门到精通>一书中的第2章,第2.2节,作者 张华杰,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.2 跑马灯实例 ...

  10. 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础

    上篇文章 单片机入门学习四 STM32单片机学习一 跑马灯程序和创建工程 仅介绍了入门程序及其编译运行过程,下面开始对stm32的一些基础知识做一个记录. 1.stm32f103zet6(上篇问题3 ...

最新文章

  1. 转录组背景、环境设置(目录管理)
  2. 你了解 Java 的 jstat 命令吗?
  3. 个人易遗忘的代码记录(6) 汉字转拼音
  4. iptables命令结构之命令
  5. 【C++学习笔记三】C++多态、抽象(接口)
  6. 2020中国直播电商生态白皮书
  7. 一汽大众t一roc_15万元预算能买到的紧凑型SUV——一汽-大众T-ROC探歌
  8. 【HC资料合集】2019华为全联接大会主题资料一站式汇总,免费下载!
  9. python核心装饰_《python核心编程》中高级闭包和装饰器理解?
  10. 【大数据部落】R语言RFM模型在电商行业的应用
  11. 腾讯地图拾取坐标html,GitHub - cloydlau/coord-picker: 高德/腾讯地图坐标拾取器 / A coordinates picker for amap/tmap...
  12. IDEA使用的插件记录
  13. IDEA断点变成了白色
  14. 设置360浏览器的背景为护眼模式(浅豆绿色)
  15. 计算机输入法不能切换用户登录,输入法不能正常切换,输入法切换不出来 - 输入法切换不了,输入法不能切换怎么办? - 安全专题...
  16. MySQL入门学习之——MySQL Cluster初体验
  17. 什么是二维数组以及二维数组传参
  18. MATLAB根据经纬度格网数据画地图
  19. 干货 | 这些年,我用的绘图工具大合集
  20. Centos7.1搭建openstack私有云

热门文章

  1. USB-CAN模块使用
  2. 日记/malloc函数与头文件
  3. Java中this和super的区别
  4. altium designer14的Import wizard 没有内容或为空的解决方法
  5. 盗窟手机小我私人撤军华强北:市场一年不如一年
  6. 利用度盘直链解析网页及XDOWN高速下载百度网盘分享资源
  7. Mybatis——持久层框架
  8. C语言学习-小甲鱼(第一天随堂笔记)
  9. 74LS系列芯片简记——00-09
  10. 电子罗盘的工作原理及校准