单片机键盘输入课程设计.docx

上传人:b****5 文档编号:2781148 上传时间:2022-11-15 格式:DOCX 页数:14 大小:109.91KB
下载 相关 举报
单片机键盘输入课程设计.docx_第1页
第1页 / 共14页
单片机键盘输入课程设计.docx_第2页
第2页 / 共14页
单片机键盘输入课程设计.docx_第3页
第3页 / 共14页
单片机键盘输入课程设计.docx_第4页
第4页 / 共14页
单片机键盘输入课程设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机键盘输入课程设计.docx

《单片机键盘输入课程设计.docx》由会员分享,可在线阅读,更多相关《单片机键盘输入课程设计.docx(14页珍藏版)》请在冰豆网上搜索。

单片机键盘输入课程设计.docx

单片机键盘输入课程设计

目 录

第1章课程设计任务书................................2

第2章设计目的......................................2

第3章设计原理与分析................................2

第4章所选元件清单..................................6

第5章课程设计心得..................................7

第6章参考文献......................................7

附录.................................................8

第一章、课程设计任务书

本设计以MCS-51系列单片机为核心,采用常用电子器件设计。

要求能显示出秒、分、时、天,可调整各个时间,采用LED八段数码管显示。

第二章、课程设计目的

1、掌握51系列单片机编程原理

(1)掌握单片机C51语言程序编程的思想及方法,加深对单片机的更深层次的理解,熟悉单片机的内部硬件资源。

(2)定时器中断服务子程序和外中断服务子程序各个程序段所实现的功能和编写。

(3)通过此次课程设计,学会怎么利用所学单片机知识独立设计系统,达到学于致用的目的,加深了解C51设计编程思想及开发系统的一般过程,并不断创新。

2、掌握矩阵式键盘电路的接法及工作原理

(1)掌握矩阵式键盘的接法及工作原理。

(2)掌握键盘消抖的工作原理。

3、掌握矩阵式键盘电路的接法及工作原理

(1)掌握矩阵式键盘键盘扫描程序的编写。

(2)掌握键盘消抖程序的编写。

4、掌握共阳八段码显示器连接,做成可调节的电子表,简单的了解单片机对显示器的控制过程;能在此基础上做成可调节的万年历。

第三章、设计原理与分析

1、实验硬件电路的原理与设计

A.

键盘扫描识别

1、识别键的闭合,通常采用行扫描法和行反转法。

行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如所读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。

行反转法识别键闭合时,要将行线接一并行口,先让它工作于输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。

然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么,在闭合键所在的行线上的值必定为0。

这样,当一个键被按下时,必定可以读得一对唯一的行线值和列线值。

2、程序设计时,要学会灵活地对STC89C52的各端口进行方式设置。

可将各键对应的键值(行线值、列线值)放在一个表中,将要显示的0~F字符放在另一个表中,通过查表来确定按下的是哪一个键并正确显示出来。

3、利用实验箱上的STC89C52可编程并行接口芯片和矩阵键盘,编写程序,做到在键盘上每按一个数字键(0~F),用发光二极管将该代码显示出来。

B.

显示器的显示原理:

数码管需要驱动电路来驱动数码管的各个段码才能显示我们需要的数字。

根据数码管的驱动方式不同,可以分为静态驱动和动态驱动两种方式。

①静态显示驱动:

静态驱动也称直流驱动。

是指每个数码管的第一个段码都是由同一个单片机的I/O端口进行驱动,或者使用如BCD码二─十进制译码器译码进行驱动。

②动态显示驱动:

动态驱动是数码管是单片机中应用最为广泛的一种驱动方式。

动态驱动是将所有数码管的八个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,各选通由各自独立的I/O线控制,当单片机输出这形码时,所有数码管都接收到相同的字形码,哪个数码管会显示字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示的过程中,每位数码管的点亮时间为1~2ms。

动态显示的效果和静态显示是一样的,但能节省大量的I/O端口,而且功耗更低。

由于静态显示需要数据锁存器等硬件,接口复杂一些,考虑时钟显示只有八位,且系统没有其它复杂的处理任务,所以决定采用动态扫描实现LED的显示。

单片机采用易购的STC89C52系列,这种单片机具有足够的空余硬件资源,可以实现其他的扩展功能。

时钟计时器电路系统的总体设计框图如图1。

 

 

图1

2、实验步骤:

时钟计时器的硬件电路如图2所示。

该电路采用51单片机最小系统,采用共阳八段数码管LED显示器,P0口输出段码数据,P2.0~P2.5口作列扫描输出;P1口接矩阵键盘,实现时间的调整。

系统的功能由键盘上1、2、3键完成。

如图2

3、系统程序的设计

(1)主程序

本设计中计时采用定时器T0中断完成。

主程序循环调用显示子程序和查键子程序,当端口有开关按下时,转入相应功能程序。

其主程序流程如图3。

(2)显示子程序

时间显示子程序每次显示8个连续内存单元的十进制BCD码数据,首地址在调用显示程序时先指定。

显示时,先取出内存地址中的数据,然后查得对应的显示用段码从P0口输出,P2口将对应数码管选中供电,就能显示该地址单元的数据值。

(3)定时器T0中断服务程序

定时器T0用于时间计时。

定时溢出中断周期设为50ms,中断进入后先进行定时中断初值校正,当中断累计20次(即50ms×20=1s)时,对秒计数单元进行加1操作。

在计数单元中,采用十进制BCD码计数,满10进位。

T0中断计时程序流程图如图4所示。

 

图3

图2

(4)调时功能程序

调时功能程序的设计方法是:

按下1键,可以选择要修改的位,按下按2键和3键键,对选中的位进行加减操作,修改完成之后,再按下XW键对其它位进行修改。

具体如下:

第一次按下1键时,可以修改秒。

第二次按下1键时,可以修改分。

第三次按下1键时,可以修改时。

第四次按下1键时,退出子程序。

第四章、所选元件清单

1、元件清单

原件

数量

八段共阳数码管

2

S8550三极管

8

1K电阻

8

150Ω电阻

8

51最小系统

1

线

若干

2、程序实际接线

数码管的不同笔段的组合构成了不同字符的字形。

为了获得不同的字形,各笔段所加的电平也不同,因此各个字形所形成的编码是不一样的。

例如,对于共阳极数码管,如果要显示字符2,则笔段a、b、g、e、d发光,对应的引脚为低电平;其余各笔段不发光,对应的引脚为该电平。

所以字符2的字形编码gfedcba=10100100B=A4H。

阴极数码管的字形编码与用阳极数码管的字形编码是逻辑“非”的关系。

根据上述编码方法可以得出数码管显示的字符与对应的字形编码的关系,如下表所示

此次实验用的共阳数码管,所以按照阳极数码管的字形编码进行设计。

第五章、课程设计心得

这次课程设计根据课题要求,复习了这学期所学的单片机内容,通过查询相关的资料,简要的了解一下。

虽然老师上课讲过,但并非听懂了所有有关知识。

根据课程设计的要求和自己通过参考有关资料拟的方案,写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序,达到能够实现所要求的功能的目的。

这次的单片机课程设计重点是理论与实际的相结合,不单单只是书上的一条条分离的指令。

通过这次设计让我更系统的了解了各个指令以及单片机的扩展内容,。

学习任何知识,仅从理论上去求知,而不去实践、探索是不够的,所以在学期末单片机课程设计是很及时、很必要的。

这样不仅能加深我们对单片机的更深理解,而且还及时、真正的做到了学以致用。

刚开始进行课程设计的时候,我表现出了极大的热情。

上网查资料、询问高年级同学的经验,我时刻猜测着我会从中获得什么,这是一个难得的锻炼机会。

通过实践,我领悟到了很多以前不知道的东西,可以说是受益匪浅。

虽然时间不是很长,但是还是有不少长进,这不仅是局限在程序设计的功能实现上,更多的是对程序设计的技巧的追求上

第六章 参考文献

[1]楼然苗,李光飞编著.单片机课程设计指导.北京航空航天大学出版社

[2]田立,田清,代方震编著.51单片机C语言程序设计快速入门.人民邮电出版社

[3]翻红岗,魏学海,任思璟.51单片机自学笔记.北京航空航天大学出版社

附录:

程序

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharmiao,fen,shi,m,f,s,num,num1,num2;

ucharcodetable1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidxiansi(ucharaa,ucharbb,ucharcc)

{

P2=0xdb;

P0=0xbf;

delay

(1);

P0=0xff;//num2++;

if(num1==1&num2==0|num1==1&num2==1)

{

P2=0xff;

P0=table1[aa%10];

delay

(1);

P0=0xff;

P2=0xff;

P0=table1[aa/10];

delay

(1);

P0=0xff;

}

else

{

P2=0x7f;

P0=table1[aa%10];

delay

(1);

P0=0xff;

P2=0xbf;

P0=table1[aa/10];

delay

(1);

P0=0xff;

}

if(num1==2&num2==0|num1==2&num2==1)

{

P2=0xff;

P0=table1[bb/10];

delay

(1);

P0=0xff;

P2=0xff;

P0=table1[bb%10];

delay

(1);

P0=0xff;

}

else

{

P2=0xf7;

P0=table1[bb/10];

delay

(1);

P0=0xff;

P2=0xef;

P0=table1[bb%10];

delay

(1);

P0=0xff;

}

if(num1==3&num2==0|num1==3&num2==1)

{

P2=0xff;

P0=table1[cc/10];

delay

(1);

P0=0xff;

P2=0xff;

P0=table1[cc%10];

delay

(1);

P0=0xff;

}

else

{P2=0xfe;

P0=table1[cc/10];

delay

(1);

P0=0xff;

P2=0xfd;

P0=table1[cc%10];

delay

(1);

P0=0xff;

}

//if(num2==256)num2=1;

}

voidjishi()

{

if(num==20)

{

num=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

if(fen==60)

{

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

当前位置:首页 > 工程科技 > 能源化工

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

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