基于MSP430单片机的实时时钟设计(数码管显示)

基于MSP430单片机的实时时钟设计(数码管显示)
基于MSP430单片机的实时时钟设计(数码管显示)

苏州市职业大学

毕业设计说明书

毕业设计题目基于MSP430单片机的实时时钟设计

系部电子信息工程系

专业班级08电气1班

姓名

学号

指导教师

2011年5月29 日

摘要

本文研究了基于数码管显示的数字时钟系统设计与实现。该系统具有时间设置及显示、闹钟、计时等功能,系统以MSP430单片机为核心,主要进行基于MSP430单片机的低功耗型数字时钟及其系统的研究。系统带有数码管显示器,配合按键提供友好的用户界面,操作简单,该数字时钟能长期、连续、可靠、稳定的工作;同时还具有体积小、功耗低等特点,便于携带,使用方便。系统软件设计包括单片机编程。单片机软件编程主要实现按键、数码管显示、时钟、计时、闹钟等模块功能。

在本设计中充分利用了单片机内部资源,涉及到了键盘控制、数码管显示、中断系统、定时/计数器、串口通信等。

关键字:数字时钟;MSP430单片机;数码管

Abstract

This paper studies the digital pipe display based on digital clock system design and realization. This system has the time set and display, alarm clock, timing, and other functions, system to MSP430 microcontroller as the core, mainly for the low power consumption MCU based on MSP430 type of digital clock and its system. System, cooperate with digital tube display buttons provide friendly user interface, easy operation, this digital clock can long-term continuous, reliable and stable working; It also has the features such as small volume, power consumption, easy to carry, easy to use. System software design including microcontroller programming. Single-chip microcomputer software programming mainly realizes buttons, digital pipe display, clock, timing, alarm clock function module.

In this design make full use of the internal resources, involving the microcontroller keyboard control, digital tube display, interrupt system, timing/counters, serial communication.

Keyword: Digital clock, MSP430 microcontroller,Digital tube

目录

第一章绪论 (1)

1.1课题研究的意义 (1)

1.2课程设计内容 (1)

1.3课程设计目的 (2)

第二章数字时钟的构成及方案选择 (3)

2.1数字时钟的构成 (3)

2.2模块方案选择 (3)

2.2.1单片机模块方案 (3)

2.2.2 时钟方案选择 (3)

2.2.3 键盘模块选择 (4)

2.2.4 显示模块方案选择 (4)

第三章系统硬件设计与实现 (5)

3.1电路设计图 (5)

3.2系统硬件设计 (5)

3.2.1 MSP430单片机简介 (5)

3.2.2 复位电路的设计 (6)

3.2.3 晶振电路设计 (7)

3.2.4 时钟模块设计 (8)

3.2.5 键盘模块设计 (8)

3.2.6 显示模块设计 (9)

第四章系统的软件设计 (11)

4.1系统设计总流程图 (11)

4.2 DS1302时钟流程图 (11)

4.3 LED数码管显示流程图 (12)

第五章系统的调试与仿真 (14)

5.1 IAR FOR 430简介 (14)

5.2程序调试过程 (14)

第六章结论 (16)

参考文献 (17)

附录一:系统原理图 (18)

致谢 (35)

第一章绪论

1.1课题研究的意义

20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

目前,单片机正朝着高性能和多品种方向发展的趋势将进一步向CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势:

单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已经能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制设计的一次革命。

数字时钟在单片机模块里比较常见,数字时钟是一种用0、1数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。

数字时钟是采用数字电路实现对时、分、秒数字现实的计时装置,广泛用于个人家庭,办公室,车站等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字时钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动开起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用,有着非常现实的意义。

1.2课程设计内容

(1)了解MSP430单片机实验开发系统中的实验模块原理,画出电路原理图(2)综合运用实验模块,开发设计具有一定功能的单片机控制系统,进行软、硬件的设计及调试

(3)写出完整的设计任务书:课题的名称、系统的功能、硬件原理图、软件框图、程序清单、参考资料

(4)时间包括年、月、日、星期、时、分、秒的显示

1.3课程设计目的

(1)巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学的知识解决工业控制的能力

(2)培养针对课题需要,选择和查阅有关手册、图标及文献资料的自学能力,提高组成系统、编程、调试的动手能力

(3)通过对课题设计方案的分析、选择、比较,熟悉单片机用系统开发、研制的过程及软硬件设计的方法、内容及步骤

第二章数字时钟的构成及方案选择

2.1数字时钟的构成

数字时钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的1MHZ时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字时钟。

(1)晶体振荡器电路

晶体振荡器电路给数字时钟提供一个频率稳定准备的12MHZ的方波信号没

课保证数字时钟的走时准确及稳定,不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。

(2)时间计数器电路

时间计数器电路由秒个位和秒十位计数器,分个位和分十位计数器电路组成,秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器。

2.2模块方案选择

2.2.1单片机模块方案

方案一:使用89C51单片机模块。其内部数据总线是8位的,虽然经过各种努力使其内部功能模块有了显著的增加,但是受其结构本身的限制很大,其模拟功能部件的增加更加困难。其指令采用的是复杂指令集(CISC),在待机状态下,耗电电流仍为3mA。

方案二:使用MSP430单片机模块其基本架构是16位的,同时在其内部的数据总线经过转换还存在8位的总线,在加上本身就是混合型的结构,因而对它这样的开放型的架构来说,无论扩展8位的功能模块,还是16位的功能模块,即使扩展模/数转换或数/模转换这类的功能模块也是很方便的。由于引进了Flash 型程序存储器和JTAG技术,不仅可以实现在线编程和仿真,而且使开发工具变得简便,价格也相对低廉。所以本次设计采用了MSP430单片机模块。

2.2.2时钟方案选择

方案一:基本门电路搭建。用基本门电路来实现时钟发生器,电路结构复杂,故障系数大,不易测试。

方案二:专用时钟芯片。目前市场上已有很多实时时钟芯片。如DS12887、DS1302、DS1307、PCF8563、X1227等,芯片内都集成了时钟/日历功能,给时钟系统设计带来了很多方便。根据设计要求,在本设计中我采用了DS1302时钟芯片。

2.2.3键盘模块选择

方案一:采用阵列式键盘。此类键盘是采用行列扫描方式,当按键较多时可以降低占用单片机的I/O数目。但是本次设计按键较少,所以不采纳。

方案二:采用独立式按键电路。每个键单独占有一根I/O的工作状态互不影响,此类键盘采用端口直接扫描方式。所以在设计中选择了采用独立式按键。

2.2.4显示模块方案选择

方案一:采用液晶显示器。液晶也传统的显示器相比,最大的优点在于耗电量和体积,一般的液晶显示器的分辨率可达到720线之上,当然,液晶还在轻薄性上有着明显的优势,但是液晶显示器的可视偏转角度有限,容易产生影响拖尾现象,而且液晶显示器的寿命也很短。

方案二:采用数码管显示器。LED数码管能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容,发光响应时间极短,高频特性好,单色性好,亮度高,体积小,重量轻,抗冲击性能好,寿命长,使用寿命在10万小时以上,甚至可达100万小时。成本低,因此它被广泛用作数字仪表、数控装置、计算机的数显器件。在设计中我们也选择使用数码管。

第三章 系统硬件设计与实现

3.1电路设计图

本次电路的设计,是由键盘来设置和调节数码管上所显示的日期、时间等数据,这些数据通过MSP430模块的整理和传送,控制各个模块的正常运行,时间通过LED 数码管显示器显示出来。如图3.1所示:

图3.1系统结构图

3.2系统硬件设计

本设计是以MSP430单片机为控制核心,其芯片具有在线编程功能,功耗低,能低电压,小电流下工作;时钟芯片采用DS1302,它是一款高性能、低功耗的实时时钟芯片,其精度和使用寿命相对其他芯片具有明显的优越性,同时具有掉电自动保存功能,可以对年、月、日、星期、时、分、秒进行设置和调整;温度检测模块由DS18B20构成,该传感器结构简单,不需要外接电路,在-10℃—+85℃范围内精度为±0.5℃,精度较好;显示部份使用LED 数码管显示屏来实现,该显示屏具有高频特性好,单色性好,亮度高,体积小,重量轻,抗冲击性能好,寿命长的特点。

3.2.1 MSP430单片机简介

强大的处理能力MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC )结构,具有丰富的寻址方式(7种源操作数寻址、4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储都可以参加多种运算;还有高效的查表处理指令;有较高的处理速度,在8MHZ 晶体驱动下指令周期为125ns 。这些特点保证了可编制出高效率的源程序。

MSP430单片机

模块

按键模块

数码管显示模块

时钟模块

MSP430系列单片机的中断源较多,并且可以任意嵌套,使用时灵活方便。当系统处于省电的备用状态时,用中断请求讲它唤醒只有6us。超低功耗MSP430单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。首先,MSP430系列单片机的电源电压采用的是

1.8~3.6V电压。因而可使其在1MHz的时钟条件下运行时,芯片的电流会在

200~400uA左右,时钟关断模式的最低功耗只有0.1uA。其次,独特的时钟系统设计,在MSP430系列中有两个不同的系统时钟系统:基本时钟系统和锁频(FLL 和FLL+)时钟系统或DCO数字振荡器时钟系统。有的使用一个晶体振荡器(32768Hz),有的使用两个晶体振荡器。由系统时钟系统产生CPU和各功能所需的时钟,并且这些时钟可以在指令的控制下,打开和关闭,从而实现对总体功耗的控制。MSP430单片机引脚图如图3.2所示:

图3.2 MSP430单片机的引脚图

3.2.2复位电路的设计

MSP430单片机系统复位电路功能模块共有两个复位信号:一个是上电复位信号POR和上电清除信号PUC。当器件上带电或者RST/NMI引脚配置为复位模式即RST/NMI引脚产生低电平的时候,器件上会产生上电复位信号,当启动看门狗,向看门狗写入错误的安全参数值,向片内Flash写入错误的安全参数值的时候,会引起产生上电清除信号。当产生上电复位信号时,必然会产生上电清除信号。但是当产生上电清除信号的时候缺不会产生上电复位信号。

图3.3复位电路图

3.2.3 晶振电路设计

MSP430系列芯片所有的晶振接口上的旁路电容大概都是2pF,旁路电容我们可以看成是晶振和单片机之间的负载电容,但是旁路电容随着晶振和单片机的距离以及单片机的种类,在电气焊接时的方法不同而不同,所以为了要更好的让晶振起振,选择合适的负载能力比较强的晶振。

MSP430系列芯片因为是低功耗单片机,所以它的I/O流过的电流比较小,在这种情况下就必须要求晶振的谐振电阻必须要小,因为太大了I/O不能供应足够的电流让晶振正常的工作,所以必须选择合适的谐振电阻的晶振。 MSP430系列芯片对晶振输出的正弦波震荡幅度也有要求,最低必须保证要有0.2VCC的输出电压,所以必须选择合适的谐振输出电压值的晶振。影响晶振起振的原因有晶振(ESR)、晶振启动后负载电容的大小、单片机电源电压的范围、PCB布线和电气隔离、外部的环境因素和电路板的保护涂层处理,上面具体介绍的三个参数是选择晶振时必须考虑的最主要的参数。

在振荡回路中,晶体既不能过激励(容易振到高次谐波上)也不能欠激励(不容易起振)。晶体的选择至少必须考虑:谐振频点,负载电容,激励功率,温度特性,长期稳定性。

图3.4晶振电路图

3.2.4时钟模块设计

DS1302时钟内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信,实时时钟/日历电路提供年、月、日、星期、时、分、秒的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式。DS1302与单片机之间能简单的采用同步串行的方式进行通信,仅需用到三个口线:(1)RES(复位)、(2)I/O(数据线)、(3)SCLK (串行时钟),时钟RAM的读写数据以一个字节或多达31个字节的字符组方式通信。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc 超过2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST 置为高电平。I/O为串行数据输入输出端,SCLK始终是输入端。

图3.5DS1302时钟模块电路图

3.2.5键盘模块设计

本次设计采用了独立式键盘电路,这种键盘使用单片机的I/O口线直接连接,每个按键对应一根口线,每根I/O口线上的按键工作状态不会影响其他I/O 口线上的状态。键盘的工作方式可分为编程控制方式和中断控制方式,设置各个口线为输入模式,通过中断方式或者软件查询方式获取各个口线是否有键按下的信息在如图3.6所示的键盘中,有键按下则口线端电平为高,否则为低电平。在按下设置键要对其时间进行调整时,可通过+、-对其进行调整,如果要调整多个时间点的话,在对其中一个设置完成结束后,系统会自动跳到下一个时间点,这样就能对所有的点进行调整,调整结束后返回显示调整之后的时间。

图3.6按键模块电路图

3.2.6显示模块设计

LED数码管里面有8只发光二极管,分别记作a、b、c、d、e、f、g、dp,其中dp为小数点,每一只发光二极管都有一根电极引到外部引脚上,而另外一只引脚就连接在一起同样也引到外部引脚上,记作公共端(COM)。共阴极的LED,只要在某该段二极管加上高电平,该段即点亮,反之则暗。对共阴极LED 显示器的控制采用“接地方式”即通过控制LED 的“GND”引脚的电平高低来达到选通的目的,该引脚即通常所说的位选线。共阳极LED 显示器控制方式则相反。两种控制方式中,共阴极LED 控制方式受糸统器件功耗限制的段则不能点亮使用LED 显示器时,工作电流一般为2-10mA/段,这样当LED 处于全亮状态时,工作电流约15-80 mA 左右。LED 显示器的亮度除与工作电流有关外,还与LED 的型号有关。根据显示亮度的不同划分为普通亮度和高亮度LED,高亮度LED 显示器的发光强度远大于普通亮度的LED,正常情况下的发光强度越是普通LED 的10 倍,即在1-2 mA/段时便可点亮。

图3.7显示模块电路

LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们需要的位数,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。

(1)静态显示驱动:

静态驱动也称直流驱动。静态驱动是指每个数码管的每个段码都由一个单片机的I/O埠进行驱动,或者使用如BCD码二十进位解码器进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O埠多,所以实际应用时必须增加解码驱动器进行驱动,增加了硬体电路的复杂性。

(2)动态显示驱动:

数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a、b、c、d、e、f、g、dp”的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。

透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及二极体的余晖效应,尽管实际上各位数码管并非同时点亮,但是只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O埠,而且功耗更低。

第四章系统的软件设计

4.1系统设计总流程图

系统设计总流程图如图4.1所示,接通电源之后,系统进行初始化,按下设置键,对当地时间进行读取,对时间进行需要的调整,这些数据通过数码管显示器显示出来,确认无误后才开始运行。

图4.1系统设计总流程图

4.2 DS1302时钟流程图

程序运行时要对DS1302进行设置,开始调整时间之前先对DS1302系统进行初始化,看当前系统时间是否为0,是的话给各个点校准当地的有效时间,并对时间进行上传,将有效的时间信息存储在EPROM中,然后上传给信息管理层,收到命令之后对相应的时间点进行修改,然后显示出具体的时间。具体的流程图如图4.2所示:

图4.2DS1302时钟流程图

4.3 LED数码管显示流程图

LED数码管在显示时间之前,首先要对其串口工作方式进行设置,然后设置

图4.3LED数码管流程图

对应的地址指针,然后选择其数码段,通过传送过来的脉冲来显示出这个段位的时间,然后再次选择段位,通过下一次传送过来的脉冲来显示这个段位的时间,其他的段位时间也通过这个方法依次显示出来,当所有段位时间都显示出来之后,取段结束,时间显示成功,流程图如图4.3所示.

第五章系统的调试与仿真

5.1 IAR FOR 430简介

IAR Systems是全球领先的嵌入式系统开发工具和服务的供应商。公司成立于1983年,迄今已有27年,提供的产品和服务涉及到嵌入式系统的设计、开发和测试的每一个阶段,包括:带有C/C++编译器和调试器的集成开发环境、实时操作系统和中间件、开发套件、硬件仿真器以及状态机建模工具。

国内普及的MSP430开发软件种类不多,主要有IAR公司的Embedded Workbench forMSP430(简称EW430)和AQ430。目前IAR的用户居多。IAR EW430软件提供了工程管理,程序编辑,代码下载,调试等所有功能,并且软件界面和操作方法与IAR EW for ARM等开发软件一致,因此,学会了IAR EW430,就可以很顺利的过度到另一种新处理器的开发工作。

5.2程序调试过程

1. 创建新工作站

打开IAR Embedded Workbench。单击“开始”→“程序”→IAR Systems→IAR Embedded Workbench For MSP430 V3,自动创建一个新的工作站。

2.创建并保存工程

单击并选项中Creat new project in new workbench,选择工程类型和保存路径,同时输入文件名,单击“保存”按钮。

3.创建或加载源文件

(1)创建源程序。单击File→New→File或按快捷键Ctrl+N出现所需要的源程序编辑界面,编辑过程要注意标点应为英文。

(2)加载源文件。单击菜单Project→Add file test出现需要的加载源文件界面,选择相应的文件类型,出现相应的文件,选中需要加载的文件后,单击“打开”按钮。源文件加载完成后,在工程test下出现430P1.s43和Output子目录。

4.保存工作贴

单击File→Save Workspace,输入文件名Test Workspace,单击“保存”按钮。保存工作站工作完成。

5编译环境设置

(1)目标芯片设置,即选择需要调试的单片机型号。

(2)仿真方式设置,设置软件模拟仿真或FET在线仿真调试。

(3)仿真器借口类型设置,设置并口FET,连接到单片机的JTAG接口。

6.工程编译和链接、调试

(1)工程编译和修改源程序,在左侧工程管理中选中源文件430P1.S43,双击鼠标左键,进入源程序编辑状态。

(2)连接生成目标代码,源文件编译通过之后,将连接生成目标代码。通过单击Project-Make。

(3)调试,在的程序通过了连接,生成目标代码之后。通过单击Project-Debugger 进入调试集成环境。

分析:在调试的过程中,我们也遇到了很多的困难,比如:数码管不显示或者显示不全,对当地有效时间不能进行调整等等,这时候就需要我们对我们的硬件和软件进行再一次深入的研究。硬件方面我们需要对我们的板子进行整体的检查,看那些焊点是否完好,芯片有没有接触不良,软件方面就要对我们设计的程序再一次的编译,检查出一些细小的缺陷。经过多次的调试,这次的数字时钟设计终于调试成功。因考虑到制作费用和周期,编写的程序在与设计功能相同的电路板上完成验证。

调试结果见图5.1和5.2

图5.1 调试结果显示图

图5.2 时间显示图

第六章结论

经过几个月的努力,我终于完成了这次的毕业设计《基于MSP430单片机的实时时钟显示设计(数码管显示)》。从接受到这个课题到逐步的完成,每一步的完成对我来说都有着新的体会。

在大学期间,这是给我的最大的一个挑战。从拿到这个题目开始,到收集这方面的资料,一步一步的逐步完善自己的方案设计,在这个过程中可以说自己收获了很多,同时也发现了自身知识的不足,我们必须具备一定的专业基础知识,才能成功的设计出一件合格的东西。当然最重要的是学到了关于基本MSP430的一些基本应用,同时也加深了对一些常用数字时钟的了解及设计方法。但是其中遇到的问题也不少,因为我们之前学的都是51单片机,现在着手做MSP430的芯片,这是一个很有难度和挑战性的设计,所以很多的内容都是需要自己去自学的,比如有些MSP430的芯片和引脚问题不懂的时候就可以试着去参考51单片机的,两者相比较一下,一些问题就能迎刃而解,这也是一种很好的学习方法。

通过这一阶段的毕业设计,我受益匪浅,不仅锻炼了良好的逻辑思维能力,而且培养了弃而不舍的求学精神和严谨作风。回顾此次毕业设计,是大学三年所学知识很好的总结。

数码管显示程序注释

/***************************************************** (本程序基于本人单片机实际电路开发,只需改动个别地方,即可实现) 数码管显示其实就是利用视觉停留来显示 实际上它是一个接着一个亮,但人以为是一起亮的 当然它也可以全部一起亮(不同数字)但物理连接麻烦得多,成本高,所以一般不采用(个人理解) ***************************************************/ #include #define unint unsigned int #define unchar unsigned char /***************************************************** 位声明 ***************************************************/ sbit guan1=P2^4; //位选:第1个数码管io sbit guan2=P2^5; //位选:第2个数码管io sbit guan3=P2^6; //位选:第3个数码管io sbit guan4=P2^7; //位选:第4个数码管io unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管编码 /***************************************************** 函数功能:延时 ***************************************************/ void delay(unsigned int i) { unsigned char j; for(;i>0;i--) for(j=110;j>0;j--); } void display(unint num)//带参数显示函数 { unchar ge,shi,bai,qian,sh,fe; //存储个,十,百,千位的空间 sh=num/100; //将num数的前两位分离并存储在sh fe=num%100;//将num数的后两位分离并存储在fe guan1=0;//P2=0Xbf;//11101111 第一个数码管亮位选开 qian=sh/10; //分离千位 P0=table[qian];//段选 delay(60); //延时 guan1=1; //位选关 guan2=0;//P2=0X7f;//11011111 bai=sh%10; //分离百位 P0=table[bai]; //段选

6位7段LED数码管显示

目录 1. 设计目的与要求..................................................... - 1 - 1.1 设计目的...................................................... - 1 - 1.2 设计环境...................................................... - 1 - 1.3 设计要求...................................................... - 1 - 2. 设计的方案与基本原理............................................... - 2 - 2.1 6 位 8 段数码管工作原理....................................... - 2 - 2.2 实验箱上 SPCE061A控制 6 位 8 段数码管的显示................... - 3 - 2.3 动态显示原理.................................................. - 4 - 2.4 unSP IDE2.0.0 简介............................................ - 6 - 2.5 系统硬件连接.................................................. - 7 - 3. 程序设计........................................................... - 8 - 3.1主程序......................................................... - 8 - 3.2 中断服务程序.................................................. - 9 - 4.调试............................................................... - 12 - 4.1 实验步骤..................................................... - 12 - 4.2 调试结果..................................................... - 12 - 5.总结............................................................... - 14 - 6.参考资料........................................................... - 15 - 附录设计程序汇总.................................................... - 16 -

数码管显示程序(汇编语言)

实验三数码显示 一、实验目的 了解LED数码管动态显示的工作原理及编程方法。 二、实验内容 编制程序,使数码管显示“DJ--88”字样。 三、实验程序框图 四、实验步骤 联机模式: (1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM

文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。 (2)数码管显示“DJ--88”字样。 脱机模式: 1、在P.态下,按SCAL键,输入2DF0,按EXEC键。 2、数码管显示“DJ--88”字样。 五、实验程序清单 CODE SEGMENT ;S6.ASM display "DJ--88" ASSUME CS:CODE ORG 2DF0H START: JMP START0 PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H START0: CALL BUF1 CON1: CALL DISP JMP CON1 DISP: MOV AL,0FFH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB

51单片机并行口驱动LED数码管显示电路及程序

51单片机并行口驱动LED数码管显示电路及程序 介绍利用51单片机的一个并行口实现多个LED数码管显示的方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用51汇编语言编写程序。 1 硬件电路 多位LED显示时,常将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由另一个8位I/O口控制;也可采用并行扩展口构成显示电路,通常,需要扩展器件管脚的较多,价格较高。本文将介绍一种利用单片机的一个并行I/O口实现多个LED显示的简单方法,图1所示是该电路的硬件原理图。其中,74LS138是3线-8线译码器,74LS164是8位并行输出门控串行输入移位寄存器,LED采用L05F型共阴极数码管。 显示时,其显示数据以串行方式从89C52的P12口输出送往移位寄存器74LS164的A、B 端,然后将变成的并行数据从输出端Q0~Q7输出,以控制开关管WT1~WT8的集电极,然后再将输出的LED段选码同时送往数码管LED1~LED8。位选码由89C52的P14~P16口输出并经译码器74LS138送往开关管Y1~Y8的基极,以对数码管LED1~LED8进行位选控制,这样,8个数码管便以100ms的时间间隔轮流显示。由于人眼的残留效应,这8个数码管看上去几乎是同时显示。

<51单片机并行口驱动LED数码管显示电路> 2 软件编程 该系统的软件编程采用MCS-51系列单片机汇编语言完成,并把显示程序作为一个子程序,从而使主程序对其进行方便的调用。图2所示是其流程图。具体的程序代码如下:

<51单片机并行口驱动LED数码管显示程序>

单片机实验——数码管显示

单片机实验——数码管显示

数码管显示 一、数码管静态显示 1、电路图 图1 2、电路分析 该电路采用串行口工作方式进行串行显示实验,串行传输数据为8位,只能从RXD端输

入输出,TXD端用于输出同步移位脉冲。当CPU 执行一条写入发送缓冲器SBUF的指令时,产生一个正脉冲,串行口开始将发送缓冲器SBUF 中的8位数据按照从低位到高位依次发送出去,8位数据发送完毕,发送结束标志TI置1,必须由软件对它清0后才能启动发送下一帧数据。 因此,当输完8个脉冲后,再一次来8个脉冲时,第一帧的8位数据就移到了与之相连的第二个74LS164中,其他数据依此类推。 3、流程图

发送数据 二、数码管动态显示 1、电路图

图2 2、电路分析 R1-R7电阻值计算:一个7-seg 数码管内部由8段LED 组成,因此导通电压和电流与LED 灯相同,LED 导通压降大概在 1.5V-2.2V ,电流3mA-30mA ,单片机的工作电压是5V , 所以 一般取Rmin 和Rmax 中间值,330Ω、470Ω、510Ω。 由于P0口内部没有上拉电阻,所以在P0 口接1003025Im min 1325Im max =-===-==mA V V an U R K mA V V in U R

排阻,上拉电压。如果没有排阻的话,接上拉电阻时需要考虑数码管的电流,如果太小的话,是驱动不了数码管的。如图3: 发现电流大于5mA时,数码管才能亮,与前面电流最小3mA不符,因此计算数码管电流时使其在10mA-20mA之间,确保能驱动数码管亮。 两个74HC573实现对六位数码管的段选和位选,控制端为LE(第11脚)。 3、思路分析 先使第一个573输出同步,把数据送入573中,然后锁存,第二个573输出同步,打开第一个数

51单片机(四位数码管的显示)程序[1]

51单片机(四位数码管的显示)程序 基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管 上显示P ”个字符;2)等待按键,如按了任何一个键,则将这 4个字符清除, 改为显示0000”个字符(为数字的0)。 E3最佳答案 下面这个程序是4x4距阵键盘丄ED 数码管显示,一共可以到0-F 显示,你可以稍微 改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你! #i nclude un sig ned char code Dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang 数码管 0-F 代码 void key_delay(void) { int t; for(t=0;t<500;t++); } un sig ned char k; //设置全局变量k 为键盘的键值 键盘延时函数 键盘扫描函数 ***************************** */ //延时函数

void keyscan(void) //键盘初始化 //有键按下? //延时 //确认真的有键按下? //使行线 P2.4 为低电平,其余行为高电平 //a 作为缓存 //开始执行行列扫描 { case 0xee:k=15;break; case 0xde:k=11;break; case 0xbe:k=7;break; case 0x7e:k=3;break; default:P2 = 0xfd; //使行线 P2.5 为低电平,其余行为高电平 a = P2; switch (a)//键盘扫描函数 { unsigned char a; P2 = 0xf0; if(P2!=0xf0) { key_delay(); if(P2!=0xf0) { P2 = 0xfe; key_delay(); a = P2; switch (a)

单片机数码管静态显示实验程序(汇编)

单片机数码管静态显示实验程序 org 00h num equ p0 ;p0口连接数码管 clr p2.0 ; mov dptr ,#tab clr a mov r2,#0 loop: movc a,@a+dptr mov num ,a acall delay_200ms inc r2 mov a,r2 cjne r2,#15, loop mov r2,#0 clr a ajmp loop tab : DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH delay_200ms: mov r3,#20 delay: acall delay_10ms djnz r3,delay ret ;;;;;;;;;;;;;;;; 非中断精确1MS定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; delay_1ms: MOV R7 ,#249 signed: ;循环部分4机器周期 nop nop djnz R7 ,signed ret ;返回指令2机器周期 ;2+249*4+2=1000us 可以精确定时1MS,假设外部晶振是12M

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 非中断精确10MS定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov r6,#9 ;2个机器周期用2us delay_10ms_sined: ;9次循环共用9(1ms+4us)=9036us acall delay_1ms djnz r6,delay_10ms_sined MOV r6 ,#240 ;2个机器中期用2us signed_10ms : ;循环部分4机器周期共240次 nop nop djnz r6 ,signed_10ms ret ;返回指令要2us ;2us+9036us+240*4us+2us = 10ms 即可精确定时10ms ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 非中断精确定时1s ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; delay_1s: mov r5,#99 ;两个机器周期2us delay_1s_signed: ;循环指令周期为4us,加上延时10ms ;(10ms+4us)*99 = 990.396ms acall delay_10ms djnz r5,delay_1s_signed mov r5 ,#9 ;两个机器周期2us signed_1s: ;循环指令周期为4us,加上延时1ms ;(1ms+4us)*9 = 9ms+36us acall delay_1ms djnz r5 ,signed_1s mov r5 ,# 140 ;机器周期2us signed_1s_: ;一次循环4us共有140次。140us*4 = 560us nop nop djnz r5,signed_1s_ ret ;2us ;2us+990ms+396us+2us+9ms+36us+2us+560us+2us = 999ms+1000us = 1s end

数码管显示程序

数码管显示程序 一、程序X1 1、程序X1的功能:最右边的数码管显示“0” 2、程序: ORG 0 LJMP STR ORG 0100H STR: MOV P3, #0FEH ;送最低位有效的位码 MOV P0, #0C0H ;送“0”的段码“0C0H” SJMP STR END 二、程序X2: 用查表方式显示某个显示缓冲器中的数字 1、查表显示的预备知识 设从右到左各显示器对应的显示缓冲器为片内RAM79H~7EH

3、 实例: 例:已知(79H )= 0 7H , 查段码表在最右边的数码管显示79H 中的 “7”; 注:共阳极的段码表: TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH 若:(A )= 0XH 则数字“X ”对应的段码在段码表中的表地址 = TAB + X ORG 0 LJMP STR ORG 0100H ① 各显示器与显示缓冲器地址对应关系 显示缓冲器: 7EH 7DH 7CH 7BH 7AH 79H 对应显示 器: ② 显示缓冲器的值与显示数字的关系: 显示缓冲器中的值 对应段码表地址 显示的数字 0XH 表首址+OXH X

STR: MOV P3, #11111110B ;送最低位有效的位码 MOV 79H , #07H ;送要显示的数据到显示缓冲器 MOV A , 79H ;显示缓冲器的数作为查表变址送A MOV DPTR , #TAB ;表首址送DPTR MOVC A , @A+ DPTR ;查表将数字转换为对应段码MOV P0, A ; 段码送段码口(P0) SJMP STR TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH END 例2:. 查段码表在最右边的数码管循环显示“0”~“F” ORG 0 LJMP STR ORG 0100H STR: MOV P3, #11111110B ;送最低位有效的位码 LP0: MOV 79H , #0H ;送要显示的数据的初值到显示缓冲器MOV R3 , #6 ; 送要显示的数据的个数 LP: MOV A , 79H ;显示缓冲器的数作为查表变址送A MOV DPTR , #TAB ;表首址送DPTR MOVC A , @A+ DPTR ;查表将数字转换为对应段码MOV P0, A ; 段码送段码口(P0)

单片机实验四 I O显示控制实验(数码管显示实验)

电子信息工程学系实验报告 课程名称:单片微型计算机与接口技术Array 实验项目名称:实验四 I/O显示控制实验实验时间: 班级: **** 姓名:**** 学号:******** 一、实验目的: 1、熟悉keil仿真软件、proteus仿真软件、软件仿真板的使用。 2、了解并熟悉一位数码管与多位LED数码管的电路结构、与单片机的连接方法及其应用原理。 3、学习proteus构建LED数码管显示电路的方法,掌握C51中单片机控制LED数码管动态显示的原理与编程方法。 二、实验环境: 1、Windows XP系统; 2、Keil uVision2、proteus系列仿真调试软件 三、实验原理: 1、LED数码管的结构和原理 LED显示器是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七段LED,这种显示器有共阴极与共阳极两种。 (a)共阴极LED显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发光二极管则点亮; (b)共阳极LED显示器的发光二极管阳极并接。 2、七段显示器与单片机接口:只要将一个8位并行输出口与显示器的发光二极管引脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,如下表所示。通常将控制发光二极管的8位字节数据称为段选码。 八段选码(显示码)的推导(以共阳数码管显示C为例): 要显示C则a、f、e、d四个灯亮2.为是共阳数码管,则a、f、e、d应送0时亮3.dp-a为11000110B 3、多位数码管的显示:电路结构、动态静态两种实现原理: LED显示器有静态显示与动态显示两种方式。 (1) LED静态显示方式 各位LED的位选线连在一起接地或接+5V;每位LED的段选线(a-dp)各与一个八位并行口相连; 在同一时间里每一位显示的字符可以各不相同。

基于51单片机的LED数码管动态显示

基于51单片机的LED数码管动态显示 LED数码管动态显示就是一位一位地轮流点亮各位数码管,对于每一位LED数码管来说,每隔一段时间点亮一次,利用人眼的“视觉暂留"效应,采用循环扫描的方式,分时轮流选通各数码管的公共端,使数码管轮流导通显示。当扫描速度达到一定程度时,人眼就分辨不出来了。尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,认为各数码管是同时发光的。若数码管的位数不大于8位时,只需两个8位I/O口。 1 硬件设计 利用51单片机的P0口输出段码,P2口输出位码,其电路原理图如下所示。 在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“DT.DSN”。在器件选择按钮中单击

“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。 51单片机AT89C51 一片 晶体CRYSTAL 12MHz 一只 瓷片电容CAP 22pF 二只 电解电容CAP-ELEC 10uF 一只 电阻RES 10K 一只 电阻RES 4.7K 四只 双列电阻网络Rx8 300R(Ω) 一只 四位七段数码管7SEG-MPX4-CA 一只 三极管PNP 四只 若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1的31脚,都可以不画,它们都是默认的。 在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER 和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。 2 软件设计 LED数码管动态显示是一位一位地轮流点亮各位数码管的,因此要考虑每一位点亮的保持时间和间隔时间。保持时间太短,则发光太弱而人眼无法看清;时间太长,则间隔时间也将太长(假设N位,则间隔时间=保持时间X(N-1)),使人眼看到的数字闪烁。在程序中要合理的选择合适的保持时间和间隔时间。而循环次数则正比于显示的变化速度。 LED数码管动态显示的流程如下所示。

单片机课设-数码管显示滚动控制

《单片机设计与实训》 设计报告 题目:数码管滚动显示控制 姓名:王伟杰 班级:自动化四班 学号: 2014550430 指导老师:莹 提交日期: 2016年10月29日

目录 一、设计题目与要求 (3) 1.1设计题目 (3) 1.2设计要求 (3) 二、系统方案设计 (3) 2.1硬件电路设计 (3) 1.单片机最小系统简介 (3) 2.数码管显示电路 (6) 2.3硬件选型及说明 (6) 1. ST89C51单片机 (6) 2. 四位一体七段共阴极显示数码管 (8) 三、系统原理图设计与仿真 (9) 3.1系统仿真图 (9) 3.2系统仿真结果 (10) 四、程序设计 (11) 4.1程序设计 (11) 4.2程序流程图 (12) 五、系统调试 (14) 5.1系统硬件调试 (14) 5.2系统软件调试 (14) 六、总结与体会 (14) 附录一 (16) 附录二 (17) 附录三 (27)

一、设计题目与要求 单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机部资源的使用。单片机课程设计容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机部资源及外部IO口的功能扩展,使制作的单片机系统具有一定的功能。 1.1设计题目 数码管滚动显示控制 1.2设计要求 自制一个单片机最小系统,包括串口下载、复位电路,采用两个四位一体数码管作为显示器件,通过按钮选择实现四种滚动显示模式,例如从左至右,从右至左,缩,外扩等,滚动信息可以是数字或有意义的英文字符。 二、系统方案设计 2.1硬件电路设计 本设计的硬件电路主要包括的模块有:单片机最小系统、七段数码管显示模块、 1.单片机最小系统简介 单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。结构图如下:

实验四 数码管静态显示

实验四数码管静态显示 一、实验目的 1.熟练掌握单片机定时器的原理和应用方法。 2.了解数码管的原理,掌握数码管的真值表的计算方法。 二、实验内容 通过对单片机编程来实现数码管静态显示。 三、实验知识点 3.1定时器的初步认识 时钟周期:时钟周期T是时序中最小的时间单位具体计算的方法就是1/时钟源,我们KST-51单片机开发板上用的晶振是11.0592M,那么对于我们这个单片机系统来说,时钟周期=1/11059200秒。 机器周期:我们的单片机完成一个操作的最短时间。机器周期主要针对汇编语言而言,在汇编语言下程序的每一条语句执行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算出来的,而C语言一条语句的时间是不可计算的。51单片机系列,在其标准架构下一个机器周期是12个时钟周期,也就是12/11059200秒。 定时器和计数器。定时器和计数器是单片机内部的同一个模块,通过配置SFR(特殊功能寄存器)可以实现两种不同的功能。 顾名思义,定时器就是用来进行定时的。定时器内部有一个寄存器,我们让它开始计数后,这个寄存器的值每经过一个机器周期就会加1一次,因此,我们可以把机器周期理解为定时器的计数周期。我们的秒表,每经过一秒,数字加1,而这个定时器就是每过一个机器周期的时间,也就是12/11059200秒,数字加1。 3.2 定时器的寄存器描述 标准的51里边只有定时器0和定时器1这两个定时器,现在很多单片机也有多个定时器的,在这里我们先讲定时器0和1。那么我前边提到过,对于单片机的每一个功能模块,都是由他的SFR,也就是特殊功能寄存器来控制。而和定时器有关的特殊功能寄存器,有TCON和TMOD,定时值存储寄存器。 a)定时值存储寄存器 表4-1中的寄存器,是存储计数器的计数值的,TH0/TL0用于T0, TH1/TL1用于 T1。 表4-1 定时值存储寄存器 表4-2 TCON--定时器/计数器控制寄存器的位分配(地址:88H) 表4-3 TCON--定时器/计数器控制寄存器的位描述

四位数码管的显示程序

大家可以参考下: 我也没调试过大家有问题可以给我留言我的邮箱zhangyi061322@https://www.360docs.net/doc/981550219.html, 基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。 最佳答案 下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你! #include unsigned char code Dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码 unsigned char k; //设置全局变量k 为键盘的键值 /************************************键盘延时函数****************************/ void key_delay(void) //延时函数 { int t; for(t=0;t<500;t++); } /************************************键盘扫描函数******************************/ void keyscan(void) //键盘扫描函数 { unsigned char a; P2 = 0xf0; //键盘初始化 if(P2!=0xf0) //有键按下? { key_delay(); //延时 if(P2!=0xf0) //确认真的有键按下? { P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平 key_delay(); a = P2; //a作为缓存 switch (a) //开始执行行列扫描 { case 0xee:k=15;break; case 0xde:k=11;break; case 0xbe:k=7;break; case 0x7e:k=3;break; default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平

数码管动态显示实验报告

实验四数码管动态显示实验一 一、实验要求 1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2.在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输出口与7段数码 管数据引脚相连,P2.0~P2.3引脚输出选控制信号 3.在Keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4 二、实验目的 1.巩固Proteus软件和Keil软件的使用方法 2.学习端口输入输出的高级应用 3.掌握7段数码管的连接方式和动态显示法 4.掌握查表程序和延时等子程序的设计 三.实验说明 本实验是将单片机的P1口做为输出口,将四个数码管的七段引脚分别接到P1.0至P1.7。由于电路中采用共阳极的数码管,所以当P1端口相应的引脚为0时,对应的数码管段点亮。程序中预设了数字0-9的段码。由于是让四个数码管显示不同的数值,所以要用扫描的方式来实现。因此定义了scan函数,接到单片机的p2.0至p2.3 在实验中,预设的数字段码表存放在数组TAB中,由于段码表是固定的,因此存储类型可设为code。 在Proteus软件中按照要求画出电路,再利用Keil软件按需要实现的功能编写c程序,生成Hex文件,把Hex文件导到Proteus软件中进行仿真。为了能够更好的验证实验要求,在编写程序时需要延时0.5s,能让人眼更好的分辨;89C51的一个机器周期包含12个时钟脉冲,而我们采用的是12MHz晶振,每一个时钟脉冲的时间是1/12us,所以一个机器周期为1us。在keil程序中,子函数的实现是用void delay_ms(int x),其中x为1时是代表1ms。 四、硬件原理图及程序设计 (一)硬件原理图设计 电路中P1.0到P1.7为数码管七段端口的控制口,排阻RP1阻值为220Ω,p2.0到p2.3为数码管的扫描信号。AT89c51单片机的9脚(RST)为复位引脚,当RST为高电平的时间达到2个机器周期时系统就会被复位;31引脚(EA)为存取外部存储器使能引脚,当EA为高电平是使用单片机内部存储器,当EA为低电平时单片机则使用外部存储器。18、19引脚是接晶振脚。而接地和电源端在软件中已经接好,所以不用在引线。 如下图所示:

51单片机数码管显示电子时钟C程序

#include #define LEDLen 6 ; #define tick10000; #define T100us=(256-100); unsigned char hour,minute,second; unsigned int c100us; xdata unsigned char OUTBIT_at_0x8002; xdata unsigned char OUTSEG_at_0x8004; unsigned char LEDBuf[6]; code unsigned char LEDMAP[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 }; void DisplayLED() { unsigned char i,j,pos,LED; pos = 0x20 ; for( i=0;i<6;i++ ) { OUTBIT =0; LED=LEDBuf[i]; OUTSEG =LED; OUTBIT = pos; Delay(1); pos>>=1; } } void main() { TMOD=0x02; TH0=T100us; TL0=T100us; EA=1,IT0=1; hour=0; minute=0 second=0; c100us=tick; TR0=1; while(1) { LEDBuf[0]=LEDMAP[hour/10] ; LEDBuf[1]=LEDMAP[hour%10] ;

LEDBuf[2]=LEDMAP[minute/10]; LEDBuf[3]=LEDMAP[minute%10]; LEDBuf[4]=LEDMAP[second/10]; LEDBuf[5]=LEDMAP[second%10]; DISplayLED(); } } void T0_interrupt1 { c100us--; if(c100us==0) { c100us=tick; second++; if(second==60) { second=0; minute++; if(minute==60) { minute==0; hour++; if(hour==24)hour==0; } } } }

基于单片机的电子时钟6位LED数码管显示

数码管显示电子时钟设计 一.功能要求 1.数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时 间时、分、秒。 2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。 二.方案论证 1.数字时钟方案 数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。 方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。 方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。 基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。 2.数码管显示方案 方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,

数码管动态显示的51单片机时钟设计

一看就会,适合初学者参考 T0,T1同时开中断,和别人的有点不一样 源程序如下 //数码管设计的可调电子钟 //K1,K2分别调整小时和分钟 #include<> #include<> #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99, //共阳段码 0x92,0x82,0xF8,0x80,0x90,0xFF}; uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xBF,0,0}; //显示缓存uchar Scan_BIT; //扫描位,选择要显示的数码管 uchar DSY_IDX; //显示缓存索引 uchar Key_State; //P1端口按键状态 uchar h,m,s,s100; //十分秒,1/100s void DelayMS(uchar x) //延时 { uchar i; while(x--) for(i=0;i<120;i++); } void Increase_Hour() //小时处理函数 { if(++h>23)h=0; DSY_BUFFER[0]=DSY_CODE[h/10]; DSY_BUFFER[1]=DSY_CODE[h%10]; } void Increase_Minute()//分钟处理函数 { if(++m>59) { m=0;Increase_Hour(); } DSY_BUFFER[3]=DSY_CODE[m/10]; DSY_BUFFER[4]=DSY_CODE[m%10]; }

单片机数码管静态显示实验

实验五串行口静态显示 一.实验目的 1.学习用单片机的串行口扩展74LS164 实现静态显示方法。 2.学习用单片机I/O 口模拟串口工作实现静态显示的编程方法。 3.掌握静态显示的编程方法和数码管显示技术。 二.实验任务 1.根据共阳数码管的功能结构,自编一组0~F 的笔形码,并按顺序存放建立程序数据表格。 2.利用单片机串行口扩展74LS164,完成串--并转换输出,实现静态显示:要求循环显示0~F 这数字,即输出数字“0”时,四位同时显示0,显示1 秒后再输出数字“1”,即四位同时显示1, 依次类推,相当于数字自检循环显示。 3.利用单片机串行口(RXD、TXD)编写静态显示程序,在数码显示器上30H、31H 单元的内 容,30H、31H 单元为任意的十六进制数。 4.用P1.6、P1.7 分别替代RXD、TXD 做模拟串口完成任务3 的静态显示程序。 三.实验电路 静态显示实验电路 连线方法:静态显示只要连接2 根线:单片机的RXD 与DAT 节点连接,TXD 与CLK 接点连 接,要把电源短路片插上。PW11 是电源端。 四.实验原理说明 1.静态显示实际上动态的过程,静态的显示,单片机串行口输出的数据通过74LS164 串并转换 输出,每输出一个数据,把原先的的数据推挤到下一个显示位上显示。实验时,单片机串行口应工作在方式0,RXD(P3.0)输出串行数据,TXD(P3.1)输出移位时钟,在移位时钟的作用下,串行口发送缓冲器的数据一位一位地从RXD 移入到74LS164 中,并把后面送入的数据推挤原先的数据到下一个级联的 74LS164 中输出,每输出一个数据可以延时1ms。实验时,通过改变延时时间,可以更清楚地观察到数据推挤的过程。 2.串行口工作在方式0 时,串行传输数据为8 位,只能从RXD 端输入输出。TXD 端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12,由软件置位串行控制寄存器SCON 的REN位才能启动串行接收。在CPU 将数据写入SBUF 寄存器后,立即启动发送,第8 位数据输送完后,硬件将SCON 寄存器的TI 位置1,必须由软件对它清0 才能启动发送下一帧数据。 3.静态显示笔型码: 笔形码:0 1 2 3 4 5 6 7 8 9 A B C D E F 11H,D7H,98H,92H,56H,32H,30H,97H,10H,12H,14H,70H,39H,D0H,38H,3CH 五.程序流程图和资源分配

用单片机实现1位LED数码管显示0-9

单片机课程设计 题目1位LED数码管显示0-9 姓名陈益明 学号 班级 09电力 指导老师许丽汪厚新 目录 一:实验目的与任务…………………二:实验要求…………………………三:实验内容…………………………... 四:实验器材…………………………五:关于PLC控制LED介绍………. 六:原理图绘制说明…………………

七:流程图绘制以及说明……………八:电路原理图与仿真………………九:源程序……………………………十:心得体会………………………… 十一:参考文献……………………… 一、实验与任务 结合实际情况,编程设计、布线、程序调试、检查与运行,完成一个与接近实际工程项目的课题,以培养学生的实际操作能力,适应生产一线工作的需要。做到能检查出错误,熟练解决问题;对设备进行全面维修。 通过实训对PLC的组成、工作原理、现场调试以及基于网络化工作模式的基本配置与应用等有一个一系列的认识和提高。 利用51单片机、1个独立按键及1位7段数码管等器件,设计一个单片机输入显示系统,要求每按一下独立按键数码管显示数据加1(数码管初始值设为0,计到9后再加1 ,则数码管显示0)。 本次设计采用12MHz的晶体振荡器为单片机提供振荡周期,外加独立按键,复位电路和显示电路组成。 二、实验要求 1掌握可编程序控制器技术应用过程中的一些基本技能。 2、巩固、加深已学的理论知识。 3了解可编程控制器的装备、调试的全过程。

4、培养我们综合运用所学的理论知识和基本技能的能力,尤其是培养我们 把理论和实际结合起来分析和解决问题的能力。适应世界生产的需要。 培养出一批既有理论知识又有动手能力的人才。 三、实验内容 1、练习设计、连接、调试控制电路; 2、学习PLC程序编程; 四、元器件清单 五、关于PLC控制LED介绍: PLC可编程控制器:它采用一类可编程的存储器,用于其内部存储程序、执行逻辑运算、顺序控制、定时、计数与算数操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程。 用PLC控制LED直接进行数据显示,可以降低成本,使得数据显示直观。 传统数显有两种方法:1、由PLC编制程序进行译码,来控制显示a-g段;2、利用译码组合电路产生a-g各段译码信号实现LED数码管显示。前一种方法逻辑译码关系复杂,后一种方法译码电路冗长,都不利于显示的实现。传统数显逻辑译码关系复杂,而用PLC的位组合元件和译码功能指令方法来实现

相关文档
最新文档