内容正文:
项目4 电子时钟控制系统
任务4.1 键码显示器
明确任务
在工业生产和日常生活中,经常会用到按键对单片机系统进行相应的控制与管理,同时还有按键提示音。按键已经作为最基本的输入装置在单片机应用系统中广泛使用。那按键怎么才能被系统正确的识别,信息是怎么被确认的?按键声音又是怎么发出的?。
工作任务:设计完成一个键码显示器系统,按下一个按键数码管显示其对应的编号,同时系统发出滴的一声。
一、按键输入技术
知识链接
独立式按键结构是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其他I/O口线的状态。
1.独立式按键
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一个I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。多用于设置控制键、功能键。适用于键数少的场合。
按键输入采用低电平有效,上拉电阻保证了按键断开时I/O口线有确定的高电平。当I/O口线内部有上拉电阻,外电路可不接上拉电阻。
2 矩阵键盘
行列扫描法:
列线输出,行线输入;
列线逐列输出0,某行有按键;行线输入就为0;
若无按,行线输入全部为1。
键码=行号+列号
抖动时间一般为5~10ms
3 按键抖动
硬件消除抖动:在硬件上可采用在键输出端加R-S触发器(双稳态触发器)或单稳态触发器构成去抖动电路
软件去抖动:采用软件去抖动的方法是在单片机检测到有键按下时执行一个10~20ms的延时程序后再次检查该键电平是否仍保持闭合状态.如保持闭合状态,则确认为有键按下,否则从头检测。这样就能消除键的抖动影响。
二 蜂鸣器原理及应用技术
压电式蜂鸣器:接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声
电磁式蜂鸣器:接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
由于蜂鸣器的工作电流一般比较大,单片机的I/O 口无法直接驱动,所以要利用放大电路来驱动,一般都包含:一个三极管、一个蜂鸣器、一个续流二极管和一个电源滤波电容。
1.独立按键位定义
对于独立按键一般采取位定义的形式进行声明,特别是按键具有一定功能含义时。
二、编程技巧
sbit key1=P2^0; //定义按键管脚
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
if(key1= =0) { ----- }
如果独立式按键为单一含义功能时,即对系统信息数据等的改变仅一次有效时,一般采用直接读取电平的方式进行判定。
void Beep( ) //蜂鸣器子函数
{
unsigned char i;
BEEP=0; //开
for(i=0;i<100;i++);
BEEP = 1; //关
}
2.蜂鸣器发声控制
单片机系统执行速度很快,所以低电平有效使得蜂鸣器工作,应该进行适当延时。
temp=0x7F; // 准备列扫描
for(i=0;i<4;i++)
{
P2=temp; //输出列扫描码
if((P2&0x0F)!=0x0F) // 此列有键按下
{
Key_Value=(P2&0x0F)|(temp&0xF0);
//键码=行码+列码
Beep(); // 声音
return Key_Value; // 返回键码
}
temp>>=1; //准备下列扫描
temp+=0x80;
}
3.矩阵键盘的扫描
行列扫描法能够很好的诠释矩阵键盘的工作原理,这里采用逐列扫描法。
三、硬件电路图
四、软件设计与编程
(1)利用6个独立按键进行键码显示1-6,当有键按下时,同时蜂鸣器发出滴的声响。
if(key1= =0) {key=1; Beep( );} //判断按键是否按下
if(key2= =0) {key=2; Beep( );}
if(key3= =0) {key=3; Beep( );}
if(key4= =0) {key=4; Beep( );}
if(key5= =0) {key=5; Beep( );}
if(key6= =0) {key=6; Beep( );}
P1=SMG[key]; //键码显示
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
(2)显示4*4矩阵键盘的键码值。键码值用十六进制表示,0-9,A-F。掌握矩阵键盘扫描方法处理技巧。
key=keyscan(); //调用键盘扫描,
switch(key)
{
case 0x7E:P1=SMG[0]; break;//0 按下相应的键显示相对应的码值
case 0x7D:P1=SMG[1]; break;//1
-------
-------
case 0xE7:P1=SMG[15];break;//f
}
unsigned char keyscan(void) //键盘扫描函数
{unsigned char i,temp,Key_Value=0;
P2=0x0F; //列线输出全为0
if((P2&0x0F)!=0x0F) //是否有按键按下
{ delay(10); //延时10ms去抖
if((P2&0x0F)!=0x0F) //确认按键是否按下
{
temp=0x7F; // 准备列扫描
for(i=0;i<4;i++)
{
P2=temp; //输出列扫描码
if((P2&0x0F)!=0x0F) // 此列有键按下
{
Key_Value=(P2&0x0F)|(temp&0xF0); //键码=行码+列码
Beep(); // 声音
return Key_Value; // 返回键码
}
temp>>=1; // 准备下列扫描
temp+=0x80;
}
}
}
return Key_Value; //返回键码
}
任务实施
1.学生分组,制定方案。
2.查阅资料,设计电路原理图,列出元件清单。
3.准备元件及工具,搭接电路。
4.注意安全。
评价总结
1.学生根据自己实施情况填写任务实施评价单。
2.组间互评,提出问题,解决问题。
3.回收元件及工具,清洁实施现场,6S标准。
4.知识整理总结。
$$