课程报告课程新型单片机实践题目4*4矩阵键盘扫描显示键值二级学院班级姓名学号指导教师设计时间2011.11.15~2011.12.14常州工学院《新型单片机》设计任务书学院:专业:自动化班级:绪论 (4)第一章总体方案设计 (5)第二章系统硬件电路的设计 (6)第三章系统软件电路的设计 (8)3.1软件设计思想 (8)3.2主程序设计 (9)3.3子程序设计 (9)3.3.1 动态显示程序设计 (10)3.3.2 按键程序设计 (11)第四章调试及性能分析 (14)4.1软件调试 (14)4.2性能分析 (15)总结 (16)参考文献 (16)附录 (17)A元件清单 (17)8、瓷片电容 (17)B总原理图 (18)C程序清单 (19)C实物图 (22)绪论制作一个检测4*4 矩阵键盘的按键编码的实验,把实际按键的键值的八位编码先转换成从0000—1111 的编码,再译成数码管能识别的八位编码,在数码管动态显示时,矩阵键盘的第一行对应00—03,4*4 第二行对应04—07,第三行08—11,第四行对应12—15。
原理:1.键盘的工作原理:.键盘的工作原理:按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。
行线通过上拉电阻接到+5V 电源上。
无按键按下时,行线处于高电平的状态,而当有按键按下时,行线电平与此行线相连的列线电平决定。
2.行列扫描法原理:原理:.行列扫描法原理第一步,使行线为编程的输入线,列线是输出线,拉低所有的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行线都为高电平。
第二步,在第一步判断有键按下后,延时10ms 消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下一步,否则返回第一步重新判断。
第三步,开始扫描按键位置,采用逐行扫描,每间隔1ms 的时间,分别拉低第一列,第二列,第三列,第四列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置,分别把行值和列值储存在寄存器里。
第四步,从寄存器中找到行值和列值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一个一直到第四行第四个逐行进行编码,编码值从“0000” 至“1111” ,再进行译码,最后显示按键号码。
3.数码管动态扫描原理:.数码管动态扫描原理:数码管的7 个段及小数点都是由LED 块组成的,显示方式分为静态显示和动态显示两种。
数码管在静态显示方式时,其共阳管的位选信号均为低电平,四个数码管的共用段选线a、b、c、d、e、f、g、dp 分别与单片机的8 根I/O 口线相连,显示数字时只要给相应的段选线送低电平。
数码管在动态显示方式时,在某一时刻只能有一个数码管被点亮显示数字,其余的处于非选通状态,位选码端口的信号改变时,段选码端口的信号也要做相应的改变,每位显示字符停留显示的时间一般为1-5ms,利用人眼睛的视觉惯性,在数码管上就能看到相当稳定的数字显示。
第一章总体方案设计(1)总体设计要求本系统采用单片机STC89C52为数码管的控制核心,制造一种简单的4×4键盘扫描显示,能够在目测条件下两位数码管各段亮度均匀、充足,本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。
根据设计要求,初步确定设计方案如下:1. 选择STC89C52单片机(晶振频率为f=12MHZ)作为整个系统的核心器件,对整个系统进行总体控制,发送并时时处理系统信息。
2.通过编程显示数字: 00~15。
3.当有按键按下时显示数字。
4. 扫描信号连接到单片机的P2口,显示信号连接到单片机的P0口。
5.数码管点亮过程有程序控制,通过P1.0,P1.1分别扫描点亮两位数码管完成,数码管采用直接驱动方式,共阳极接法。
(2)系统框图本文设计行、列驱动电路,显示屏电路,运用单片机的智能化,系统的将每个功能电路模块连接在一起,总体结构设计如下图1所示:图1-1系统框图第二章系统硬件电路的设计本系统的硬件电路是由单片机最小系统、按键电路、动态显示驱动电路三部分组成。
其中,单片机最小系统包括电源电路、复位电路和晶振电路构成;按键电路采用独立编码方式;显示部分使用共阳型高台扫描、高态显示信号驱动电路,完成数字效果。
总原理图见附录B。
2.1晶振电路晶振是为电路提供频率基准的元器件,通常分成有源晶振和无源晶振两个大类,无源晶振需要芯片内部有振荡器,并且晶振的信号电压根据起振电路而定,允许不同的电压,但无源晶振通常信号质量和精度较差,需要精确匹配外围电路(电感、电容、电阻等),如需更换晶振时要同时更换外围的电路。
有源晶振不需要芯片的内部振荡器,可以提供高精度的频率基准,信号质量也较无源晶振要好。
如图2-1为晶振电路。
图 2-1 晶振电路图2.2复位电路为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。
一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。
由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。
如图2-2为复位电路图。
图2-2 复位电路图第三章系统软件电路的设计3.1 软件设计思想主程序先进行设置数码管闲时显示‘- -’,并启动,再进行键盘扫描载入00~15字型,然后判断一组字型是否扫描完,按不同情况进行循环调用子程序。
进入子程序后,首先设置相应的程序,反复调用显示子程序,并在显示过程中反复调用键盘扫描子程序进行延时,判断是否退出相应的方式显示子程序。
设计过程中,能很好得提高按键响应速度。
如图2所示为软件系统框图。
图3-1软件设计框图字符编码:因为该数码管为共阳型显示,可以把I/O口输出位对应每段数码管显示段,因此若要使数码管一段点亮,则该位为“0”;该段不亮,则该位为“1”。
所以对“00~15”的编码,并将编码写入数组中便于查表操作,数组定义编码程序如下:unsigned char code TAB[18]= // 共阳7节显示器(g~a)编码{ 0xbf,0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 数字0-40x92, 0x82, 0xf8, 0x80, 0x98, // 数字5-90xa0, 0x83, 0xa7, 0xa1, 0x84, // 字母a-e(10-14)0x8e, 0xbf}; // 字母F(15),负号(-)3.2 主程序设计主程序里只有一个不断执行扫描函数scanner()的循环。
图3为主程序流程图。
图3-2 主程序流程图主程序如下://==主程序================================================main() // 主程序开始{ while(1) // 无穷回圈,程序一直跑scanner(); // 扫瞄键盘及显示7段显示器} // 主程序结束3.3 子程序设计子程序中包括动态显示程序、按键程序、延时程序三种,下面依次详细介绍。
3.3.1 动态显示程序设计本系统中采用依次开关断数码管静态显示方式。
当第一个位扫描完成后,就进行这样的调整动作,以产生第二位的编码。
同样的,当第二个字型扫描完成后,就进行这样的调整动作。
这个调整动作是将2个编码根据顺序填入存储器,调整存储器地址的程序流程图如图4所示。
图3-3 动态显示流程图显示子程序如下:void display(unsigned char x,unsigned char y){SEG_0=1;SEG7P=TAB[x];delay1ms(1);SEG_0=0;SEG_1=1;SEG7P=TAB[y];delay1ms(1);SEG_1=0;}3.3.2 按键程序设计系统中采用4×4矩阵键盘,在P2口接按键,P0端口控制数码管显示。
在扫描函数里,依次送出列扫描信号,而每组列扫描信号输出后,即读取按键状态,若有按下按键,则进行键值的判断与计算,再将其对应的显示信号送入显示管。
在组列扫描的最后,还要确定按键已放开,才进行下一组列扫描。
如图3-4所示为按键控制流程图。
图3-4按键流程图按键子程序如下:if(rowkey != 0) // 若有按键{ if(rowkey == 0x01) row=0; // 若第0列被按下else if(rowkey == 0x02) row=1; // 若第1列被按下else if(rowkey == 0x04) row=2; // 若第2列被按下else if(rowkey == 0x08) row=3; // 若第3列被按下kcode = 4 * col + row; // 算出按键之号码 dig1=kcode/10+1;dig0=kcode%10+1;while(rowkey != 0) // 当按钮未放开rowkey=~KEYP & 0x0f; // 再读入列键值} // if叙述(有按键时)结束第四章 调试及性能分析4.1 软件调试软件调试主要是利用计算机仿真针对程序中可能存在的错误进行检测,直到得到正确的显示结果。
按照程序流程图在KEIL C51软件中编写好程序,在PROTEUS 软件中仿真,并观察其结果,如图8、9所示。
图 4-1 KEIL 仿真图 4-2 动态显示仿真结果(按键状态)4.2 性能分析此次系统设计结果较好,七段数码管能很好的显示信息。
这个方案设计的4x4的键盘扫描显示数字,电路简单,成本较低,且较容易扩展;数码管各段亮度均匀、充足;显示数字稳定、清晰无串扰;可用静止、移入移出等多种显示方式显示图形或文字。
通过此次论文设计,让我学到了许多知道的和不知道的,都有提高,在单片机的选择、数码管的组合、键盘扫描还有各种器件的选用有了一个明确的认识,程序设计上清晰地思路,理论在实践方面的运用能力有巨大的提高。
在实践以前,由于对单片机有一定的兴趣,我通过课外学习已经接触了很多概念以及设计方式,但不专业。
但是通过这次深层次的学习、设计我有了一定的实践经验和理论基础,也让我可以进行更深的研究学习,在设计思路上,通过查阅资料了解了许多方法,认识到形式的多样性,模仿优秀作品是每个设计师必走之路,但是做设计必须要有自己的思想,人也要有自己的鲜明个性,久了就成了自己的风格,风格的养成与一个人的艺术素养和个人修养有直接关系。
要拓展自己的知识面,使自己的知识系统化知识需要接触社会的方方面面,光有书本知识是远远不够的。
要求自己在以后的学习中多想,多读,多学。
要求自己的写作水平一定要过硬。
经验的提高,让我今后在设计时更加方便、快捷,也为毕业后的就业提供了保障。