单片机控制数码管 数码管与按键控制 要求如下 非常急 20分钟过时不候

各位大神,51单片机中用数码管做秒表时怎么用一个独立按键控制开始和暂停,即第一次按下计时,在按下时_百度知道
各位大神,51单片机中用数码管做秒表时怎么用一个独立按键控制开始和暂停,即第一次按下计时,在按下时
各位大神,51单片机中用数码管做秒表时怎么用一个独立按键控制开始和暂停,即第一次按下计时,在按下时暂停。
我有更好的答案
其实,控制秒表的启动和停止,很简单。要做秒表,一定要用定时器吧,假如用T0,那开始初始化时,不写TR0=1,先不启动。当按一下键,再启动,TR0=1,就开始计时了。再 按一下键,就停止,TR0=0,就不计时了。程序好写,先 定义一个按键sbit
//具体是哪个 键,你自己改主程序中,判断按键和启动/停止if(key==0){delay(); //具体延时时间自己定if(key==0){TR0=!TR0;
//每按一次,取反 一次while(key==0);}}
采纳率:92%
来自团队:
就是定义一个变量,当第一次按下键时,变量加一,然后开始计数,再次按键时,计时暂停嘛?如果是这样,那if语句里应该怎么写?
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码管初始值为0,9加1 后显示0)。_百度知道
设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码管初始值为0,9加1 后显示0)。
利用51单片机、1个按键及1个数码管等器件,求程序和图,
谢谢,这是poteus课设。
我有更好的答案
#include & reg52.h & &
// 嵌入51单片机头文件#define uchar unsigned char
// 宏定义,用uchar替代无符号字符型#define uint &unsigned int
// 宏定义,用uint 替代无符号整数型sbit Key = P2 ^ 7;uchar Count = 0;&uchar code DataChar[10] =
// 定义数码管的段码 '0'~'9'、'-'、' ' 'P'{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};//延时N毫秒void DelayNms( uint N )
// 利用x、y作简单的自减运算,消耗单片机指令周期,达到延时的目的{ uint x,y; for( x=N; x&0; x-- )
for( y=110; y&0; y-- ); }//数码管显示
// 显示方式为动态扫描,视觉暂留原理void Display( uchar Num )
// *p指向Main函数中的数组ShowNum的首地址{ P0 = DataChar[ Num ]; // 向P0赋段码值 DelayNms(2);
// 短暂的延时 P0 = 0x00;
// 让数码管熄灭,否则会造成数字重叠}void main( void ){
while(1) {
if( Key == 0 )
DelayNms(30);
if( Key == 0 )
Count += 1;
Count = (Count&9)? 0 : C
while( !Key );
Display( Count );
采纳率:72%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。4个数码管单片机控制_中华文本库
51单片机(四位数码管的显示)程序 - 单片机(四位数码管的显示) 51 单片机(四位数码管的显示)程序 基于单片机 V1 或 V2 实验系统,编写一个程序,实现以下功能:...
I/O 接口四个组成部分集成在一个硅片内,于是就出现了一个以大规模集成 电路...-1- 单片机控制数码管显示的设计与实现 【Key words】LEDComputer...
AT89S51 单片机实验及实践教程 33. 33. 1. 实验任务 4×4 键盘及 8 位数码管显示构成的电子密码锁 用 4×4 组成 0-9 数字键及确认键。 用 8 位数码...
51单片机C编程(74HC595控制四位数码管)_电子/电路_工程科技_专业资料。[转] 51 单片机 C 编程(74HC595 控制四位数码管)
阅读(0)下一篇:51 单...
单片机(四位数码管的显示) 51 单片机(四位数码管的显示)程序 基于单片机 V1 或 V2 实验系统,编写一个程序,实现以下功能:1)首先在数码管 上显示“P_ _ _”...
实验四 I/O 显示控制实验 班级: *** 姓名:*** 实验时间:
指导...2、了解并熟悉一位数码管与多位 LED 数码管的电路结构、与单片机的连接方法...
51单片机四位一体共阳数码管程序 - 1. 四位一体数码管的第一个数码管显示 8 #include&reg52.h& sbit dula=P2^6; sbit wela=P2^7; void m...
单片机代码四位数码管动态显示_IT/计算机_专业资料。单片机代码四位数码管动态显示...单片机控制数码管动态显... 2页 4下载券 单片机 数码管动态扫描显... 12页...
基于单片机(c语言控制的)一个4位数码管从左到右依次显示1234程序设计及proteus仿真图_计算机软件及应用_IT/计算机_专业资料。从左到右实现1234控制 ...
51单片机驱动4位数码管的实现方法_电子/电路_工程科技_专业资料。基于51单片机的基础应用,相当粗浅,不代表辽宁工业大学的水平,谢谢。但希望对辽工的单片机初学者有所...51单片机程序——按键控制单个数码管显示
> 51单片机程序——按键控制单个数码管显示
51单片机程序——按键控制单个数码管显示
#includeunsigned char code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};// 显示数值表0-9void main (void){
//主循环{ P1 = 0x01;
//打开数码管的位选P3 = 0switch(P3)
//P3口作为独立按键输入端,检测端口电平并做如下判断
{case 0xff:P0=table[0];
case 0xfe:P0=table[1];
case 0xfd:P0=table[2];
//0xfd=case 0xfb:P0=table[3];
//0xfb=case 0xf7:P0=table[4]; //0xf7=
//如果都没按下,直接跳出 } }}
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一《单片机的实时时钟设计(数码管显示)》》 www.wenku1.com
单片机的实时时钟设计(数码管显示)》日期:
苏州市职业大学毕 业 设 计 说 明 书毕业设计题目 基于 MSP430单片机的实时时钟设计系 部专业班级 08电气 1班姓 名学 号指导教师2011年 5月 29 日摘 要本文研究了基于数码管显示的数字时钟系统设计与实现。 该系统具有时间设 置及显示、 闹钟、 计时等功能, 系统以 MSP430单片机为核心, 主要进行基于 MSP430单片机的低功耗型数字时钟及其系统的研究。 系统带有数码管显示器, 配合按键 提供友好的用户界面, 操作简单, 该数字时钟能长期、 连续、 可靠、 稳定的工作; 同时还具有体积小、功耗低等特点,便于携带,使用方便。系统软件设计包括单 片机编程。单片机软件编程主要实现按键、数码管显示、时钟、计时、闹钟等模 块功能。在本设计中充分利用了单片机内部资源,涉及到了键盘控制、数码管显示、 中断系统、定时 /计数器、串口通信等。关键字:数字时钟; MSP430单片机;数码管AbstractThis 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, reliabl 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 致谢 .............................................................................................................................. 34第一章 绪论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系列单片机的中断源较多, 并且可以任意嵌套,使用时灵活方便。当 系统处于省电的备用状态时,用中断请求讲它唤醒只有 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 WorkbenchIAR 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单片 机的,两者相比较一下,一些问题就能迎刃而解,这也是一种很好的学习方法。 通过这一阶段的毕业设计,我受益匪浅,不仅锻炼了良好的逻辑思维能力, 而且培养了弃而不舍的求学精神和严谨作风。 回顾此次毕业设计, 是大学三年所 学知识很好的总结。参考文献[1]魏小龙 .MSP430系列单片机接口技术及系统设计实例 . 北京:北京航空航天大 学出版社, 2002.[2]涂时亮 . 单片机软件设计技术 . 重庆:科学文献出版社重庆分社, 1987 [3]张毅刚 . 单片机原理及应用 . 北京:高等教育出版社, 2004[4]胡大可 .MSP430系列 16位超低功耗单片机原理与应用 . 北京:北京航空航天 大学出版社, 2001.[5]胡大可 .MSP430系列单片机 C 语言程序设计开发 . 北京:北京航空航天大学出 版社, 2003.[6]李智奇 .MSP430系列超低功耗单片机原理与系统设计 . 西安:西安电子科技大 学出版社, 2008.[7]戴佳,戴卫恒 . msp430单片机 C 语言应用程序设计实例精讲 [M].北京:电子 工业出版社 ,2006.[8]卢晓轩,洪利,章扬 .MSP430单片机与 1-wire 器件的软件接口 . 青岛科技大 学学报, ) :268-271[9]余永权,李小青,陈林康 . 单片机应用系统的功率接口技术 . 北京:北京航空 航天大学出版社, 1992.[10]张齐,杜群贵 . 单片机应用系统设计技术 . 北京电子工业出版社 .2003 [11]陈光东 . 单片机微型计算机原理与接口技术 . 华中理工大学出版社 .1999 [12]曾日波 . 多功能数字电子钟系统的设计与实现 . 乐山师范学院学报 .) :23-27[13]刘迎春 . msp430单片机原理及应用教程 [M]. 北京 :清华大学出版社 ,附录一:系统原理图附录二:程序设计#include#include#include#define DS1302_SECOND 0x81 //时钟芯片的寄存器位置 , 存放时间#define DS1302_MINUTE 0x83#define DS1302_HOUR 0x85#define DS1302_WEEK 0x8b#define DS1302_DAY 0x87#define DS1302_MONTH 0x89#define DS1302_YEAR 0x8dunsigned char DateString[11],TimeString[9],week_value[2],TempBuffer[7]; //char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_char done,count,temp,flag,up_flag,down_//unsigned int temp_value=0,temp_max=0;temp_min=0; //温度值void DateToStr(void) //将时间年 , 月 , 日 , 星期数据转换成数码管显示字符串 , 放到数组里 DateString[]{ unsigned char Year,Month,Day,WYear=rtc_getyear();Month=rtc_getmon();Day=rtc_getdate();Week=rtc_getday();if(hide_year<2) //这里的 if,else 语句都是判断位闪烁 ,2就 不显示 , 输出字符串为 {DateString[0] = '2';DateString[1] = '0';DateString[2] = Year/10 + '0';DateString[3] = Year%10 + '0';else{DateString[0] = ' ';DateString[1] = ' ';DateString[2] = ' ';DateString[3] = ' ';}DateString[4] = '/';if(hide_month<2){DateString[5] = Month/10 + '0'; DateString[6] = Month%10 + '0'; }else{DateString[5] = ' ';DateString[6] = ' ';}DateString[7] = '/';if(hide_day<2){DateString[8] = Day/10 + '0'; DateString[9] = Day%10 + '0'; }else{DateString[8] = ' ';DateString[9] = ' ';if(hide_week<2){week_value[0] = Week%10 + '0'; //星期的数据另外放到 week_value[]数组里 , 跟年 , 月 , 日的分开存放 , 因为等一下要在最后显示}Else{week_value[0] = ' ';}week_value[1] = '\0';DateString[10] = '\0'; //字符串末尾加 '\0' ,判断结束字符}void TimeToStr(void) //将时 , 分 , 秒数据转换成数码管显示字符放到数组 TimeString[]; { unsigned char Hour,Minute,SHour=rtc_gethour();Minute=rtc_getmin();Second=rtc_getsec();if(hide_hour<2){TimeString[0] = Hour/10 + '0';TimeString[1] = Hour%10 + '0';}else{TimeString[0] = ' ';TimeString[1] = ' ';}TimeString[2] = ':';if(hide_min<2){TimeString[3] = Minute/10 + '0';TimeString[4] = Minute%10 + '0';}else{TimeString[3] = ' ';TimeString[4] = ' ';}TimeString[5] = ':';if(hide_sec<2){TimeString[6] = Second/10 + '0';TimeString[7] = Second%10 + '0';}else{TimeString[6] = ' ';TimeString[7] = ' ';}DateString[8] = '\0';}void show_time() //数码管显示程序{TimeToStr(); //时间数据转换数码管字符 DateToStr(); //日期数据转换液晶字符 LCD_Put Str(DateString,0); //显示日期LCD_PutStr(week_value,15); //显示星期LCD_PutStr(LCD_PutStr(TimeString,16); //显示时间}////////////////////////////////////////////////////////////////////////////void outkey() //跳出调整模式 , 返回默认显示{ unsigned char Sif (!(P1IN&BIT0)){count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year =0;Second=dataread(DS1302_SECOND);Datawrite(0x8e,0x00); //写入允许Datawrite(0x80,Second&0x7f);Datawrite(0x8E,0x80); //禁止写入done=0;//temp_max=0;sund=1;while(!(P1IN&BIT0));delay_nms(2);}}////////////////////////////////////////////////////////////////////////////////////////////////////////////void Upkey()//升序按键{if(!(P1IN&BIT1)){switch(count){case 1:temp=dataread(DS1302_SECOND); //读取秒数temp=temp+1; //秒数加 1up_flag=1; //数据调整后更新标志if((temp&0x7f)>0x59) //超过 59秒 , 清零temp=0;case 2:temp=dataread(DS1302_MINUTE); //读取分数 temp=temp+1; //分数加 1up_flag=1;if(temp>0x59) //超过 59分 , 清零temp=0;case 3:temp=dataread(DS1302_HOUR); //读取小时数 temp=temp+1; //小时数加 1up_flag=1;if(temp>0x23) //超过 23小时 , 清零temp=0;case 4:temp=dataread(DS1302_WEEK); //读取星期数 temp=temp+1; //星期数加 1up_flag=1;if(temp>0x7)temp=1;case 5:temp=dataread(DS1302_DAY); //读取日数 temp=temp+1; //日数加 1up_flag=1;if(temp>0x31)temp=1;case 6:temp=dataread(DS1302_MONTH); //读取月数 temp=temp+1; //月数加 1up_flag=1;if(temp>0x12)temp=1;case 7:temp=dataread(DS1302_YEAR); //读取年数 temp=temp+1; //年数加 1up_flag=1;if(temp>0x99)temp=0;default:}while(!(P1IN&BIT1));delay_nms(2);}}////////////////////////////////////////////////////////////////////////////////////////////////////////////void Downkey()//降序按键{if(!(P1IN&BIT2)){switch(count){case 1:temp=dataread(DS1302_SECOND); //读取秒数 temp=temp-1; //秒数减 1down_flag=1; //数据调整后更新标志 if((temp&0x7f)>0x59) //小于 0秒 , 返回 59秒temp=0x59;case 2:temp=dataread(DS1302_MINUTE); //读取分数 temp=temp-1; //分数减 1down_flag=1;if(temp>0x59)temp=0x59; //小于 0秒 , 返回 59秒case 3:temp=dataread(DS1302_HOUR); //读取小时数 temp=temp-1; //小时数减 1down_flag=1;if(temp==0x00)temp=0x23;case 4:temp=dataread(DS1302_WEEK); //读取星期数 temp=temp-1; //星期数减 1down_flag=1;if(temp==0x00)temp=0x07;case 5:temp=dataread(DS1302_DAY); //读取日数 temp=temp-1; //日数减 1down_flag=1;if(temp==0x00)temp=0x31;case 6:temp=dataread(DS1302_MONTH); //读取月数 temp=temp-1; //月数减 1down_flag=1;if(temp==0x00)temp=0x12;case 7:temp=dataread(DS1302_YEAR); //读取年数 temp=temp-1; //年数减 1down_flag=1;if(temp>0x99)temp=0x99;default:}while(!(P1IN&BIT2));delay_nms(2);}}void Setkey()//模式选择按键{if(!(P1IN&BIT3)){count=count+1; //Setkey按一次 ,count 就加 1done=1; //进入调整模式while(!(P1IN&BIT3));delay_nms(2);}}void keydone()//按键功能执行{ unsigned char Sif(flag==0) //关闭时钟 , 停止计时{ datawrite(0x8e,0x00); //写入允许temp=dataread(DS1302_SECOND);datawrite(0x80,temp|0x80);datawrite(0x8e,0x80); //禁止写入flag=1;}Setkey(); //扫描模式切换按键switch(count){case 1:do //count=2,调整秒{outkey(); //扫描跳出按钮Upkey(); //扫描加按钮Downkey(); //扫描减按钮if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据 {datawrite(0x8e,0x00); //写入允许datawrite(0x80,temp|0x80); //写入新的秒数datawrite(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_sec++; //位闪计数if(hide_sec>3)hide_sec=0;show_time(); //数码管显示数据 }while(count==2);case 2:do //count=3,调整分{hide_sec=0;Outkey();Upkey();Downkey();if(temp>0x60)temp=0;if(up_flag==1||down_flag==1){Datawrite(0x8e,0x00); //写入允许Datawrite(0x82,temp); //写入新的分数Datawrite(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_min++;if(hide_min>3)hide_min=0;show_time();}while(count==3);case 3:do //count=4,调整小时 {hide_min=0;Outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){datawrite(0x8e,0x00); //写入允许datawrite(0x84,temp); //写入新的小时数 datawrite(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_hour++;if(hide_hour>3)hide_hour=0;show_time();}while(count==4);case 4:do //count=5,调整星期 {hide_hour=0;Outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){datawrite(0x8e,0x00); //写入允许 datawrite(0x8a,temp); //写入新的星期数 datawrite(0x8e,0x80); //禁止写入 up_flag=0;down_flag=0;}hide_week++;if(hide_week>3)hide_week=0;show_time();}while(count==5);case 5:do //count=6,调整日 {hide_week=0;Outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){datawrite(0x8e,0x00); //写入允许 datawrite(0x86,temp); //写入新的日数 datawrite(0x8e,0x80); //禁止写入 up_flag=0;down_flag=0;}hide_day++;if(hide_day>3)hide_day=0;show_time();}while(count==6);case 6:do //count=7,调整月 {hide_day=0;Outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){datawrite(0x8e,0x00); //写入允许 datawrite(0x88,temp); //写入新的月数 datawrite(0x8e,0x80); //禁止写入 up_flag=0;down_flag=0;}hide_month++;if(hide_month>3)hide_month=0;show_time();}while(count==7);case 7:do //count=8,调整年 {hide_month=0;Outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){datawrite(0x8e,0x00); //写入允许datawrite(0x8c,temp); //写入新的年数datawrite(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_year++;if(hide_year>3)hide_year=0;show_time();}while(count==8);case 8: count=0;hide_year=0; //count8, 跳出调整模式 , 返回默认显示状态 Second=dataread(0x80);datawrite(0x8e,0x00); //写入允许datawrite(0x80,Second&0x7f);datawrite(0x8E,0x80); //禁止写入done=0; //temp_max=0;sund=1; //count=7,开启中断 , 标志位置 0并退出default:}}////////////////////////////////////////////////////////////////////////////voidrtcinit (){rtc_wp(0);rtc_stop(0);rtc_charger(1,1);}voidsysinit (){ WDTCTL = WDTPW + WDTHOLD; //关闭看门狗P4OUT = 0P4DIR = 0P5OUT = 0x0f;P5DIR = 0xf0;P6OUT = 0P6DIR = 0}void main (){Sysinit ();rtcinit ();LED_init(); //数码管初始化_EINT();while (1){while(done==1)keydone(); //进入调整模式while(done==0){temp=rtc_getsec();delay_nms(10);if(temp!=rtc_getsec())show_time(); //数码管显示数据 flag=0;Setkey(); //扫描各功能键}}}致谢三年的大学生活就快走入尾声, 我们的校园生活就要画上句号, 心中是无尽 的难舍与眷恋。从这里走出,对于我的人生来说,将是踏上一个新的征程,要把 所学的知识应用到实际工作中去。回首三年, 取得了些许成绩,生活中有快乐也有艰辛,感谢老师三年来对我 孜孜不倦的教诲, 对我成长的关心和爱护。 学友情深, 情同兄妹, 三年风风雨雨, 我们一起走过,充满着关爱, 给我留下了值得珍藏的最美好的回忆。 在我的十几 年求学历程里,离不开父母的鼓励和支持,时他们辛勤的劳作,无私的付出,为 我创造了良好的学习条件, 我才能顺利的完成学业, 感激他们一直以来对我的抚 养与培育。最后我要特别感谢 XXX 老师, 是他在我毕业的最后关头给了我巨大的帮助与 鼓励,使我能够顺利完成毕业设计。 XXX 老师认真负责的工作态度,严谨的治学 精神和深厚的理论水平都使我受益匪浅, 他无论在理论上还是在实践中, 都给了 我很大的帮助,使我得到不少的提高 , 这对于我以后的工作和学习都有巨大的帮 助,在此表示衷心的感谢。本文由(www.wenku1.com)首发,转载请保留网址和出处!
免费下载文档:}

我要回帖

更多关于 单片机控制3位数码管 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信