找回密码
 注册
关于网站域名变更的通知
查看: 92|回复: 2
打印 上一主题 下一主题

单片机讲义14:复习综合实验一&&IO扩展

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-9 10:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
第14讲 复习综合实验一&&IO扩展
知识点:
1、 综合实验一的一种编程思路
2、 IO扩展之输入扩展
3、 基于74HC165按键扩展实验
4、 学会根据器件真值表和时序图编写器件驱动程序

" X* B  p% c  q- w2 O' o
一、综合实验一的一种编程思路
1、 首先这个实验的目的主要是训练大家,对矩阵式按键与数码管动态显示的掌 握程度,要求必须用矩阵式按键和 8 位数码管,我们现在开始分析程序设计思路。
2、 首先要明确实验的要求:实验要求我们从矩阵式按键中任选两支键作为加 1 和减 1 输入按键,最大加到 100。所以,我们要在内存中开辟一个 char型变 量,定义为 char num,此变量就是我们通过按键可以修改的。
3、 我前几次课讲过按键的有效方式,这里,我们选一个最简单的有效方式――抬起有效。言外之意,就是当我们按下按键并松开的时候,num 值才会改变。通过矩阵式按键的扫描,我们获得了 0—15 个键值。这些键值是我们按下按 键的时候获得的,不是松开的时候获得的,而我们想松开的时候让按键有效, 所以我们应该在程序中加一个等待按键释放的程序 while(!GPIO_KEY !=0xf0);一定要注意这条语句的位置。
4、 一旦全局变量 KeyValue 获得了键值,它是不会自行清除的,这就造成了触 发一次动作很多次,为了解决这个问题,我们把按键不动作或消抖不通过的键值设置为 0-15之外的数,这里设置为 0XFF,也就是当无按键动作时
KeyValue = OXFF。
5、 关于 num 值如何在数码管上显示,这里运用了除和取余法,目的是获得百位、 十位、个位的十进制数。
百位:bai = num /100; 十位:shi = num%100/10; 个位:ge =  num%100%10;
然后把要显示的百位、十位、个位送到相应的数码管上,程序如下:
if(i == 0)
{
P0 = smgduan[bai];
}
else if(i == 1)
{
P0 = smgduan[shi];
}
else if(i == 2)
{
P0 = smgduan[ge];
}

4 K0 F% @0 l) [: e7 h
通过以上的计算,我们就可以在数码管编码数组中找到对应的显示编码。 至此,程序设计完成!

6 A' ]* g) L" ~: R  B' H- p; e
二、IO 扩展之输入扩展:
这里所讨论的 IO 输入扩展,意思是如何通过单片机一位 IO 端口去读取外部输入的一个字节的数据(8 位)。下面我们介绍一下器件 74HC165。

' O. R1 s0 V% G6 N. ~
三、74HC165 用法:

" L" P" i' ]/ p8 a3 T4 e. y* d

2 a! h% M; g( ?+ D5 W- D
引脚介绍
: d: N* T& ^9 i2 c- h9 T
SH//LD:移位控制/置入控制(低电平有效),移位:使能移位输出;置入:把数据放入移位寄存器中
CLK,CLK_INH:时钟输入端 SER:串行数据输入端QH:输出端
/QH:互补输出端
A- H:并行数据输入端 其实看一个芯片如何使用的,不只是看引脚功能,更重要的是要看时序图和真值表。
- Q  p' C4 ]5 m3 O! r; u; q6 [
真值表:

/ g+ V8 Y; a' }% Q, ^* J
时序图:
( [. @# Z6 ]. O4 z# P) o" x/ ~9 e
这个时序图包含两大部分内容:装载数据(LOAD)和串行移位(SERIALSHIFT),其中 LOAD 时,必须 inhibit(时钟禁止),CLOCK _INHIBIT =1;
首先分析如何 LOAD,所谓 LOAD 就是把通过此器件获得的 8 位数据,加载到此器件的内部移 位寄存器里。比如外接的是 8 个按键,平时没按下按键时是高电平,这时,加载到器件内部 移位寄存器里的是 0XFF,当其中某一个键被按下时,对应的 8 位编码数据就被加载内部移位 寄存器里。通过时序图和真值表,我们不难发现,LOAD 时,SHIFT//LOAD 必须保持低电平。 所以加载数据时,我们可以这样编码:
SHIFT//LOAD= 0;
_NOP_();   //保持一段时间的低电平

" q. x! Y0 X& p  S, z8 w1 W! e
4 r  _8 N, w. f% `
随后,在 CLOCK_HAIBIT 保持低电平,SHIFT//LOAD 保高电平,开如一段 8 位串行数据的移 位输出,时钟上升沿状态下开始移位输出。以下是上升沿的写法,一定要记住!

* \: \+ E' s9 c2 T7 i3 ?/ s; o
CLOCK = 0;
_NOP_();
indata |= indata; CLOCK = 1;
) M1 {% [( y; G0 s$ G
四、基于 74HC165 按键扩展实验: 实验现象:下载程序后,按下独立按键可以点亮对应 LED 灯。注意事项:必须将 74HC165模块的JP165 短接片短接,否则不会出现象。

# {1 \' X* q9 A% i; W
五、时序与真值表时序,就是按照一定的时间顺序给出信号。按照这个时间顺序,你就能得到你想要的数据或者把你要写的数据写进芯片。
真值表:输入与输出物理电平关系
六、学会根据器件真值表和时序图编写器件驱动程序

& O( ]  s4 F( ^& M  g! R. ]: K

该用户从未签到

2#
发表于 2022-6-9 10:28 | 只看该作者
哦哈哈哈,学习学习

该用户从未签到

3#
发表于 2022-6-9 13:17 | 只看该作者
哈哈,学习学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-12 06:21 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表