中职《单片机技术及应用-基于Proteus仿真的C语言程序设计》(电工版·2018)第七模块 单片机综合项目实训 同步课件(共18张ppt)

资源下载
  1. 二一教育资源

中职《单片机技术及应用-基于Proteus仿真的C语言程序设计》(电工版·2018)第七模块 单片机综合项目实训 同步课件(共18张ppt)

资源简介

(共18张PPT)
第七模块 单片机综合应用项目实训
项目15 数码电子钟设计
项目16 简易电子琴设计
项目15 数码电子钟设计
任务7-15 设计独立式键盘调时的数码电子钟
任务7-15 设计独立式键盘调时的数码电子钟
一、独立键盘扫描程序
对于应用多个独立按键进行控制的单片机程序,为了便于集中控制,常常将多个独立按键看作一个整体性的由独立按键构成的独立键盘,通常独立键盘中的独立按键数是四个。如图所示为一种常用的独立键盘扫描接口电路。
CPU按程序编写的指令顺序执行程序,通常情况下执行到键盘扫描子程序时,才开始键盘扫描。也就是说,只有在CPU空闲时才能去扫描键盘。这常常导致因为按键时CPU忙而按键无效。为了克服这一缺陷,提高按键的灵敏度与有效性,就必须在足够短的时间里对键盘进行定期重复扫描。通常的做法是将键盘扫描子程序放置在定时器中断服务程序中,搭载定时器中断服务程序运行键盘扫描子程序,以保证很好地实现按键控制功能。
任务7-15 设计独立式键盘调时的数码电子钟
一、独立键盘扫描程序
是否有键按下的判断方法如下:
先将4个独立按键的接口P1口的高4位(P1.4~P1.7)均置高电平“1”(P1=0xf0)。此时如果有某一按键按下,则按键连接的相应位会被强制出“0”。然后再读取这4位的电平,就会有一位不为“1”,P1口的状态将不再为“0xf0”,说明有键按下。用C语言的编程语句可表示如下:
P1=0xf0;
// P1=1111 0000B,P1.4~P1.7均置高电平1
if((P1&0xf0)!= 0xf0);
//条件判断 :P1跟0xf0(1111 0000B)按位“与”运算后的结果是否为0xf0
任务7-15 设计独立式键盘调时的数码电子钟
一、独立键盘扫描程序
上述条件语句中的表达式,在无键按下时为“假”,不需进行键盘扫描,结束本次键盘扫描子程序的运行;上述条件语句中的表达式,在有键按下时为“真”,需要继续进行键盘扫描检测,确认到底是哪一个按键被按下。
上述条件语句中的表达式为“真”时,说明有键被按下,在继续进行键盘扫描检测前,为防止按键抖动的干扰,需要接着进行软件消抖。
软件消抖之后就要进行按键(键值)的确认。按键确认可采用逐位扫描的方法。
任务7-15 设计独立式键盘调时的数码电子钟
一、独立键盘扫描程序
综上所述,独立键盘扫描程序可用如下结构表达:
/******************************************************************
键盘扫描函数
********************************************************************/
void key_scan(void)
{
P1=0xf0; // P1=1111 0000B,P1.4~P1.7均置高电平1
if((P1&0xf0)!= 0xf0); //条件判断 :P1跟0xf0(1111 0000B)按位“与”运算后的结果是否为0xf0
{
delay (); //软件消抖,延时后再检测
if((P1&0xf0)!=0xf0) //确认有键按下,以下进行键盘扫描
{
if(SA==0) //如果是SA键按下
keyval=1; //设置按键值(也可以是直接的控制语句)
if(SB==0) //如果是SB键按下
keyval=2; //设置按键值(也可以是直接的控制语句) if(SC==0) //如果是SC键按下
keyval=3; //设置按键值(也可以是直接的控制语句) if(SD==0) //如果是SD键按下
keyval=4; //设置按键值(也可以是直接的控制语句)
}
}
}
二、硬件电路设计
三、软件程序设计
任务7-15 设计独立式键盘调时的数码电子钟
项目16 简易电子琴设计
任务7-16 设计简易电子琴
任务7-16 设计简易电子琴
一、矩阵键盘工作原理
1. 接口电路
在键盘应用中按键的数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。如图所示为矩阵键盘接口电路。
任务7-16 设计简易电子琴
一、矩阵键盘工作原理
对于图中由16个按键组成的矩阵键盘,采用4×4矩阵方式连接。在4根行线和4根列线的交叉点处设置16个键位。4根行线接P1口的低4位I/O口线,4根列线接P1口的高4位I/O口线,共需8根I/O口线。这种接法只用了一个I/O口的8根I/O口线,就能控制16个按键,其I/O口的利用效率是独立按键键盘的两倍,有效节省了I/O口资源。
任务7-16 设计简易电子琴
二、电子琴设计说明
电子琴设计的关键是让每个按键对应于发出一个特定的音调。因此,首先要给4×4矩阵键盘上的16个按键分配要发出的音符。
1.音符在矩阵键盘上的排列分布设计
在后面的示例程序中,音符的在矩阵键盘上的排列分布如图所示。
2.键盘编码
为了让单片机认识每一个按键,需要对S1~S16这16个按键进行编码,给每一个按键分配一个按键值。这样在键盘扫描程序扫描到有按键被按下时,单片机能够根据按键值控制蜂鸣器发出事先规定的音调。为简便起见,将S1~S16这16个按键的按键值依次规定为1~16。
3.音符的音调频率与节拍
4.键盘扫描控制
键盘扫描控制由4×4矩阵键盘扫描程序实现。矩阵键盘扫描程序的反复运行由定时器T1的中断控制。
5.音频播放控制
音频播放由音频输出函数控制定时器T0实现,音频方波由定时器T0的中断控制产生。
任务7-16 设计简易电子琴
一、矩阵键盘工作原理
2.工作原理
使用矩阵键盘的关键在于如何判断键值。根据矩阵键盘接口电路分析,如果已知P1.0引脚置为低电平“0”,那么当S1键被按下时,可以肯定P1.4引脚的信号必定变成低电平“0”。反之,如果预先将P1.0引脚置为低电平“0”,将P1.1引脚、P1.2引脚、P1.3引脚置为高电平“1”,而单片机扫描到P1.4引脚为低电平“0”,则可以肯定S1键被按下。
任务7-16 设计简易电子琴
一、矩阵键盘工作原理
单片机识别按键的基本过程如下:
(1)首先判断是否有键被按下
将全部行线(P1.0引脚、P1.1引脚、P1.2引脚、P1.3引脚)均置低电平“0”,将
全部列线(P1.4引脚、P1.5引脚、P1.6引脚、P1.7引脚)均置高电平“1”,然后检
测列线状态。
(2)其次做按键消抖处理
(3)最后做按键识别
当确认键盘中有键被按下时,转入逐行扫描的方法来确定到底是哪一个键被按下。
任务7-16 设计简易电子琴
二、电子琴设计说明
电子琴设计的关键是让每个按键对应于发出一个特定的音调。因此,首先要给4×4矩阵键
盘上的16个按键分配要发出的音符。
1.音符在矩阵键盘上的排列分布设计
在后面的示例程序中,音符的在矩阵键盘上的排列分布如图所示。
2.键盘编码
为了让单片机认识每一个按键,需要对S1~S16这16个按键
进行编码,给每一个按键分配一个按键值。这样在键盘扫描
程序扫描到有按键被按下时,单片机能够根据按键值控制蜂
鸣器发出事先规定的音调。为简便起见,将S1~S16这16个
按键的按键值依次规定为1~16。
任务7-16 设计简易电子琴
二、电子琴设计说明
3.音符的音调频率与节拍
4.键盘扫描控制
键盘扫描控制由4×4矩阵键盘扫描程序实现。矩阵键盘扫描
程序的反复运行由定时器T1的中断控制。
5.音频播放控制
音频播放由音频输出函数控制定时器T0实现,音频方波由定
时器T0的中断控制产生。
三、硬件电路设计
四、软件程序设计
任务7-16 设计简易电子琴

展开更多......

收起↑

资源预览