51单片机必会驱动
数码管驱动
动态扫描显示
#include
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA = P2^2 ;
sbit LSB = P2^3 ;
sbit LSC = P2^4 ;
u8 code smgduan[] = {0x3f ,0x06 ,0x5b ,0x4f ,0x66 ,0x6d ,0x7d ,0x07 ,0x7f ,0x6f };
void delay(u16 i)
{
while (i--);
}
void digDisplay()
{
u8 i;
for (i=0 ;i<8 ;i++)
{
switch (i)
{
case 0 :
LSA = 0 ;LSB = 0 ;LSC = 0 ;break ;
case 1 :
LSA = 1 ;LSB = 0 ;LSC = 0 ;break ;
case 2 :
LSA = 0 ;LSB = 1 ;LSC = 0 ;break ;
case 3 :
LSA = 1 ;LSB = 1 ;LSC = 0 ;break ;
case 4 :
LSA = 0 ;LSB = 0 ;LSC = 1 ;break ;
case 5 :
LSA = 1 ;LSB = 0 ;LSC = 1 ;break ;
case 6 :
LSA = 0 ;LSB = 1 ;LSC = 1 ;break ;
case 7 :
LSA = 1 ;LSB = 1 ;LSC = 1 ;break ;
}
P0 = smgduan[7 -i];
delay(100 );
P0 = 0x00 ;
}
}
void main()
{
while (1 )
{
digDisplay();
}
}
静态显示
这里写代码片
串口驱动
相关原理
串行通信分类
异步通信:异步通信是以字符(构成的帧)为单位进行传输,字符之间时间间隔任意
同步通信:同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。传输数据的位之间的距离均为“位间隔”的整数倍 ,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。可通过外同步和自同步实现。
传输方向:单工、半双工(分时双向通信)、全双工。
传输速率:比特率。即每秒钟传输二进制代码的位数
串行通信接口标准:
a) RS-232C接口
有25针和9针接口
特点: (1)传输距离短,传输速率低 (2) 有电平偏移 (3)抗干扰能力差
b) RS-422A接口(全双工)
RS-422A输出驱动器为双端平衡驱动器,差分电路避免或大大减弱地线干扰和电磁干扰的影响,RS-422A传输速率(90Kbps)时,传输距离可达1200米。
c) RS-485接口(半双工)
RS-485是RS-422A的变型,需要两根传输线,抗干扰性极好,传输距离可达1200米,传输速率可达1Mbps。
串口控制寄存器SCON
SCON 是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志:
SM0、SM1:工作方式选择位,有四种方式可选
SM2:多机通信控制位,主要用于方式2和方式3。
if (SM2==1 )
{
if (RB8==0 )
不激活RI,丢弃收到的信息;
else
收到的数据进入SBUF,激活RI;
}else
{
无视RB8,数据进入SBUF,激活RI;
}
在方式0时,SM2必须是0。在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1。
REN:允许串行接受位
TB8:在方式2或方式3中,是发送数据的第九位
RB8:在方式2或方式3中,是接收数据的第九位
TI:发送中断标志位
RI:接收中断标志位
6. 功率控制寄存器PCON
SMOD:波特率倍增位,为1时波特率提高一位
7. 80C51串行口工作方式
a) 方式0
这种工作方式比较特殊,与常见的微型计算机的串行口不同,它又叫同步移位寄存器输出方式。在这种方式下,数据从 RXD 端串行输出或输入,同步信号从 TXD 端输出,波特率固定不变,为振荡率的 1/12 。该方式是以 8 位数据为一帧,没有起始位和停止位,先发送或接收最低位。
b) 方式1
方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚。其中1位起始位,8位数据位,1位停止位。
用软件置REN为1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。
当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。
c) 方式2和方式3
方式2和方式3时起始位1位,数据9位(含1位附加的第9位,发送时为SCON中的TB8,接收时为RB8),停止位1位,一帧数据为11位。方式2的波特率固定为晶振频率的1/64或1/32,可由 PCON 的最高位选择。方式3的波特率由定时器T1的溢出率决定。
采用这种方式可接收或发送 11 位数据,以 11 位为一帧,比方式 1 增加了一个数据位,其余相同。第 9 个数据即 D8 位具有特别的用途,可以通过软件控制它,再加特殊功能寄存器 SCON 中的 SM2 位的配合,可使 MCS-51 单片机串行口适用于多机通信。方式 2 的波特率固定,只有两种选择,为振荡率的 1/64 或 1/32 ,
SM0 SM1 方式 功 能 说 明
0 0 0 同步移位寄存器方式(用于扩展I/O口)
0 1 1 8位异步收发,波特率可变(由定时器控制)
1 0 2 9位异步收发,波特率为fosc/64或fosc/32
1 1 3 9位异步收发,波特率可变(由定时器控制)
8. 波特率的计算
方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。四种工作方式共有三种波特率。
方式0的波特率 = fosc/12
方式2的波特率 =(2^(SMOD)/64)· fosc
方式1的波特率 =(2^(SMOD)/32)·(T1溢出率)
方式3的波特率 =(2^(SMOD)/32)·(T1溢出率)
T1 溢出率 = fosc /{12×[256-TH1)]}
9. 串口使用方法
配置产生波特率的定时器1、串行口控制和中断控制的参数
a) 确定T1的工作方式(编程TMOD寄存器);
b) 计算T1的初值,装载TH1、TL1;
c) 启动T1(编程TCON中的TR1位);
d) 确定串行口控制(编程SCON寄存器);
串行口在中断方式工作时,要进行中断设置(编程IE、
IP寄存器)。
代码
#include
typedef unsigned char u8;
typedef unsigned int u16;
void UsartInit()
{
TMOD = 0x20 ;
TH1 = 0xF3 ;
TL1 = 0xF3 ;
PCON = 0x80 ;
TR1 = 1 ;
SCON = 0x50 ;
ES = 1 ;
EA = 1 ;
}
void main()
{
UsartInit();
while (1 );
}
void Usart() interrupt 4
{
u8 receiveData;
receiveData = SBUF;
RI = 0 ;
SBUF = receiveData ;
while (!TI);
TI = 0 ;
}
PCF8951 AD/DA驱动
ADC
DAC
矩阵键盘驱动
相关原理
代码
AT24C02存储模块驱动
DS1302S时钟驱动
1602液晶驱动
18B20温度模块驱动