单片机内部资源的使用及功能模块的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
2
3
1
1
3
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
9
0
6
7
1
8
7
6
5
4
3
2
1
2
3
4
5
6
7
8
9Βιβλιοθήκη Baidu
P
P
P
P
P
P
P
P
RST
P
E
R
R
2
2
2
2
2
2
2
2
S
W
S
7
6
5
4
3
2
1
0
B
V
C
C
1
R12864
0
3
V
V
C
C
C
C
G
G
N
N
RST
P
P
P
P
P
P
P
P
1
1
1
1
1
1
1
1
2
1
7
6
5
4
3
2
1
0
ALE/PRDG
WR/P36
EA/VPP
RD/P37
PSEN
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
2
3
1
1
3
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
9
0
6
7
1
8
7
6
5
4
3
2
1
2
3
4
5
6
7
8
9
E
R
R
W
L298内部的原理图
OUT1 OUT2
6V动力电源
OUT3
OUT4
IN1 IN2 ENA
IN4 IN3 ENB
L298的逻辑功能
•
IN1
X 1 0 0 1
IN2
X 0 1 0 1
ENA
0 1 1 0 0
电机状 态 停止
顺时针 逆时针 停止 停止
电机驱动模块连接图
超声波模块设计
• 最常用的超声测距的方法是回声探测法,超声波发射器向 某一方向发射超声波,在发射时刻的同时计数器开始计时 ,超声波在空气中传播,途中碰到障碍物面阻挡就立即反 射回来,超声波接收器收到反射回的超声波就立即停止计 时。超声波在空气中的传播速度为340m/s,根据计时器 记录的时间t,就可以计算出发射点距障碍物面的距离S, 即:S=340t/2。 • 由于超声波也是一种声波,其声速V与温度有关。 V=331.4+0.607T在使用时,如果传播介质温度变化不大 ,则可近似认为超声波速度在传播的过程中是基本不变的 。如果对测距精度要求很高,则应通过温度补偿的方法对 测量结果加以数值校正。声速确定后,只要测得超声波往 返的时间,即可求得距离。这就是超声波测距仪的基本原 理。
第六届梦想启航11、12级第三期
主讲人:周海林
2013年10月26日
本期主要内容
• • • • • • • • 一、中断应用 二、定时器/计数器的应用 三、AD转换模块设计(以AD0809为例) 四、液晶显示模块设计 五、矩阵键盘模块设计 六、循迹模块设计 七、电机驱动模块设计 八、超声波避障、测距模块设计
4、 LCD 1602初始化过程
(1)延时15ms; (2)写指令38H(不检测忙信号); (3)延时5ms; (4)写指令38H(不检测忙信号); (5)延时5ms; (6)写指令38H(不检测忙信号); (7)以后每次写指令、读写数据操作之前均需检测忙信号; (8)写指令38H:显示模式设置; (9)写指令08H:显示关闭; (10)写指令01H:显示清屏; (11)写指令06H:显示光标移动设置; (12)写指令0CH:显示开及光标设置;
VCC RW1 1 03 VCC
(测试点B )
VCC D1 LED
R1 3 30 G1
R3 4 7K 3
4
(测试点A)2
LM3 24
1
R2
(测试点C )
1K
RPR22 0
11
L298驱动芯片
• L298N是SGS公司的产品,内部包含4通道逻辑驱动电路。 是一种二相和四相电机的专用驱动器,即内含二个H桥的 高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信 号,可驱动46V、2A以下的电机。 • 其实物及引脚图如下所示:
初始化函数
矩阵键盘模块设计
4x4矩阵键盘扫描函数
循迹模块设计
循迹原理
一对光电开光的发射管不停的发射红外光,经过路面发射回来的被接受管 接收到。因为白色路面和黑线对光的反射不同,所以正对白色路面的光电对 管的接收管接收到更多的红外光,而正对黑线的光电对管的接收管收到较少 的红外光。经过光电开关的接收电路将接收到红外光的多少转化为正相关的 电流大小,并进一步转化成接收电路的输出电压(A点电压)的较小值和较 大值。 输出电压的较小值和较大值进一步与一个居中的基准电压分别进行比较, 对应比较器的输出端(C点)分别为高电平还是低电平,并进一步输出给单 VCC 片机,同时对应指示发光管的不亮与亮。
4
RS
5
6
R/W
E
R/W为读写信号线,高电平时进行读操 作,低电平时进行写操作。
E(或EN)端为使能(enable)端,下降沿 使能。
引脚
符号
功能说明 低4位三态、 双向数据总线 0位 (最低位) 低4位三态、 双向数据总线 1位 低4位三态、 双向数据总线 2位 低4位三态、 双向数据总线 3位 高4位三态、 双向数据总线 4位 高4位三态、 双向数据总线 5位 高4位三态、 双向数据总线 6位 高4位三态、 双向数据总线 7位 (最高位)(也是busy flag) 背光电源正极 背光 电源负极
MCS-51中断控制系统
中断流程
IE寄存器
IP寄存器
自然优先等级
不同优先等级下,程序执行的流程
不同优先等级下,程序执行的流程
TCON寄存器
中断设置
中断子程序
INT0中断实例
定时器/计数器方式
方 式
Mode 0
位数
13 位
计数范围
0~8191
其它功能
Mode 1 Mode 2
IN0-IN7:8条模拟量输入通道 ADC0809对输入模拟量要求:信号单极 性,电压范围是0-5V,若信号太小,必须 进行放大;输入的模拟量在转换过程中应该 保持不变,如若模拟量变化太快,则需在输 入前增加采样保持电路。 地址输入和控制线:4条 ALE为地址锁存允许输入线,高电平有效。 当ALE线为高电平时,地址锁存与译码器将 A,B,C三条地址线的地址信号进行锁存, 经译码后被选中的通道的模拟量进转换器进 行转换。
(2)写指令:
输入:RS=L;RW=L; D0~D7=指令码;E=高脉冲 输出:无
• void Write_LCD_Command(uchar cmd)
• • • • • • • • {
while((Busy_Check()&0x80)==0x80); //busy! wait!!! RS=0; RW=0;E=0; P0=cmd; E=1; Delay_Ms(1); E=0;
定时器中断设置范例
启动定时器命令
中断子程序第一行的格式
捕获方式
定时器实例
中断子程序(重复方式)
输出反相 填入计数值 中断重复次数归零 判断中断重复次数
AD转换模块设计
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控 制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直 接接口。 (1)ADC0809的内部逻辑结构 由图可知,ADC0809由一
电路原理图
C例程
液晶显示模块设计
1602字符型液晶显示屏
• 字符型LCD是由若干个5×7或5×11等点阵符位 组成。每一个点阵字符位都可以显示一个字符。 点阵字符位之间有一空点距的间隔起到了字符间 距和行距的作用。目前市面上常用的有16字×1 行,16字×2行(简称1602),20字×2行和40 字×2行等的字符模块组,其中1602液晶显示屏 应用比较广泛。
个8路模拟开关、一个地址 锁存与译码器、一个A/D转 换器和一个三态输出锁存 器组成。多路开关可选通8 个模拟通道,允许8路模拟 量分时输入,共用A/D转换 器进行转换。三态输出锁 器用于锁存A/D转换完的数 字量,当OE端为高电平时, 才可以从三态输出锁存器 取走转换完的数据。
(2). 引脚结构
12864液晶模块设计
1
1
1
1
1
1
1
1
9
8
9
5
4
3
2
1
0
8
7
6
5
4
3
2
1
AT89C51
RESET
X
X
P35/T1
P34/T0
P33/INT1
P32/INT0
P31/TXD
P30/RXD
P
P
P
P
P
P
P
P
1
1
1
1
1
1
1
1
2
1
7
6
5
4
3
2
1
0
ALE/PRDG
WR/P36
EA/VPP
RD/P37
PSEN
1、1602引脚
引脚 1 2 3 符号 VSS VDD V0
功能说明 接地 接电源(+5V) 液晶显示器对比度调整端,接正电源时 对比度最弱,接地电源时对比度最高( 对比度过高时会产生“鬼影”,使用时 可以通过一个10K的电位器调整对比度 )。 RS为寄存器选择,高电平1时选择数据 寄存器、低电平0时选择指令寄存器。
Mode 3
16 位 8位
8位
0~65535 0~255
0~255
具有自动加载功能
TMOD寄存器
MODE 0工作方式(Timer 0为例)
Mode 0工作方式的计数值
MODE 1工作方式(Timer 0为例)
Mode 1工作方式的计数
计数值
mode 0 填入计数值范例
mode 1 填入计数值范例
C
B 0
A 0
选择的通道 IN0
通道选择表如右表所示
0
0
0 0 1 1 1 1
0
1 1 0 0 1 1
1
0 1 0 1 0 1
IN1
IN2 IN3 IN4 IN5 IN6 IN7
ADC0809应用说明 (1). ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。 (2). 初始化时,使ST和OE信号全为低电平。 (3). 送要转换的哪一通道的地址到A,B,C端口上。 (4). 在ST端给出一个至少有100ns宽的正脉冲信号。 (5). 是否转换完毕,我们根据EOC信号来判断。 (6). 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单 片机了。
P
E
R
R
D
D
S
W
S
12864与51单片机连线图
B
2
1
1
1
1
1
1
1
1
1
1
0
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
1
1
2
2
8
B
B
V
RST
N
P
D
D
D
D
D
D
D
D
E
R
R
V
V
G 8
6
S 6
L
L
O
C
B
B
B
B
B
B
B
B
W
S
O
C
N
4
B 4
K
A
U
7
6
5
4
3
2
1
0
C
D
T
LCD
12864
检测忙函数
写指令函数
写数据函数
显示位置函数
7 8 9 10 11 12 13 14 15 16
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 BLA BLK
1
1
1
1
1
1
1
1
9 8 9 5 4 3 2 1 0
8
7
6
5
4
3
2
1
AT89C51
RESET
X
X
P35/T1
P34/T0
P33/INT1
P32/INT0
P31/TXD
P30/RXD
LCD 1602初始化函数实例
• void Initialize_LCD( ) • { • Write_LCD_Command(0x38); • Delay_Ms(1); • Write_LCD_Command(0x01); • Delay_Ms(1); • Write_LCD_Command(0x06); • Delay_Ms(1); • Write_LCD_Command(0x0c); • Delay_Ms(1); • }
(1)读状态
输入:RS=L;RW=H;E=H 输出:D0~D7=状态字
• uchar Busy_Check( )
• { • • • • • • • }
uchar lcd_status; RS=0; RW=1;E=1; Delay_Ms(1); lcd_status=P0; E=0; return lcd_status;
S
P
P
P
P
P
P
P
P
0
0
0
0
0
0
0
0
7
6
5
4
3
2
1
0
G
N
D
1
Rv1602
0
3
V
C
1602与51单片机连线图
C
1
R1602
k
V
C
C
G
G
N
N
P
P
P
P
P
P
P
P
E
R
R
D
D
0
0
0
0
0
0
0
0
W
S
7
6
5
4
3
2
1
0
1
1
1
1
1
1
1
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
LCD1602
L
C
BG
GND
BG
VCC
D
D
D
D
D
D
D
D
E
R
}
(3)写数据 •
• • • • • • • • 输入:RS=H;RW=L; D0~D7=数据;E=高脉冲 输出:无 void Write_LCD_Data(uchar dat) { while((Busy_Check()&0x80)==0x80); //busy! wait! RS=1;RW=0; E=0; P0=dat; E=1; Delay_Ms(1); E=0; }
R
V
V
G
D
B
B
B
B
B
B
B
B
W
S
O
C
N
1
7
6
5
4
3
2
1
0
C
D
LCD
1602
2、 LCD 1602 状态字说明
注意:每次对控制器读写操作之前,都要 进行读写检测(忙闲),确保STA7==0
3、基本操作时序
(1)读状态 输入:RS=L;RW=H;E=H 输出:D0~D7=状态字 (2)写指令: 输入:RS=L;RW=L; D0~D7=指令码;E=高脉冲 输出:无 (3)读数据 输入:RS=H;RW=H;E=H 输出:D0~D7=数据 (4)写数据 输入:RS=H;RW=L; D0~D7=数据;E=高脉冲 输出:无