AVR键盘设计.docx

上传人:b****6 文档编号:6283189 上传时间:2023-01-05 格式:DOCX 页数:13 大小:249.06KB
下载 相关 举报
AVR键盘设计.docx_第1页
第1页 / 共13页
AVR键盘设计.docx_第2页
第2页 / 共13页
AVR键盘设计.docx_第3页
第3页 / 共13页
AVR键盘设计.docx_第4页
第4页 / 共13页
AVR键盘设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

AVR键盘设计.docx

《AVR键盘设计.docx》由会员分享,可在线阅读,更多相关《AVR键盘设计.docx(13页珍藏版)》请在冰豆网上搜索。

AVR键盘设计.docx

AVR键盘设计

基于AVR单片机的键盘设计

一、设计任务:

实现按键对外部器件的控制

二、设计要求:

1、实现单片机对两位数码管的控制

2、实现按键对数码管的自加功能(自动加1,加2,加3)

3、实现按键中断数码管工作的功能

3、所需原件:

原件名称

数量

9cm*15cm的实验电路板

1

电源插座

1

470uF电容

2

104pF电容

2

L7805稳压器

1

8M石英晶体

1

22pF电容

2

ATmega16单片机

1

SPI程序下载端口

1

LED发光二极管

2

按键

4

拨动式开关

1

120Ω电阻

1

5.1kΩ电阻

1

共阴型数码管

2

集成电路插座40脚

1

数据下载线

1

排针、跳线

若干

4、设计步骤

硬件设计

设计要点

1、但键盘中按键数量较多时,为了减少对I/O口的占用,通常用将按键排列成矩阵形式。

2、如其原理图所示,首先由一个I/O口来控制其列电平,与此同时对各行对应的I/O口依次进行检测,当符合检测条件时,即确定该按键按下,而后进行对应的软件操作。

3、如图,5V电源经过5.1kΩ和120Ω的电阻接到PD0口,设置PD0口为列电平;在5.1kΩ和120Ω的电阻之间分别将四个按键的一端连接起来,另一端则分别于PD1、PD2、PD3、PD4相连。

电路图

行扫描法也称为逐行扫描法,其按键识别过程如下:

①:

首先将行线PD1~PD4设置为低电平输出,然后读PD0中有无低电平出现,如果有低电平出现,则说明有按键按下;如果读到的是高电平,则表示无按键按下。

②:

在确定有按键按下后,则要确定具体是哪个按键,其思路是依次将行设置为低电平,并检测列线的输入,进而确认具体的按键位置。

当PD2输出低电平时(PD1=1、PD2=0、PD3=1、PD4=1),测得PD0为低电平(PD0=0),则可以确认是S5按下。

PCB图(未铺地)

PCB图(已铺地)

实物图

软件设计

功能:

设计简单的程序,使得按键操作可以控制数码管的递加数字,并可以控

制数码管再任何时候停止递加。

程序说明:

1、首先要对数码管动态扫描子程序进行编程;

2、对各个按键的状态进行扫描,确定被按下的按键;

3、对工作停止按键的程序进行编程,使其能够使数码管停止工作,

而且再次工作时,数码管数字从零开始计数。

程序内容:

/*****************************************************

Thisprogramwasproducedbythe

CodeWizardAVRV1.25.7aEvaluation

AutomaticProgramGenerator

?

Copyright1998-2007PavelHaiduc,HPInfoTechs.r.l.

Project:

Version:

Date:

2011-11-8

Author:

Freeware,forevaluationandnon-commercialuseonly

Company:

Comments:

Chiptype:

ATmega16

Programtype:

Application

Clockfrequency:

4.000000MHz

Memorymodel:

Small

ExternalSRAMsize:

0

DataStacksize:

256

*****************************************************/

#include

#include

#defineKey_mask0b00000001

flashunsignedcharled_7[10]=

{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

flashunsignedcharposition[2]={0xFD,0xFE};

unsignedchardis_buff[2];

unsignedcharposit,digital=0,key_value,key_line;

voiddisplay(void)//数码管动态扫描显示子程序

{

unsignedchari;

for(i=0;i<100;i++)

{

PORTC=0xFF;

PORTA=led_7[dis_buff[posit]];

PORTC=position[posit];

if(++posit>=2)posit=0;

delay_ms(10);

}

}

voiddigital_to_disbuff(void)//将数据送至缓存区子程序

{

unsignedchari=0;

dis_buff[i++]=digital%10;

dis_buff[i]=digital/10;

}

voidmain(void)

{

unsignedcharkey_temp;

unsignedinti;

PORTA=0x00;

DDRA=0xFF;

PORTC=0x03;

DDRC=0x03;

PORTD=0x1F;

DDRD=0x1E;

for(i=0;i<2;i++)

{

dis_buff[i]=0;

}

while

(1)

{

key_line=0b00000010;

for(i=1;i<4;i++)

{

PORTD=~key_line;

PORTD=~key_line;

key_value=Key_mask&PIND;

if(key_value==Key_mask)//判定是否有按键按下

key_line<<=1;

else

{

if(key_line==0b00000010)//如果是第一个按键按下

{

while

(1)

{

digital_to_disbuff();

display();

if(++digital>=100)digital=0;

key_line=0b00010000;

PORTD=~key_line;

PORTD=~key_line;

key_temp=Key_mask&PIND;

if(key_temp!

=Key_mask)//检测复位键是否按下

{

digital=0;

PORTA=0x00;

break;

}

}

}

if(key_line==0b00000100)//如果是第二个键按下

{

while

(1)

{

digital_to_disbuff();

display();

++digital;

if(++digital>=100)digital=0;

key_line=0b00010000;

PORTD=~key_line;

PORTD=~key_line;

key_temp=Key_mask&PIND;

if(key_temp!

=Key_mask)//检测复位键是否按下

{

digital=0;

PORTA=0x00;

break;

}

}

}

if(key_line==0b00001000)//如果是第三个键按下

{

while

(1)

{

digital_to_disbuff();

display();

digital+=2;

if(++digital>=100)digital=0;

key_line=0b00010000;

PORTD=~key_line;

PORTD=~key_line;

key_temp=Key_mask&PIND;

if(key_temp!

=Key_mask)//检测复位键是否按下

{

digital=0;

PORTA=0x00;

break;

}

}

}

}

}

}

}

五、键盘操作的测试结果

当按下第一个键时,数码管自动加1至99,而后自动返回零继续自加;当按下第二个键时,数码管自动加2至98,而后自动返回零继续自加;当按下第三个键是,数码管自动加3至99,而后自动返回零继续自加;当按下复位键是,在自加中的数码管自动熄灭,再次操作1、2、3键时,数码管从零自加。

数码管自加状态

右面的小面板上有四个按键,其中三个分别控制数码管自动加1、加2、加3,另外一个按键对数码管进行复位操作。

复位数码管

当按下去复位键时,数码管停止工作。

六、总结

通过本次作业,最大的收获是掌握了扫描键盘的工作原理,以及两位数码管的工作原理和他们电路焊接,并锻炼了自己独立编程能力,不足之处是自己看的程序太少,许多东西还是要受别人所编程序的启发才能编写出来。

另外,在作业中的程序编写上,首先使用中断来进行对数码管的控制的,但缺点是不能进行复位操作,只能关闭电源,重新启动单片机才能使得其他按键起作用,后来借鉴书本上的编程思想,编写出用扫描的方式控制各个P口,从而实现各个按键对各P口电位的控制,实现了扫描式键盘的功能,工作稳定可靠,并可以在不断电的情况下实现程序的中断和再次运行。

7、参考文献

[1]马潮.AVR单片机嵌入式系统原理与应用实践[M].北京:

北京航空航天大学出

版社,2009.

[2]Protel相关视频资料

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1