当前位置:文档之家› 1×8键输入凌阳61单片机在LED数码管上的显示实验

1×8键输入凌阳61单片机在LED数码管上的显示实验

学院:实习课题:专业:小组成员:班级: 指导教师:学号:实习地点:姓名:实习时间:前言61板作为一套完整的16为单片机开发系统,可直接把程序下载到61板上进行调试和封装。

也具有集成度高、运算速度快、体积小、运算可靠、价格低廉,在过程控制、数据采集、机电一体化、智能仪器仪表、家用电器以及网络技术等方面得到广泛应用。

、61板主要性能指标:(1)输入电压DC:4V---5V(2)输入电流:200MA61板一共分为一下几个区:A.电源区B.下载区C.音频区D.SPCE061A&周边E.键盘区F.复位区G.端口区LED板原理图:目录1 课题概述 (1)2 系统总体设计 (1)2.1硬件连接 (2)2.2 程序设计 (2)3 系统电路设计 (3)3.1 系统电源电路 (3)3.2 LED显示原理: (4)3.3复位电路 (4)3.4静态数码显示模块 (5)3.5程序下载模块 (6)4 系统程序设计 (6)4.1 键操作 (7)5 系统调试 (8)6 课题体会 (9)7程序代码 (10)参考文献 (15)1 课题概述描述课题作品的主要功能及参数。

利用61板和LED键盘模组,编写程序让按键控制键盘模组的6位LED数码管的显示。

给1×8键盘定义一个数字,当每按下一次按键时,将数码管上原有的显示内容左移一位,然后将按键代表的数字显示在最右边的数码管上。

1×8键盘各个键对应的数字如表按键名称K1 K2 K3 K4 K5 K6 K7 K8显示数字 1 2 3 4 5 6 7 8 开机后(程序运行后),6为数码管全部显示0,当按键按下时,数码管上显示的数字左移一位,该键对应的数字显示到最后的数码管上。

显示的数字与键码对应关系:显示数字 1 2 3 4 5 6 7 80x80 0x40 0x20 0x10 0x08 0x04 0x02 0x01键码(IOA0-IOA7)2 系统总体设计对课题系统的软硬件进行大概介绍,以文字加框图和流程图的形式。

2.1硬件连接61板和LED键盘模组的硬件连接:IOA7---IOA0连接8个按键的COL1~COL8,IOA8连接键盘的ROW;IOB15~IOB8连接8个LED的a~g、dp,用排线分别连接IOB与SEG接口,注意这里的连接顺序是IOB8引脚连接SEG接口的a,IOB15引脚连接SEG接口的dp;图12.2 程序设计主要包含以下几个文件:1.main.c--------主程序文件2.key.asm-------键盘处理程序文件3.dig.asm-------数码管显示程序文件4.isr.asm--------中断处理程序文件,实现IRQ4的1kHz中断调用数码管显示函数和IRQ6中断调用按键扫描函数。

3 系统电路设计电路设计描述例如:系统总体电路如图?和图?所示,本课题电路包括:系统电源电路、单片机最小系统电路、程序下载电路、音频输入输出电路、单片机IO端口引出电路、1×8或者4×4键盘电路,发光二极管驱动电路,数码管显示驱动电路,系统各电路具体介绍如下3.1 系统电源电路电源模块为系统板上其它模块提供+5V电源,电源输入有两种方式,一种为交直流电源从电源插座输入,输入的电压要求,直流输入应大于7.5V,交流输入应大于5V,通过7805三端稳压器得到5V的直流电源供给系统其它模块工作,另一种为从USB接口获取+5V电源,只要用相应配套的USB线从电脑主机获取+5V直流电源,在电源模块中加有保护电路,即电路中有短路,不会对7805三端稳压器及电脑主机电源有损害!其电路原理图如图3.4所示:3.2 LED 显示原理:静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU 时间。

动态显示需要CPU 时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU 时间多。

这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU 时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU 时间多,但使用的硬件少,能节省线路板空间基本的半导体数码管是由七个条状发光二极管芯片按图1.1排列而成的。

可实现0~9的显示LED 数码管是由发光二级管显示字段组成的显示器,有8段和“米”字段之分,这种显示器有共阳级和共阴极两种。

所谓共阳方式(如图1.2)是指笔画显示器各段发光管的阳极(即P 区)是公共的,而阴极互相隔离。

所谓共阴方式(如图1.3)是笔画显示器各段发光管的阴极(即N 区)是公共的,而阳极是互相隔离的。

3.3 复位电路在单片机系统里,单片机需要复位电路,复位电路可以采用R -C 复位电路,也可以采用复位芯片实现的复位电路,R -C 复位电路具有经济性,但可靠性不高,用复位芯片实现的复位电路具有很高的可靠性,因此为了保证复位电路的可靠性,该系统采用复位芯片实现的复位电路,复位电路如图所示。

1324756G3.4静态数码显示模块在该模块中,每一路端口对应着一个具体的数码管,具体的电路原理图如图:3.5程序下载模块该模块完成源程序代码下载到AT89S51或者是AT89S52芯片中,它需要和微机上的ISP 下载器软件配合使用来完成这样的功能。

具体的电路原理图如图:4 系统程序设计系统程序设计描述主程序流程图:初始化系统,进入扫键循环,调用键盘程序区键值,根据键值进入相关的程序:原来显示的数字左移一位,在把数字键代表的数字显示在最右边的数码管上。

4.1 键操作键值程序流程图:和以前实验使用1×8键盘程序一样,键盘程序时利用延时的方法进行消抖处理的:先读取IOA口键值保存的寄存器,判断读回值是否为零,为零则表示没有键按下,返回零;非零则延时大约30ms后再次读取IOA口键值,比较两次读取的键值是否相同,如果相同则放回键值;否则返回零。

键盘程序流程图如图所示:5 系统调试调试中遇到的问题及解决的办法:1.问题:对凌阳SPCE061A单片机汇编语言不熟悉.程序编写困难.解决:通过光盘和网站中相关资料的学习.终于设计出1) 2. 问题:数码管各脚和接口不知道如何连接解决:认真学习实验指导书和61板的说明书,弄清电路。

6 课题体会在这个课体设计中,我们运用到了以前所学的专业课知识,如:C语言、模拟和数字电路知识等。

虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。

最后,在实习之前,我们要对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在实习过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。

但是从中学到的知识会让我受益终身。

发现、提出、分析、解决问题和实践能力提高都会受益于我在以后的学习、工作和生活中在这我要感谢汪老师的不厌其烦的教我们,由于我们以前没有一点单片机的基础,所以突然要我们用现学的东西做一个题目感到很难,但是汪老师却很用心和耐心的教我们。

7程序代码//===================================================================== // The information contained herein is the exclusive property of// ,// or disclosed in whole in part without prior written permission.// ALL RIGHTS RESERVED// The entire notice above must be reproduced on all authorized copies.//===================================================================== =//===================================================================== =// 工程名称: P05_Led_Show_Key.spj// 功能描述: <<凌阳16位单片机实验与实践》第5章一般综合性实验// 5.2 1×8键盘输入在LED数码管上的显示实验// 6位数码管循环显示1*8键盘的按键值// IDE环境: SUNPLUS u'nSPTM IDE 2.0.0// 涉及的库:CMacro1016.lib// 组成文件:main.c// isr.asm,Dig.asm,Key.asm// Dig.inc,Key.inc// Dig.h,Key.h// 开发日期: 2007-2-12 V1.0// 实验器材:61板和LED键盘模组// 硬件连接:61板的IOA7~IOA0与键盘模组1*8key接口COL1~COL8分别连接,IOA8 // 与ROW连接// IOB15~IOB8与模组SEG接口的a~h连接// IOB0~IOB5与DIG接口的DIG1~6连接// 维护记录://=====================================================================//========================================================// 文件名称:main.c// 功能描述:6位数码管显示// 维护记录:2007-2-12 v1.0//========================================================#include "SPCE061A.h"#include "Dig.h"#include "Key.h"//========================================================// 语法格式:void LED_ShiftLeft(void)// 实现功能:数码管显示左移一位// 参数:无// 返回值:无//========================================================void LED_ShiftLeft(void){// unsigned int DIG_Data[4];unsigned int DIG_Data[6];unsigned int Temp, i;DIG_GetAll(DIG_Data);// for(i=3; i>0; i--)for(i=5; i>0; i--){Temp = DIG_Data[i];DIG_Set(i, Temp);}// DIG_Set(4, 0x00);DIG_Set(6, 0x00);}const unsigned int g_Data[] = {0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};//0, 1, 2, 3, 4, 5, 6, 7, 8, 9//========================================================// 语法格式:int main(void)// 实现功能:数码管显示// 参数:无// 返回值:无//========================================================int main(void){unsigned int uiKey, i;*P_IOA_Dir |= 0x0100; // IOA8输出高电平*P_IOA_Attrib |= 0x0100;*P_IOA_Buffer |= 0x0100;Key_Init(); // 初始化按键驱动程序DIG_Init(); // 初始化数码管驱动程序// for(i=1; i<=4; i++) // 数码管初始显示'0'// DIG_Set(i, g_Data[0]);for(i=1; i<=6; i++) // 数码管初始显示'0' DIG_Set(i, g_Data[0]);while(1){uiKey = Key_Get();switch(uiKey){case 0x80: // K1LED_ShiftLeft();// DIG_Set(4, g_Data[1]);DIG_Set(6, g_Data[1]);break;case 0x40: // K2LED_ShiftLeft();// DIG_Set(4, g_Data[2]);DIG_Set(6, g_Data[2]);break;case 0x20: // K3LED_ShiftLeft();// DIG_Set(4, g_Data[3]);DIG_Set(6, g_Data[3]);break;case 0x10: // K4LED_ShiftLeft();// DIG_Set(4, g_Data[4]);DIG_Set(6, g_Data[4]);break;case 0x08: // K5LED_ShiftLeft();// DIG_Set(4, g_Data[5]);DIG_Set(6, g_Data[5]);break;case 0x04: // K6LED_ShiftLeft();// DIG_Set(4, g_Data[6]);DIG_Set(6, g_Data[6]);break;case 0x02: // K7LED_ShiftLeft();// DIG_Set(4, g_Data[7]);DIG_Set(6, g_Data[7]);break;case 0x01: // K8LED_ShiftLeft();// DIG_Set(4, g_Data[8]);DIG_Set(6, g_Data[8]);break;default:break;}*P_Watchdog_Clear = 0x0001; //清看门狗}}//========================================================// 文件名称:isr.asm// 功能描述:显示数据,扫描键盘// 维护记录:2005-09-12 v1.0//========================================================.INCLUDE SPCE061A.inc.INCLUDE Dig.inc.INCLUDE Key.inc.TEXT.PUBLIC _IRQ4_IRQ4:push r1,r5 to [sp]r1 = C_IRQ4_1KHztest r1,[P_INT_Ctrl]jnz ?L_IRQ4_1KHzr1 = C_IRQ4_2KHztest r1,[P_INT_Ctrl]jnz ?L_IRQ4_2KHzL_IRQ4_4KHz:call F_DIG_Drive //数码管显示,F_DIG_Drive函数在Dig.asm中定义r1 = C_IRQ4_4KHz[P_INT_Clear] = r1pop r1,r5 from [sp]retiL_IRQ4_2KHz:[P_INT_Clear] = r1pop r1,r5 from [sp]retiL_IRQ4_1KHz:[P_INT_Clear] = r1pop r1,r5 from [sp]reti.PUBLIC _IRQ6_IRQ6:push r1,r5 to [sp]r1 = C_IRQ6_TMB2test r1,[P_INT_Ctrl]jnz ?L_IRQ6_TMB2L_IRQ6_TMB1:r1 = C_IRQ6_TMB1[P_INT_Clear] = r1pop r1,r5 from [sp]retiL_IRQ6_TMB2:call F_Key_Scan //扫描键盘,F_Key_Scan函数在Key.asm 中定义r1 = C_IRQ6_TMB2[P_INT_Clear] = r1pop r1,r5 from [sp]reti参考文献[1] 罗亚非等编著.凌阳16位单片机应用基础[M].北京:北京航空航天大学出版社,2003.[2] 汪敏等编著.凌阳16位单片机实验与实践[M].北京:北京航空航天大学出版社,2007..。

相关主题