ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:109.91KB ,
资源ID:2781148      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2781148.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机键盘输入课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、单片机键盘输入课程设计 目录第1章 课程设计任务书.2第2章 设计目的.2第3章 设计原理与分析.2第4章 所选元件清单.6第5章 课程设计心得.7第6章 参考文献.7附录.8 第一章、课程设计任务书本设计以MCS-51系列单片机为核心,采用常用电子器件设计。要求能显示出秒、分、时、天,可调整各个时间,采用LED八段数码管显示。 第二章、课程设计目的1、掌握51系列单片机编程原理(1)掌握单片机C51语言程序编程的思想及方法,加深对单片机的更深层次的理解,熟悉单片机的内部硬件资源。(2)定时器中断服务子程序和外中断服务子程序各个程序段所实现的功能和编写。(3)通过此次课程设计,学会怎么利用所学

2、单片机知识独立设计系统,达到学于致用的目的,加深了解C51设计编程思想及开发系统的一般过程,并不断创新。2、掌握矩阵式键盘电路的接法及工作原理(1)掌握矩阵式键盘的接法及工作原理。(2)掌握键盘消抖的工作原理。3、掌握矩阵式键盘电路的接法及工作原理(1)掌握矩阵式键盘键盘扫描程序的编写。(2)掌握键盘消抖程序的编写。4、掌握共阳八段码显示器连接,做成可调节的电子表,简单的了解单片机对显示器的控制过程;能在此基础上做成可调节的万年历。 第三章、设计原理与分析1、实验硬件电路的原理与设计A.键盘扫描识别1、识别键的闭合,通常采用行扫描法和行反转法。行扫描法是使键盘上某一行线为低电平,而其余行接高电

3、平,然后读取列值,如所读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。行反转法识别键闭合时,要将行线接一并行口,先让它工作于输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么,在闭合键所在的行线上的值必定为0。这样,当一个键被按下时,必定可以读得一对唯一的行线值和列线值。2、程序设计时,要学会灵活地对STC89

4、C52的各端口进行方式设置。可将各键对应的键值(行线值、列线值)放在一个表中,将要显示的0F字符放在另一个表中,通过查表来确定按下的是哪一个键并正确显示出来。3、利用实验箱上的STC89C52可编程并行接口芯片和矩阵键盘,编写程序,做到在键盘上每按一个数字键(0F),用发光二极管将该代码显示出来。B.显示器的显示原理:数码管需要驱动电路来驱动数码管的各个段码才能显示我们需要的数字。根据数码管的驱动方式不同,可以分为静态驱动和动态驱动两种方式。静态显示驱动:静态驱动也称直流驱动。是指每个数码管的第一个段码都是由同一个单片机的I/O端口进行驱动,或者使用如BCD码二十进制译码器译码进行驱动。动态显

5、示驱动:动态驱动是数码管是单片机中应用最为广泛的一种驱动方式。动态驱动是将所有数码管的八个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,各选通由各自独立的I/O线控制,当单片机输出这形码时,所有数码管都接收到相同的字形码,哪个数码管会显示字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示的过程中,每位数码管的点亮时间为12ms。动态显示的效果和静态显示是一样

6、的,但能节省大量的I/O端口,而且功耗更低。由于静态显示需要数据锁存器等硬件,接口复杂一些,考虑时钟显示只有八位, 且系统没有其它复杂的处理任务,所以决定采用动态扫描实现LED的显示。 单片机采用易购的STC89C52系列,这种单片机具有足够的空余硬件资源,可以实现其他的扩展功能。时钟计时器电路系统的总体设计框图如图1。图12、实验步骤:时钟计时器的硬件电路如图2所示。该电路采用51单片机最小系统,采用共阳八段数码管LED显示器,P0口输出段码数据,P2.0P2.5口作列扫描输出;P1口接矩阵键盘,实现时间的调整。系统的功能由键盘上1、2、3键完成。 如图23、系统程序的设计(1)主程序本设计

7、中计时采用定时器T0中断完成。主程序循环调用显示子程序和查键子程序,当端口有开关按下时,转入相应功能程序。其主程序流程如图3。(2)显示子程序时间显示子程序每次显示8个连续内存单元的十进制BCD码数据,首地址在调用显示程序时先指定。显示时,先取出内存地址中的数据,然后查得对应的显示用段码从P0口输出,P2口将对应数码管选中供电,就能显示该地址单元的数据值。(3)定时器T0中断服务程序定时器T0用于时间计时。定时溢出中断周期设为50ms,中断进入后先进行定时中断初值校正,当中断累计20次(即50ms20=1s)时,对秒计数单元进行加1操作。在计数单元中,采用十进制BCD码计数,满10进位。T0中

8、断计时程序流程图如图4所示。图3图2(4)调时功能程序调时功能程序的设计方法是:按下1键,可以选择要修改的位,按下按2键和3键键,对选中的位进行加减操作,修改完成之后,再按下XW键对其它位进行修改。具体如下:第一次按下1键时,可以修改秒。第二次按下1键时,可以修改分。第三次按下1键时,可以修改时。第四次按下1键时,退出子程序。第四章、所选元件清单1、元件清单原件数量八段共阳数码管2S8550三极管81K电阻8150电阻851最小系统1线若干2、程序实际接线数码管的不同笔段的组合构成了不同字符的字形。为了获得不同的字形,各笔段所加的电平也不同,因此各个字形所形成的编码是不一样的。例如,对于共阳极

9、数码管,如果要显示字符2,则笔段a、b、g、e、d发光,对应的引脚为低电平;其余各笔段不发光,对应的引脚为该电平。所以字符2的字形编码gfedcba=10100100B=A4H。阴极数码管的字形编码与用阳极数码管的字形编码是逻辑“非”的关系。根据上述编码方法可以得出数码管显示的字符与对应的字形编码的关系,如下表所示此次实验用的共阳数码管,所以按照阳极数码管的字形编码进行设计。第五章、课程设计心得这次课程设计根据课题要求,复习了这学期所学的单片机内容,通过查询相关的资料,简要的了解一下。虽然老师上课讲过,但并非听懂了所有有关知识。根据课程设计的要求和自己通过参考有关资料拟的方案,写好程序流程图,

10、在程序流程图的基础上,根据芯片的功能写出相应的程序,达到能够实现所要求的功能的目的。这次的单片机课程设计重点是理论与实际的相结合,不单单只是书上的一条条分离的指令。通过这次设计让我更系统的了解了各个指令以及单片机的扩展内容,。学习任何知识,仅从理论上去求知,而不去实践、探索是不够的,所以在学期末单片机课程设计是很及时、很必要的。这样不仅能加深我们对单片机的更深理解,而且还及时、真正的做到了学以致用。刚开始进行课程设计的时候,我表现出了极大的热情。上网查资料、询问高年级同学的经验,我时刻猜测着我会从中获得什么,这是一个难得的锻炼机会。通过实践,我领悟到了很多以前不知道的东西,可以说是受益匪浅。虽

11、然时间不是很长,但是还是有不少长进,这不仅是局限在程序设计的功能实现上,更多的是对程序设计的技巧的追求上 第六章参考文献1楼然苗,李光飞编著.单片机课程设计指导.北京航空航天大学出版社2田立,田清,代方震编著.51单片机C语言程序设计快速入门.人民邮电出版社3翻红岗,魏学海,任思璟.51单片机自学笔记.北京航空航天大学出版社附录:程序#include #define uint unsigned int#define uchar unsigned char uchar miao,fen,shi,m,f,s,num,num1,num2; uchar code table1=0xc0,0xf9,0x

12、a4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void delay(uint z) uint x,y;for(x=z;x0;x-) for(y=110;y0;y-); void xiansi( uchar aa,uchar bb,uchar cc) P2=0xdb; P0=0xbf; delay(1); P0=0xff; / num2+; if(num1=1&num2=0|num1=1&num2=1) P2=0xff;P0=table1aa%10; delay(1); P0=0xff;P2=0xff; P0=table1aa/10; delay(1); P0=0x

13、ff; else P2=0x7f; P0=table1aa%10; delay(1);P0=0xff; P2=0xbf;P0=table1aa/10; delay(1); P0=0xff; if(num1=2&num2=0|num1=2&num2=1) P2=0xff; P0=table1bb/10; delay(1); P0=0xff; P2=0xff; P0=table1bb%10;delay(1); P0=0xff; else P2=0xf7; P0=table1bb/10; delay(1); P0=0xff; P2=0xef; P0=table1bb%10; delay(1); P0

14、=0xff; if(num1=3&num2=0|num1=3&num2=1) P2=0xff; P0=table1cc/10; delay(1); P0=0xff; P2=0xff; P0=table1cc%10; delay(1); P0=0xff; else P2=0xfe;P0=table1cc/10; delay(1); P0=0xff;P2=0xfd; P0=table1cc%10; delay(1); P0=0xff; /if(num2=256)num2=1; void jishi( ) if(num=20) num=0; miao+; if(miao=60) miao=0; fen+; if(fen=60)

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

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