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

单片机数码管显示实验总结单片机数码管显示实验总结一、实验目的本次实验旨在通过单片机控制数码管显示,掌握数码管的工作原理、编程控制方法以及单片机与数码管的接口技术。
通过实验,提高自己的动手能力和编程技能,为今后的学习和实际工作打下坚实的基础。
二、实验原理数码管是一种常用的电子显示器件,它由多个LED组成,通过控制各个LED的亮灭来显示不同的数字或字符。
本次实验采用的是共阴极数码管,它由8个LED组成,通过单片机控制每个LED的亮灭状态来显示不同的数字或字符。
三、实验步骤1.硬件准备(1)选择合适的单片机开发板,如Arduino、STM32等。
(2)购买数码管及相应的驱动电路。
(3)准备杜邦线、电阻、电容等电子元件。
2.硬件连接(1)将数码管与单片机开发板连接起来。
(2)根据数码管驱动电路的要求,连接电源、地线和控制信号线。
(3)连接电源后,打开开发板电源,观察数码管的显示效果。
3.编程控制(1)在开发板上编写程序,控制数码管显示不同的数字或字符。
(2)使用相应的编译器将程序编译成可执行文件,上传到开发板上。
(3)观察数码管的显示效果,调试程序,使其达到预期效果。
4.测试与评估(1)在不同情况下测试数码管的显示效果,如按键输入、传感器数据等。
(2)对程序进行优化和改进,提高程序的效率和稳定性。
(3)总结实验过程中的问题和解决方法,为今后的学习和实际工作提供参考。
四、实验结果及分析1.实验结果在实验过程中,我们成功地实现了对数码管的编程控制,使其能够根据不同的输入显示不同的数字或字符。
同时,我们也发现了一些问题,如数码管的亮度不够、显示的数字不清晰等。
经过调试和改进,我们解决了这些问题,使数码管的显示效果更加理想。
2.结果分析通过本次实验,我们深入了解了数码管的工作原理和编程控制方法,掌握了单片机与数码管的接口技术。
同时,我们也发现了一些问题,如数码管的亮度不够、显示的数字不清晰等。
这些问题的出现可能与硬件连接、编程控制等方面有关。
凌阳61单片机使用指南

凌阳单片机资料使用指南1.1 初次接触单片机-使用《跟我学SPCE061A 单片机》\61教学与创新\2教材与教案\跟我学SPCE061A单片机《跟我学SPCE061A单片机》无论有没有学过单片机,都可以从里面学习到有关凌阳SPCE061A单片机的基础知识。
初学单片机的朋友,在学习时常会碰到些一时间无法理解的概念、原理等;对于这些不解,可以从微机原理、数字电路、模拟电路以及C语言编程类的书籍、资料中找到答案,假如之前没有学过这些知识呢?怎么办?其实不用太在意,最好找时间自己学习一下,对于初学者,最重要的是这些知识中的相关概念的理解,找一找,问一问,总会找到答案的。
当然,最好还是系统地去学,这样打好了基础,在往深层次发展时才不会感到步履艰难。
这就需要我们的学习下面的材料了!1.2 初次接触凌阳单片机-SPCE061A 30 课时PPT\61教学与创新\2教材与教案\SPCE061A教学30课时PPT 在这份PPT资料中,以图文、动画的形式向单片机爱好者展示SPCE061A的CPU特点、资源概况,各个硬件外设的工作机制以及使用方法,另外还介绍有关SPCE061A的开发工具介绍、汇编语言、极具特色的语音功能等等。
另外,这份PPT资料中,在每一页都写上了详尽的注释,在学习时留意看一下,会发现很多教材上所没有的东西的。
这个主要是提供给老师作为凌阳单片机教学和辅导来使用。
1.3 怎么样把凌阳单片机用起来呢?学以致用,学习单片机无非就是为了使用它。
很多同学学习单片机考试通过就算OK。
实际上我们认为这种观念是要不得的。
单片机绝不是一门等同于模电、数电等科的课程。
这是一种工具,是工具就要去用。
学过C语言,我们可以在单片机用C语言对硬件进行操作,来熟悉C语言的使用;学过PID算法、模糊控制,我们就可以在水温控制、电机控制等场合去体会控制算法对被控对象的影响;学过卷积(或内积)运算,我们就可以尝试编写软件滤波算法等。
凌阳61单片机使用指南

凌阳61单片机使用指南凌阳61单片机使用指南第一章:简介1.1 概述本章介绍凌阳61单片机的基本信息,包括产品特点、硬件规格等。
第二章:硬件连接2.1 引脚定义本节介绍凌阳61单片机各个引脚的功能和使用方式。
2.2 电源接口本节介绍凌阳61单片机的电源接口及相关注意事项。
2.3 外部设备连接本节介绍凌阳61单片机与外部设备的连接方式和通信协议。
第三章:软件开发3.1 开发环境搭建本节详细介绍凌阳61单片机软件开发所需的开发环境搭建步骤。
3.2 编程语言选择本节介绍凌阳61单片机支持的编程语言,并分析其特点和适用场景。
3.3 开发工具使用本节介绍凌阳61单片机的开发工具的使用方法和常用功能。
3.4 编程实例本节提供凌阳61单片机的编程实例,帮助读者快速上手开发。
第四章:调试与测试4.1 调试工具本节介绍凌阳61单片机调试工具的选择和使用方法。
4.2 常见问题解答本节了一些常见问题,并提供解决方案和调试方法。
第五章:附件本文档涉及的附件包括:- 凌阳61单片机引脚定义图- 凌阳61单片机外部设备连接示意图- 凌阳61单片机开发环境搭建视频教程附件可以通过邮件(exampl)向我们索取。
法律名词及注释:1.单片机:是一种集成电路中的集成块,由一个处理器核心、存储器和各种周边设备组成的微型计算机。
2.编程语言:用于编写计算机程序的一种形式化语言,用来精确地描述计算机操作的步骤。
3.通信协议:设备之间进行数据交换和通信时所约定的规则和格式,包括物理层传输、数据之间的转换和通信协议的解释等。
led数码管显示控制实验报告

led数码管显示控制实验报告实验名称:LED数码管显示控制实验实验目的:1.了解LED数码管及其工作原理。
2.学习如何控制LED数码管显示数字。
3.加强对单片机控制IO口的编程能力。
实验器材:1.STC89C52RC单片机开发板2.数码管(共阳、共阴)3.杜邦线实验原理:LED数码管是一种数字显示组件,在工业控制、计算机等领域都有广泛应用。
LED数码管在显示数字时,通过LED管来显示数字,根据不同的管脚状态,控制LED管的导通和隔离,间隔时间来控制亮和灭的时间,从而显示出不同的数字。
在STC89C52RC单片机上,通过控制IO的高低电平来控制数码管的显示。
当要显示的数字为0~9时,需要将相应的IO输出低电平,同时将其他IO输出高电平,从而实现数字的显示。
实验步骤:1.将共阳数码管的正极连接到P0口(注意极性),并将共阴数码管的负极连接到P0口(注意极性)。
2.将STC89C52RC单片机开发板连接到电源,将USB转串口线连接到电脑。
3.打开Keil uVision5软件,创建一个新工程,配置完工程后编写控制代码(具体代码见附录)。
4.编写完成后,将代码下载到单片机中,开始实验。
实验结果:成功实现了数字0到9的显示。
通过实验,我们了解了LED数码管的工作原理,学会了控制单片机IO口进行数字的显示,加强了对单片机编程的掌握能力。
附录:代码如下:```#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula = P2^6;sbit wela = P2^7;uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=114;y>0;y--);}void Display(){uchar i;for(i=0;i<10;i++){P0 = table[i]; dula = 0;dula = 1;delay(500);}}。
单片机键盘显示实验报告

单片机的键盘和显示实验报告㈠实验目的1.掌握单片机I/O的工作方式;2.掌握单片机以串行口方式0工作的LED显示;3.掌握键盘和LED显示的编程方法。
㈡实验器材1.G6W仿真器一台2.MCS—51实验板一台3.PC机一台4.电源一台㈢实验内容及要求实验硬件线路图见附图从线路图可见,8051单片机的P1口作为8个按键的输入端,构成独立式键盘。
四个LED显示器通过四个串/并移位寄存器74LS164接口至8051的串行口,该串行口应工作在方式0发送状态下,RXD端送出要显示的段码数据,TXD则作为发送时钟来对显示数据进行移位操作。
编写一个计算器程序,当某一键按下时可执行相应的加、减、乘、除运算方式,在四个显示器上显示数学算式和最终计算结果。
注:①通过按键来选择加、减、乘、除四种运算方式。
②输入两个数字均为一位十进制数,可预先放在内存中。
㈣实验框图(见下页)㈤思考题1.当键盘采用中断方式时,硬件电路应怎样连接?P1.4~P1.7是键输出线,P1.0~P1.3是扫描输入线。
输入与门用于产生按键中断,其输入端与各列线相连,再通过上拉电阻接至+5 V电源,输出端接至8051的外部中断输入端。
2.74LS164移位寄存器的移位速率是多少?实验中要求计算的式子和结果之间相差一秒,移位寄存器的移位速率应该是每秒一位吧。
其实这个问题确实不知道怎么回答。
LED 显示用的段码与教科书所提供的不同,本实验采用如下段码:显示数符段码显示数符段码0BBH A DBH109H B F1H2EAH C B2H36BH D E9H459H E F2H573H F D2H否有否P1口置输入读P1口开 始显示“0000”是否有键按下?延迟消抖是否有键按下?是读键码加法运算减法运算除运算6F3H—40H70BH.04H8FBH┗┛A1H97BH┗┛1AH灭00H P DAH实验代码:ORG 0000HAJMP MAINORG 0030HMAIN:MOV 41H,#0BBH ;对几个存放地址进行初始化MOV 42H,#0BBHMOV 43H,#0BBHMOV 44H,#0BBHMOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALL DISPLAY ;初始化显示KEY:MOV R3,#08H;用来存放两个数据MOV R4,#02HMOV P1,#0FFH ;初始化P1口MOV A,P1 ;读取按键状态CPL A ;取正逻辑,高电平表示有键按下JZ KEY ;A=0时无键按下,重新扫描键盘LCALL DELAY1;消抖MOV A,P1 ;再次读取按键状态CPL AJZ KEY ;再次判别是否有键按下PUSH AKEY1:MOV A,P1CPL AANL A,#0FH ;判别按键释放JNZ KEY1 ;按键未释放,等待LCALL DELAY1;释放,延时去抖动POP AJB ACC.0,ADD1 ;K1按下转去ADD1JB ACC.1,SUB1 ;K1按下转去SUB1JB ACC.2,MUL1 ;K1按下转去MUL1JB ACC.3,DIV1 ;K1按下转去DIV1LJMP KEYADD1:LCALL BUFFER ;显示加数和被加数MOV 43H,#049HLCALL DISPLAY ;显示加号MOV A,R3ADD A,R4DA AMOV R3,A ;相加结果放入R6ANL A,#0FHMOV R4,A ;结果个位放入R7MOV A,R3SWAP A ;半字节交换,高四位放入低四位ANL A,#0FHMOV R3,A ;结果的高位放入R6LCALL L;显示缓存区设置LCALL DELAY2;延时一秒后显示LCALL DISPLAYLJMP KEYSUB1:LCALL BUFFER ;显示减数和被减数MOV 43H,#40HLCALL DISPLAY ;显示减号MOV A,R3CLR CY ;CY清零SUBB A,R4 ;做减法PUSH ARLC A ;带进位循环左移,最高位放入CYJC F ;判断最高位,若为1则跳转到负数ZHENG: POP AMOV R4,AMOV R3,#00H ;高位清零SJMP OUTFU:POP ACPL A ;取绝对值INC AMOV R4,AMOV R3,#11H ;显示负号OUT: LCALL L ;显示缓存区设置LCALL DELAY2 ;延时1s后显示LCALL DISPLAYLJMP KEYMUL1:LCALL BUFFER ;显示两位乘数MOV 43H,#99HLCALL DISPLAY ;显示乘号MOV A,R3MOV B,R4MUL AB ;结果放入AB,A中是低8位,B中是高8位MOV B,#0AHDIV AB ;十进制转换MOV R4,B ;结果个位放入R7MOV R3,A ;结果的十位放入R6LCALL LLCALL DELAY2LCALL DISPLAY ;延时1s后显示LJMP KEYDIV1:LCALL BUFFER ;显示除数和被除数MOV 43H,#62HLCALL DISPLAY ;显示除号MOV A,R3MOV B,R4DIV AB ;A除以BMOV R4,B ;余数放在R4中MOV R3,A ;商放在R3中MOV A,R4MOVC A,@A+DPTR ;调用段选号MOV 41H,A ;显示余数MOV A,R3MOVC A,@A+DPTRMOV 43H,A ;显示商MOV 42H,#00HMOV 44H,#00HLCALL DELAY2 ;延时1S后显示LCALL DISPLAYLJMP KEYBUFFER: MOV 41H,#22H ;显示初始化,在做计算之前显示两个操作数,显示等号MOV DPTR,#TABLMOV A,R4MOVC A,@A+DPTRMOV 42H,AMOV A,R3MOVC A,@A+DPTRMOV 44H,ARETDISPLAY:MOV R5,#04H;共四位需要显示MOV R0,#41HDISPLAY1:MOV A,@R0MOV SBUF,ADISPLAY2:JNB TI,DISPLAY2;是否传完了CLR TIINC R0DJNZ R5,DISPLAY1RETL:MOV A,R4MOVC A,@A+DPTRMOV 41H,A ;R4对应的段码MOV A,R3MOVC A,@A+DPTRMOV 42H,A ;R3对应的段码MOV 43H,#00HMOV 44H,#00HRETDELAY1: ;普通延时MOV R1,#20HDS1:MOV R2,#0FFHDS2:DJNZ R2,DS2DJNZ R1,DS1RETDELAY2:MOV R6,#14H ;定时1SMOV TMOD,#01HDS3:MOV TH0,#3CHMOV TL0,#0B0H ;50msSETB TR0LOOP:JNB TF0,LOOPCLR TF0CLR TR0DJNZ R6,DS3 ;1s到,中断返回RETTABL:DB 0BBH 09H 0EAH 6BH ;段码表DB 59H 73H 0F3H 0BHDB 0FBH 7BH 00H 0DBHDB 0F1H 0B2H 0E9H 0F2HDB 0D2H 40H实验结果及分析按键1:8+2= 结果:10按键2:8-2= 结果: 6按键3:8*2= 结果:16按键4:8/2= 结果:4从上面的结果可以看出,本次实验基本完成了实验要求。
实验七-单片机键盘LED显示实验

实验七单片机键盘LED显示实验一、实验目的1、掌握键盘和LED显示器的接口方法和编程方法。
2、掌握键盘扫描和LED八段码显示器的工作原理。
3、学习并口扩展的程序编写方法。
二、实验说明利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。
实验程序可分成三个模块。
①键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
②显示模块:将显示单元的内容在显示器上动态显示。
③主程序:调用键输入模块和显示模块。
三、实验仪器计算机伟福实验箱(lab2000P )四、实验内容1、本实验仪提供了一个6×4的小键盘,向列扫描码地址(0X002H)逐列输出低电平,然后从行码地址(0X001H)读回。
如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。
这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
在判断有键按下后,要有一定的延时,防止键盘抖动。
地址中的X是由KEY/LED CS 决定,参见地址译码。
做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。
以便用相应的地址来访问。
例如将KEY/LED CS信号接CS0上,则列扫描地址为08002H,行码地址为08001H。
列扫描码还可以分时用作LED的位选通信号。
2、本实验仪提供了6 位8段码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8位段码、6位位码是由两片74LS374输出。
位码经MC1413或ULN2003倒相驱动后,选择相应显示位。
3、本实验仪中8位段码输出地址为0X004H,位码输出地址为0X002H。
此处X是由KEY/LED CS 决定,参见地址译码。
做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。
以便用相应的地址来访问。
例如,将KEY/LED CS 接到CS0上,则段码地址为08004H,位码地址为08002H。
凌阳单片机实验指导书

第一章SPCE061A 基础应用实验实验一熟悉µ’nSP™ IDE 集成开发环境下汇编语言程序的编写【实验目的】1. 熟悉SPCE061A 单片机常用的汇编指令;2. 学会使用SPCE061A 单片机汇编语言以及伪指令构造汇编程序;3. 掌握µ’nSP™ IDE 集成开发环境的一般使用方法。
【实验设备】1. 装有Windows 系统和µ’nSP™ IDE 集成开发环境的PC 机一台,SPCE061A 实验仪一套。
2. 本实验用到的实验仪硬件模块为:CPU 区电路模块、供电电路模块、下载模式选择电路模块。
【实验要求】1. 编程要求:编写一个汇编语言程序。
2. 实现功能:从1 到100 进行累加,并把计算结果保存在[Sum]单元里。
3. 实验现象:实验过程中,单步运行时,可通过IDE 的调试工具寄存器观察窗口(Register Window)观察通用寄存器的变化,通过变量观察窗口(Toggle Watch)观察变量Sum 的变化;累加结束后保存累加结果:通过变量观察窗口(Toggle Watch)可以观察到变量Sum 的值为5050(十六进制表示为0x13BA)。
【实验原理】SPCE061A 的汇编指令按其功能主要有数据传送指令、算术指令、逻辑指令、转移指令和控制指令。
在程序运行中主要用到r1~r4 四个通用寄存器和BP(r5)、SP、PC、SR 四个特殊功能寄存器。
其中r1~r4一般作为目标寄存器或源寄存器,参与数据传输或算术逻辑运算。
【程序流程】初始化寄存器r2 作为累加器,初始值为0;寄存器r1 为加数,初始值为1。
初始化操作完成后即进入累加循环;在累加循环当中,累加器的数值加上加数,并保存在累加器当中,加数自加1;当加数加到了100,退出累加循环,把r2 累加的结果送到[Sum]单元中。
程序流程图如图1-1 所示。
图1-1 程序流程图【实验步骤】鉴于本实验为本书的第一个实验,所以在此介绍一些有关unSP IDE 操作的步骤;在之后的实验中,将不再重述。
单片机实验报告——LED数码管显示实验

单片机实验报告——LED数码管显示实验引言单片机是一种基础的电子元件,作为电子专业的学生,学习单片机编程是必不可少的。
在单片机编程实验中,学习如何使用IO口驱动LED数码管显示是重要的一部分。
在此次实验中,我们用到的是STM32F103C8T6单片机,与之相配套的是LED数码管、杜邦线等元件,并利用Keil uVision5软件进行编程操作。
本文的目的是通过实验与实验数据的分析说明单片机控制LED数码管的方法,希望对单片机初学者有所帮助。
实验原理1.LED数码管简介LED数码管是利用发光二极管实现数字和字母的显示,其外观形式有共阳和共阴两种。
共阳型数码管的共阳端是接在公共的端子上,数字和字母的每一个元素(即1、2、3、4、5、6、7、8、9、A、B、C、D、E、F)的生命延伸出去,称为”高”电平;共阴型数码管的共阴端是接在公共的端子上,数字和字母的每一个元素的生命也是分别延伸出去,但称为”低”电平。
2.STM32F103C8T6单片机STM32F103C8T6单片机是一款功能完备的32位MCU产品,它具有高性能,低功耗的特点,可广泛应用于许多硬件系统。
此次实验所需的LED数码管的显示量是5个(共阳型),因此我们只需要5个IO口即可将STM32F103C8T6单片机与LED数码管连接起来。
实验材料STM32F103C8T6单片机、LED数码管、杜邦线、电容、电阻、面包板等。
实验步骤1.硬件连接:将LED数码管的针脚连接到单片机的IO口,如下图所示:其中P0-P4分别代表数字0-4,PE2口作为LED点亮控制口,分别接入面包板中。
2.软件设置:使用Keil uVision5进行程序编写,将代码下载到单片机控制器内,开启电路,即可观察到LED数码管上的数字进行了变化。
代码如下所示:实验结果将程序下载到开发板后,启动单片机,即可看到红色LED数码管逐个显示从0-9的数字。
达到9后又从0开始循环。
实验过程及结论本次实验中彻底了解到了用单片机控制LED数码管的方法,单片机控制LED数码管变化是通过选中不同的IO口来完成的,利用Keil uVision5软件可以完成程序编写。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学院:实习课题:专业:小组成员:班级: 指导教师:学号:实习地点:姓名:实习时间:前言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..。