51单片机学习历程---单片机入门

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

proteus 模拟

51 8位

最小系统

晶振电路-----提供时钟 12M(方便计算机器周期) 11.0592M(非常适合串行通信,设置波特率的时候误差是0)

复位电路------提供系统复位(手动复位)-----(上电自动复位)

电源电路-----供电电压(51漏极开路,要输出高电平要外接上拉电阻)

只能实现单片机的正常运行

如果需要烧写就要加上-----下载电路

电平特性

不是说一定要到5V才算是高电平,也不是0V才是低电平,有一个临界电压,在临界电压之上就算是高电平,之下就是低电平。

高电平,低电平,高阻态

Sbit位定义

sbit LED1 = P2^0;

51单片机学习历程---单片机入门_第1张图片

typedef unsigned char u8; 0~127

typedef unsigned int u16; 0~65535

GPIO

是通用输入输出端口的简称,可以通过软件来控制其输入和输出

#include"intrins"

循环左移函数 _crol_(起始位,移动几位)

LED_PORT=~(0x01<

移位的话,左移补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

先传高位再传地位

51单片机学习历程---单片机入门_第2张图片

如果要使用IO扩展的时候,要是OE和GND相连,使芯片工作

SER 数据寄存器

SRCLK 移位寄存器时钟的输入引脚(高低电平转换传输数据)

RCLK 存储寄存器时钟的输入引脚

通过第九引脚QH进行多个IO的扩展

LED点阵

是由发光二极管排列组成的显示器件

使用595芯片进行控制

ULN2003芯片

用于驱动大功率器件(电灯,显示屏)

不仅可以用来驱动直流电机,还可以驱动步进电机。

由七对达灵顿管(NPN)

左右两边相当于一个非门的操作,左边输入是1,右边输出0

但是左边是低电平,右边不会变成高电平。

可以输出低电平,不能输出高电平(如果要输出高电平的话,要外接上拉电阻)

直流电机(没有正负极)

直流单机能将直流电能转换成机械能

需要知道直流电机的额定电压和额定功率。

步进电机

是将电脉冲信号转变成角位移或线位移的开环控制元件

转速,停止的位置-----只取决于脉冲信号的频率和脉冲数

一个脉冲使电机转动一个步距角

单极性步进电机------五线四相步进电机

双极性步进电机-------四线双极性步进电机

技术指标:静态:

        相数---电机里的线圈数

        拍数----转一圈所需要的脉冲数

        步距角----一个脉冲信号驱动电机转动的角度

        定位转距-----不通电状态所在的位置

        静转矩

四线双极性步进电机

TC1508S芯片驱动

中断系统

分时操作、实时响应、可靠性高

中断嵌套

只要是51的芯片就一定会有INT0、INT1,T1、T2、串口

51单片机学习历程---单片机入门_第3张图片

四个外部中断51单片机学习历程---单片机入门_第4张图片

INT0、INT1、INT2、INT3

中断响应条件:

1、中断源有中断请求

2、中断源允许位为1

3、CPU开中断

例如:

中断0:

        EA=1; //打开总中断

        EX0=1; //开外部中断0

        IT0= 0/1; //设置中断的触发的方式

        void exti0() interrupt 0 -------中断0的入口是0 //1是定时器0的入口

        {

            //功能代码

        }

        中断1

        EA=1; //打开总中断

        EX1=1; //开外部中断0

        IT1= 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

51单片机学习历程---单片机入门_第5张图片

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,为下降沿触发方式。51单片机学习历程---单片机入门_第6张图片

高八位和低八位T1 T0

51单片机学习历程---单片机入门_第7张图片

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; //给定时器赋初值,定时1ms

    THL=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;

    }

}

串口

是一种通信标准51单片机学习历程---单片机入门_第8张图片

DB25 DB951单片机学习历程---单片机入门_第9张图片

通常用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(自动重载)

先传低位,再传高位51单片机学习历程---单片机入门_第10张图片

51单片机学习历程---单片机入门_第11张图片

接收完毕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工作方式2

    SCON=0X50 //设置串口为工作方式1

    PCON=0X80 //波特率加倍

    TH1=baud //设置计数器初值

    TL1=baud

    ES=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

SDA51单片机学习历程---单片机入门_第12张图片

支持多主机多从机的连接模式

没个设备都有一个独立的地址

接了上拉电阻,空闲状态处于高电平

多个主机需要占用总线时,使用仲裁方式决定哪个设备占用总线

三种传输模式 标准100kbps/s 400k 3.4m

连接设备的数量的最大额度受总线的电容限制400pf51单片机学习历程---单片机入门_第13张图片

SCL高电平时要求数据稳定

先传高位,再传低位

一次传九位(八位数据位,一位应答位)

51单片机学习历程---单片机入门_第14张图片

51单片机学习历程---单片机入门_第15张图片

AT24C02芯片(256个字节)

芯片掉电不消失

创建多文件工程

App------存放外设的一些驱动文件

Obj-----生成的乱七八糟的文件

Public----各个单片机都能使用的文件

User------用户的主函数

DS18B20温度传感器

51单片机学习历程---单片机入门_第16张图片

51单片机学习历程---单片机入门_第17张图片

51单片机学习历程---单片机入门_第18张图片

NOP()

#include"intrins"

左移右移函数

可以使用nop() 进行延时,一个nop()代表一个机器周期,在12M晶振中相当于延时了1us

DS1302时钟芯片

涓流充电(是用来弥补电池在充满电后由于自放电而造成的容量损失。一般采用脉冲电流充电来实现上述目的。为补偿自放电,使蓄电池保持在近似完全充电状态的连续小电流充电。又称维护充电。)

51单片机学习历程---单片机入门_第19张图片

51单片机学习历程---单片机入门_第20张图片

 51单片机学习历程---单片机入门_第21张图片

51单片机学习历程---单片机入门_第22张图片

51单片机学习历程---单片机入门_第23张图片

读数据

读一次得到最低位 temp

读八次

value=(temp<<7)|(value>>1)

或者

dat>>1;

if(读取是1)

dat |=0x80

读取的是0,不管他,直接继续循环进行移位,左边会补0

读一次得到最高位 temp

读八次

value+=temp

value<<1

红外遥控器(HS0038)

NEC协议:

51单片机学习历程---单片机入门_第24张图片

没有接收到脉冲信号的时候为高电平

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单片机,单片机)