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单片机使用指南

凌阳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单片机使用指南凌阳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数码管显示控制实验报告实验名称: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显示实验

实验七单片机键盘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数码管显示实验

单片机实验报告——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软件可以完成程序编写。

61板说明

61板说明


SUNPLUS Easy Living Technology for
凌阳大学计划

(二)实验内容
I/O口实验 Timer A/B实验 中断实验 (含6个实验) 系统时钟实验 A/D转换实验 D/A转换实验 即录即放实验 异步串行通讯(UART)实验 睡眠唤醒实验 低电压检测(LVD)/低电压复 位(LVR)实验 FLASH/SRAM读/写实验 SUNPLUS Easy Living Technology for
凌阳大学计划

(三)如何利用“61板”进行开发
简易开发如上图中的①: “61板”+下载线+PC机 这里我们将“61板”上的数据缓冲电路和下载线统称为 “EZ-PROBE” 这种开发方式适合学生和初学者使用, 我们还可提供PCB板和整套元器件散件 ,并配有原理 图和装配图。 优点:开发成本低,学生买的起。

SUNPLUS Easy Living Technology for
凌阳大学计划

(二)实验内容
6位7段LED数码管显示实验 4*4键盘输入在LED数码管上的显示实验 日历时钟实验 并口扩展ROM实验 并口扩展SRAM实验 LED点阵模块等实验 还提供USB、液晶(LCD)、4M存储器 (memory)扩展等实验

SUNPLUS Easy Living Technology for
凌阳大学计划

(一)61板简介
是以16位单片机SPCE061A为核心的精简开发 -仿真-实验板 ,大小相当于一页扑克牌,是 “凌阳大学计划”专为大学生、电子爱好者等进 行电子实习、课程设计、毕业设计、电子制作 及电子竞赛所设计的,也可作为单片机项目初期 研发使用。

凌阳大学计划

单片机应用实验报告 2键盘、LED 数码管显示实验

单片机应用实验报告 2键盘、LED 数码管显示实验
delayms(5);
}
int main(){init();来自while(1){
judge();
xianshi();
}
return 0;
}
五、实验步骤
六、附录
sbit LED2=P2^6;
int num=0;
unsigned char code dispcode[]=
{0x30,0xfc,0xa2,0xa4,0x6c,
0x25,0x21,0xbc,0x20,0x24};
void init()
{
key0=1;
key1=1;
key2=1;
}
void delayms(int a)
{int b=0;
for(a;a>0;a--)
for(b=110;b>0;b--);
}
int judge()
{
if(key0==0)
{
delayms(100);
if(key0==0)
{
red=0;
yell=1;
gre=1;
num++;
if(num==10)
num=0;
}
}
if(key1==0)
{
delayms(5);
if(key1==0)
{
red=1;
yell=0;
gre=1;
}
}
if(key2==0)
{
delayms(5);
if(key2==0)
{
red=1;
yell=1;
gre=0;
}
}
return 0;
}
void xianshi()
{

单片机课程设计--键盘输入在LED数码管上的显示

单片机课程设计--键盘输入在LED数码管上的显示

东北石油大学课程设计年月日东北石油大学课程设计任务书课程单片机的控制系统课程设计题目键盘输入在LED数码管上的显示专业姓名学号主要内容、基本要求、主要参考资料等主要内容:完成键盘输入在LED数码管上的显示。

基本要求:1.了解 4×4 键盘的工作原理。

2.熟悉 SPCE061A 单片机控制数码管显示的方法。

3.掌握 4×4 键盘的使用方法。

4.掌握 4×4 键盘控制数码管显示的方法。

参考资料:[1]肖洪兵.跟我学用单片机[J].北京:北京航空航天大学出版社,2002.8[2]何立民.单片机高级教程第1版[M].北京:北京航空航天大学出版社,2001.6[3]赵晓安.MCS-51单片机原理及应用[M].天津:天津大学出版社,2001.3[4]李广第.单片机基础第1版[M].北京:北京航空航天大学出版社,1999.5[5]徐惠民.单片微型计算机原理与应用[M].北京:北京邮电大学出版社,1996.2[6] 袁勤勇.嵌入式系统构件[M].北京:北京机械工业出版社,2002.完成期限指导教师专业负责人年月日目录第1章设计的研究背景及目的要求 (1)1.1 研究背景 (1)1.2 设计目的 (1)1.3 硬件选择 (1)1.4 设计内容 (1)第2章设计的基本原理及硬件连接方案 (2)2.1 4X4键盘扫描原理图 (2)2.2 SPCE061A获取4×4键盘键值原理 (2)2.3 硬件连接 (3)第3章软件设计方案 (5)3.1 设计步骤 (5)3.2 设计程序 (6)第4章调试结果与分析 (7)4.1 调试结果 (7)4.2 结果分析 (7)结论与体会 (8)参考文献 (9)附录 (10)第1章设计的研究背景及目的要求1.1 研究背景用单片机驱动LED数码管有很多方法,按显示方式可分静态显示和动态(扫描)显示;按译码方式可分硬件译码和软件译码。

静态显示数据稳定,占用很少的CPU时间。

凌阳61单片机使用指南

凌阳61单片机使用指南

凌阳61单片机使用指南凌阳61单片机使用指南1、简介1.1 设备概述1.2 技术参数1.3 硬件连接2、开发环境搭建2.1 安装IDE2.2 配置编译器2.3 驱动安装3、编程基础3.1 数据类型3.2 变量和常量3.3 运算符3.4 控制流程语句4、IO口输入输出编程4.1 GPIO配置 4.2 输入读取 4.3 输出控制4.4 中断处理5、定时器编程5.1 定时器配置 5.2 定时中断5.3 定时器应用6、串口通信编程 6.1 串口配置 6.2 数据发送 6.3 数据接收6.4 中断处理7、ADC和DAC编程 7.1 ADC配置7.2 ADC采样7.3 DAC配置7.4 DAC输出8、PWM编程8.1 PWM配置8.2 PWM控制8.3 PWM应用9、外部中断编程9.1 外部中断配置 9.2 中断触发方式9.3 中断处理10、蓝牙通信编程10.1 蓝牙模块选择 10.2 蓝牙通信协议 10.3 蓝牙配置10.4 数据传输11、存储器编程11.1 Flash存储器 11.2 EEPROM存储器12、计时器编程12.1 计时器配置12.2 计时器应用附件:无法律名词及注释:1、单片机:指一种将微处理器的中央处理器、存储器、定时器和通信接口等功能集成在一个芯片上的集成电路。

2、GPIO:General Purpose Input Output,通用输入输出口。

用于与外部设备进行数字信号的输入和输出。

3、中断:指计算机运行过程中,由硬件或软件发出的一个特定信号,用于改变程序的正常执行顺序。

4、ADC:Analog to Digital Converter,模数转换器。

用于将模拟信号转换为数字信号。

5、DAC:Digital to Analog Converter,数模转换器。

用于将数字信号转换为模拟信号。

6、PWM:Pulse Width Modulation,脉宽调制。

一种通过改变信号的脉冲宽度来控制模拟量的技术。

单片机数码管动态显示实验报告

单片机数码管动态显示实验报告

单片机数码管动态显示实验报告单片机数码管动态显示实验报告一、实验目的本实验旨在通过单片机控制数码管的动态显示,掌握单片机的基本操作和数码管显示原理,培养实际动手能力和编程技能。

二、实验原理数码管是一种常用的电子显示器件,通过单片机控制可以实现数字、字母等多种形式的显示。

本实验采用共阴极数码管,通过单片机控制选通哪个LED灯亮,从而在数码管上显示出相应的数字或字母。

三、实验步骤1.硬件搭建首先,将单片机、数码管、电源等硬件连接起来。

注意数码管的引脚与单片机的连接方式,确保正确连接。

2.编程环境设置打开单片机编程软件,如Keil uVision等,配置相应的编译器和调试器选项。

3.编写程序在编程环境中,编写程序以实现数码管的动态显示。

本实验采用C语言进行编程。

程序主要包括初始化、显示函数等。

4.编译程序将编写的程序进行编译,生成可执行文件。

5.调试程序通过调试器对程序进行调试,观察数码管的显示效果是否符合要求。

如有问题,及时修改程序并重新编译和调试。

6.测试结果确保程序运行无误后,对数码管的显示效果进行测试,观察是否达到预期效果。

四、实验结果与分析1.实验结果通过本次实验,我们成功实现了单片机对数码管的动态显示。

在数码管上成功显示了数字和字母,效果良好。

2.结果分析通过本次实验,我们深入了解了单片机的基本操作和数码管显示原理。

同时,我们也学会了如何编写程序、编译和调试程序。

此外,我们还学会了如何解决实验过程中遇到的问题。

这些技能对于后续的电子设计和开发具有重要意义。

五、实验总结与展望1.实验总结本次实验通过单片机控制数码管的动态显示,我们成功掌握了单片机的基本操作和数码管显示原理。

在实验过程中,我们学会了如何编写程序、编译和调试程序。

同时,我们也学会了如何解决实验过程中遇到的问题。

这些技能对于后续的电子设计和开发具有重要意义。

2.实验展望在本次实验的基础上,我们可以进一步探索如何实现更复杂的显示效果,如多位数码管的动态显示、彩色显示等。

凌阳61板实验指导书

凌阳61板实验指导书

专业感知与实践实验指导书电路与系统教研室实验一实验设备介绍 (3)凌阳61板硬件介绍 (3)LED键盘模组扩展板结构介绍 (7)集成开发环境介绍 (8)实验二 8061的简单IO操作 (13)介绍常用的几条指令 (13)点亮一盏LED灯实例 (14)数码管显示数字实例 (15)实验三键控发光二极管循环点亮 (17)实验四按键显示数字 (20)实验五电子时钟分秒设计 (23)实验六数字电子语音报时钟 (25)实验一实验设备介绍凌阳61板硬件介绍61板硬件结构一、61板的结构图如图1所示。

图1表框图说明POWER5v&3V供电电路PLL锁向环外部电路Power-电源指示灯Sleep-睡眠指示灯RESET复位电路K4复位按键PROBE在线调试器串行5pin接口S5EZ-PROBE和PROBE切换的拨断开关J12、J3耳机插孔和两pin喇叭插针DAC一路音频输出电路,采用SPY0030集成音频放大器MIC麦克风输入电路OSC32768晶振电路VREF A/D转换外部参考电压输入接口R/C芯片其他外围电阻、电容电路K1~K3扩展的按键:接IOA0~IOA2 SPCE061A61板核心:16位微处理器PORTA/B32个I/O口二、具体功能介绍,如61板图2图2(一)输入/输出(I/O)接口"61板"将SPCE061A的32个I/O口全部引出:IOA0~IOA15,IOB0~IOB15,对应的引脚为:A口,41~48、53、54~60;B口,5~1、81~76、68~64。

而且该I/O口是可编程的,即可以设置为输入或输出:设置为输入时,分为悬浮输入或非悬浮输入,非悬浮输入又可以设置为上拉输入或是下拉输入;在5V情况下,上拉电阻为150K,下拉电阻为110K;设置为输出时,可以选择同相输出或者反相输出。

(二)音频输入/输出接口正如我们在前面介绍的"61板"具有强大的语音处理功能,如图2所示,X1是语音的MIC 输入端,带自动增益(AGC)控制,J12和J3都是语音输出接口,一个是耳机插孔另一个是两pin的插针外接喇叭,由DAC输出引脚21或22经语音集成放大器SPYOO30放大,然后输出,SPY0030是凌阳的芯片,相当于LM386,但是比386音质好,它可以工作在~范围内,最大输出功率可达700mW(386必须工作在4V以上,而且功率只有100mW)。

单片机实验报告二-数码管显示实验

单片机实验报告二-数码管显示实验

单片机实验报告二-数码管显示实验摘要:本实验使用单片机控制数码管的显示,在实验过程中通过学习单片机的GPIO口的编程,调试程序、调节电路来达到正确的显示效果。

最终按照要求实现了单片机控制数码管的计数器。

关键词:单片机、数码管、GPIO口、计数器一、实验介绍数码管是一种介于机械仪表和液晶显示器之间的电子显示器件,广泛应用于计时器、计数器、仪表等电子产品中。

本实验旨在通过单片机控制数码管的显示来加深对GPIO口的使用和调试程序的理解,同时了解数码管的原理。

本实验主要分为两部分:数码管显示基础实验和数码管控制开关实验。

通过这两部分的实验可以了解数码管的工作原理和单片机的基本控制方式。

二、实验原理2.1 数码管的基本原理数码管显示器将数字显示为一组符号,例如“0”到“9”。

表示不同数字的符号被编码成一个数字码。

七段数码管用一个七段数码字母来表示数字,如下表所示:| 数字 | a | b | c | d | e | f | g || ---- | - | - | - | - | - | - | - || 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 || 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 || 2 | 1 | 1 | 0 | 1 | 1 | 0 | 1 || 3 | 1 | 1 | 1 | 1 | 0 | 0 | 1 || 4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 || 5 | 1 | 0 | 1 | 1 | 0 | 1 | 1 || 6 | 0 | 0 | 1 | 1 | 1 | 1 | 1 || 7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 || 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 || 9 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |通过控制数码管的七个LED灯的亮灭,可以实现不同符号显示。

8位动态LED数码管显示实验——【全国大学生电子设计大赛】

8位动态LED数码管显示实验——【全国大学生电子设计大赛】

8位动态LED数码管显示实验2008-03-18 18:048.1 实物图与原理图本实验仪配置带8位动态扫描显示模块一个。

实物图如下:为减少IO的使用,我们采用串入并出芯片CD4094来扩展了IO 口,即采用3个IO来实现数据的传输。

原理图如下:所以,我们占用3个IO来传输数据,8个IO来进行8个LED数码管的位选。

在本实验仪中链接管教分布如下:STK-----P2.5DAT-----P2.6CLK-----P2.7B0、B1、B2、B3、B4、B5、B6、B7接P0口(P0.0 P0.1 P0.2 P0.3 P0.4 P0.5P0.6 P0.7)由于上一节已经讲述了CD4094驱动一位LED数码管的问题,这里我们讲如何来扫描8位数码管。

8.2 LED动态显示原理根据原理图管脚连接,我们知道P0口控制了8个LED数码管的位选中,所以如果想让8个数码管都亮起来,我们可以逐位扫描8位数码管。

1动态显示原理:原理上同一时刻只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是常说的动态扫描显示。

动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。

如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,所以一般均取几个ms左右为宜。

8.3 DG3000 动态显示头文件display_s.h----------------------------------------------------------程序作用:显示头文件display_s.h----------------------------------------------------------#ifndef _display_#define _display_#include <intrins.h>sbit SDA=P2^6; 定义显示管脚sbit CLK=P2^7;unsigned char data display_bit;unsigned char codeled[20]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x89,0x8C};2旗开得胜定义段码延时程序void delay(unsigned int k){ unsigned int i,j;for(i=0;i<k;i++)for(j=0;j<100;j++);}数据传输void send(unsigned char a){unsigned char i;for(i=0;i<8;i++){if(_crol_(a,i)&0x80)SDA=1;elseSDA=0;CLK=0;CLK=1;}}3显示程序8位LED数码管扫描void display(unsigned char display_buffer[8]){unsigned char i,k;display_bit=0xfe;for(i=0;i<8;i++){k=led[display_buffer[i]];send(k);P0=display_bit;delay(0x01);P0=0xff;display_bit=_crol_(display_bit,1);}display_bit=0xfe;8.4 8位数码管动态显示01234567(C51程序)----------------------------------------------------------程序作用:动态扫描显示01234567----------------------------------------------------------#include<REG52.h>#include<display_s.h> 调用显示头文件4main(){unsigned chara[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};显示01234567 while(1){display(a); 显示数据}}8.5 8位数码管动态显示01234567(汇编);----------------------------------------------------------;程序作用:8位数码管动态显示01234567(汇编);----------------------------------------------------------;定义变量DBUF DATA 40H ;显示缓冲区首址SP_BT DATA 60H ;堆栈指针初值; LED 位选LED_CS1 BIT P0.0LED_CS2 BIT P0.1LED_CS3 BIT P0.2LED_CS4 BIT P0.35旗开得胜LED_CS5 BIT P0.4LED_CS6 BIT P0.5LED_CS7 BIT P0.6LED_CS8 BIT P0.7;4094接口SDA_4094 BIT P2^6CLK_4094 BIT P2^7ORG 0000HAJMP MAIN;-------------------------------ORG 0030HMAIN: MOV SP,#60HMOV R0,#0FFH;单元清零RES1: MOV R0,#0DJNZ R0,RES1MOV DBUF,#00H;显示数据MOV DBUF+1,#01HMOV DBUF+2,#02HMOV DBUF+3,#03HMOV DBUF+4,#04H6旗开得胜MOV DBUF+5,#05HMOV DBUF+6,#06HMOV DBUF+7,#07HSAMP1:LCALL DIR ;调用显示SJMP SAMP1;------------------------------------------------------;显示数据;-------------------------------------------------------DIR:;显示程序MOV DPTR,#TABLEMOV A,DBUFMOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS1 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS1 ;关闭显示MOV A,DBUF+1MOVC A,A+DPTRANL A,#7FH;加小数点7ACALL DISP_da ;送段码输出CLR LED_CS2;选通第1位数码管LCALL DELAY_4094SETB LED_CS2;关闭显示MOV A,DBUF+2MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS3 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS3 ;关闭显示MOV A,DBUF+3MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS4;选通第1位数码管LCALL DELAY_4094SETB LED_CS4;关闭显示MOV A,DBUF+4MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS5 ;选通第1位数码管LCALL DELAY_40948SETB LED_CS5 ;关闭显示MOV A,DBUF+5MOVC A,A+DPTRANL A,#7FH;加小数点ACALL DISP_da ;送段码输出CLR LED_CS6;选通第1位数码管LCALL DELAY_4094SETB LED_CS6;关闭显示MOV A,DBUF+6MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS7 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS7 ;关闭显示MOV A,DBUF+7MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS8;选通第1位数码管LCALL DELAY_4094SETB LED_CS8;关闭显示;-------------------------------------9RETTABLE: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0~9DB 88H,83H,0C6H,0A1H,86H,8EH ;A~F;-------------------------延时子程序---------------------------------DELAY_4094: MOV R4,#2 ;延时程序3,精确延时1000微秒D_4094:MOV R5,#248DJNZ R5,$DJNZ R4,D_4094RETDISP_DA:MOV R3,#08HDUP: RLC AMOV SDA_4094,CCLR CLK_4094SETB CLK_4094DJNZ R3,DUPRETEND10。

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 系统总体设计对课题系统的软硬件进行大概介绍,以文字加框图和流程图的形式。

凌阳61单片机使用7段数码管显示数字时钟的程序

凌阳61单片机使用7段数码管显示数字时钟的程序

凌阳61单片机使用7段数码管显示数字时钟的程序#include<SPCE061v004.h>#include<unspmacro.h>//中断函数定义void IRQ1(void) __attribute__((ISR));void IRQ5(void) __attribute__((ISR));void IRQ6(void) __attribute__((ISR));enum{ RUN, CHGSECOND, CHGMINUTE, CHGHOUR } clock_status; //时钟的状态unsigned int hour,minute,second;unsigned int show_hour, show_minute, show_second;enum{ NOKEY, PRESSING, PRESSED } key_status; //键盘按下与否的状态unsigned key_code;// 7段LED数码管的字形码,采用高八位输出,决定显示的字形,如: '0'、'1'等const unsigned int zhixingma[] = { 0x3f00, 0x0600, 0x5b00, 0x4f00,0x6600, 0x6d00, 0x7c00, 0x0700,0x7f00,0x6f00 };//数码管选择的"位段码",决定哪一位数码管显示const unsigned int weiduanma[] = {0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040}; //数码管的两个DD引脚,为时,中间的冒号亮const unsigned int wei_DD = 0x0081;void display(unsigned int wei, unsigned int number){*P_IOA_Data = zhixingma[number];//设置位段码时,不能改变冒号的状态*P_IOB_Data = weiduanma[wei] | (*P_IOB_Buffer & wei_DD);}//取反数码管中间的冒号void opposite_dots(){*P_IOB_Data = wei_DD ^ (*P_IOB_Buffer);}void delay(unsigned int howlong){while(howlong--){unsigned int temp = 0x00ff;*P_Watchdog_Clear = 1;while(temp--);}}void init(){INT_OFF();*P_IOA_Dir = 0xff00;*P_IOA_Attrib = 0xff00;*P_IOB_Dir = 0x00ff;*P_IOB_Attrib = 0x00ff;*P_TimerA_Data = 0xffff - 256;*P_TimerA_Ctrl = C_SourceA_1 | C_SourceB_256Hz;*P_INT_Ctrl = C_IRQ1_TMA | C_IRQ6_TMB2 | C_IRQ5_2Hz; INT_IRQ();}void change_clock(){unsigned int key_code = get_key();static unsigned int max;switch(key_code){ // key_code == 0 will do nothing case 1:switch( clock_status ){case CHGSECOND:if(++second == 60) second = 0;break;case CHGMINUTE:if(++minute == 60) minute = 0;break;case CHGHOUR:if(++hour == 24) hour =0;break;default:break;}break;case 2:switch( clock_status ){case CHGSECOND:if(--second == 0) second = 59;break;case CHGMINUTE:if(--minute == 0) minute = 59;break;case CHGHOUR:if(--hour == 0) hour = 23;break;default:break;}break;case 3:switch( clock_status ){case RUN:clock_status = CHGSECOND;break;case CHGSECOND:clock_status = CHGMINUTE;break;case CHGMINUTE:clock_status = CHGHOUR;break;case CHGHOUR:clock_status = RUN;break;}break;default:break;}}int main(){init();while(1){change_clock();if(show_second){display(5, second % 10);delay(1);display(4, second / 10);delay(1);}if(show_minute){display(3, minute % 10);delay(1);display(2, minute / 10);delay(1);}if(show_hour){display(1, hour % 10);delay(1);display(0, hour / 10);delay(1);}}void IRQ1(){//时钟计数中断if( (C_IRQ1_TMA & *P_INT_Ctrl) != 0 ){ if( clock_status == RUN ){ second++;if(second >= 60 ) second=0, minute++;if(minute >= 60 ) minute=0, hour++;if(hour >= 24 ) hour=0;}*P_INT_Clear = C_IRQ1_TMA;}}void IRQ5(){//数码管闪烁if( (C_IRQ5_2Hz & *P_INT_Ctrl) != 0){switch(clock_status){case RUN:opposite_dots();show_hour = show_minute = show_second = 0xffff;break;case CHGSECOND:show_second ^= 0xffff;show_minute = show_hour = 0xffff;break;case CHGMINUTE:show_minute ^= 0xffff;show_second = show_hour = 0xffff;break;case CHGHOUR:show_hour ^= 0xffff;show_second = show_minute = 0xffff;break;}*P_INT_Clear = C_IRQ5_2Hz;}}void IRQ6(){ //每10ms扫描一次键盘static unsigned int old_key = 0;static unsigned int key_count = 0;unsigned int current_key;if( (C_IRQ6_TMB2 & *P_INT_Ctrl) != 0){ current_key = *P_IOA_Data & 0x0007;if( current_key != 0){ //有按键if( key_status == NOKEY ){ old_key = current_key;key_count++;key_status = PRESSING;}else{if( current_key == old_key) //不相等,抖动{if( ++key_count >= 5)//有>5次扫描的值相等,说明不是抖动,判断按键值{ if(current_key == 0x0001) key_code = 1;if(current_key == 0x0002) key_code = 2;if(current_key == 0x0004) key_code = 3;}}else{//抖动old_key = 0;key_count = 0;key_status = NOKEY;}}}else{ //无按键old_key = 0;key_count = 0;if( key_status == PRESSING ) key_status = PRESSED; //按键释放了 }*P_INT_Clear = C_IRQ6_TMB2;}}。

单片机实验报告——LED数码管显示实验

单片机实验报告——LED数码管显示实验

单片机实验报告——LED数码管显示实验《微机实验》报告LED数码管显示实验指导教师:专业班级:姓名 :学号 :联系方式 :Shen Longbao look in the eyes, for a chance to kill him. ShenLongbao behind smart to keep gendarmes, picked up a brick reservoir in cotton vest, walked into a small alley corner, seeing four weeks nobody will step up and pulled out bricks Asahi on military police knocked down. Unsuspecting Japanese military police was flaccid paralysis. Shen Longbao picked the Japanese military police gun in cotton vest, leave一、任务要求实验目的:理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。

实验内容:利用C8051F310单片机控制数码管显示器基本要求:利用末位数码管循环显示数字0-9,显示切换频率为1Hz。

提高要求:在4位数码管显示器上依次显示当天时期和时间,显示格式如下:yyyy (年份)mm.dd(月份.日)hh.mm(小时.分钟)思考题:数码管采用动态驱动方式时刷新频率应如何选择,为什么,二、设计思路C8051F310单片机片上晶振为24.5MHz,采用8分频后为3.0625MHz ,输入时钟信号采用48个机器周期。

0到9对应的断码为:FCH、60H、DAH、F2H、66H、B6H、BEH、E0H、FEH、F6H基础部分:由于只需要用末位数码管显示,不需要改变位码,所以只需要采用LED的静态显示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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..。

相关文档
最新文档