求助,AT89C51+DS1302+数码管显示原理 的时钟电路

& & code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};& & & & //共阴极数码管0&9unsigned char StrTab[8];& & & & //定义缓冲区unsigned char minute=19,hour=23,& & & & //定义并初始化为 12:30:00 & & void delay(unsigned int cnt){& & & & while(--cnt);} & & /******************************************************************//*& & & & & & & & & & & & & & & & 显示处理函数& & & & & & & & & & & & & & & & & & & *//******************************************************************/void Displaypro(void){ & & & & & & StrTab[0]=tab[hour/10];& & & & //显示小时& & & & StrTab[1]=tab[hour%10];& & & & StrTab[2]=0x40;& & & & //显示"-"& & & & StrTab[3]=tab[minute/10];& & & & //显示分钟 & & & & & & StrTab[4]=tab[minute%10];& & & & StrTab[5]=0x40;& & & & //显示"-"& & & & StrTab[6]=tab[second/10];& & & & //显示秒 & & & & & & StrTab[7]=tab[second%10];} & & main(){& & & & TMOD |=0x01;& & & & //定时器0& 10ms& inM& crystal& 用于计时& & & & TH0=0xd8;& & & & & //初值& & & & TL0=0xf0;& & & & ET0=1;& & & & TR0=1; & & & & & & TMOD |=0x10;& & & & //定时器1用于动态扫描& & & & TH1=0xF8;& & & & //初值& & & & TL1=0xf0;& & & & ET1=1;& & & & TR1=1;& & & & EA =1;& & & & Displaypro();& & & & //调用显示处理函数 & & & & & & while(1)& & & & {& & & & & & & & if(!KEY1)& & & & //按键1去抖以及动作& & & & & & & & {& & & & & & & & & & & & delay(10000);& & & & & & & & & & & & if(!KEY1)& & & & & & & & & & & & {& & & & & & & & & & & & & & & & & & & & & hour++; & & & & & & & & & & & & & & & & & & if(hour==24) & & & & & & & & & & & & & & & & & & & & & & hour=0;& & & & //正常时间 小时 加1& & & & & & & & & & & & & & & & Displaypro();& & & & & & & & & & & & }& & & & & & & & } & & & & & & & & & & if(!KEY2)& & & & //按键2去抖以及动作& & & & & & & & {& & & & & & & & & & & & delay(10000);& & & & & & & & & & & & if(!KEY2)& & & & & & & & & & & & {& & & & & & & & & & & & & & & & hour--; & & & & & & & & & & & & & & & & & & if(hour==255) & & & & & & & & & & & & & & & & & & & & & & hour=23;& & & & //正常时间 小时减1& & & & & & & & & & & & & & & & Displaypro();& & & & & & & & & & & & }& & & & & & & & }& & & & & & & & if(!KEY3)& & & & //按键去抖以及动作& & & & & & & & {& & & & & & & & & & & & delay(10000);& & & & & & & & & & & & if(!KEY3)& & & & & & & & & & & & {& & & & & & & & & & & & & & & & minute++; & & & & & & & & & & & & & & & & & & if(minute==60) & & & & & & & & & & & & & & & & & & & & & & minute=0;& & & & //分加1& & & & & & & & & & & & & & & & Displaypro();& & & & & & & & & & & & }& & & & & & & & }& & & & & & & & & & & if(!KEY4)& & & & //按键去抖以及动作& & & & & & & & {& & & & & & & & & & & & delay(10000);& & & & & & & & & & & & if(!KEY4)& & & & & & & & & & & & {& & & & & & & & & & & & & & & & minute--; & & & & & & & & & & & & & & & & & & if(minute==255) & & & & & & & & & & & & & & & & & & & & & & minute=59;& & & & //分减1& & & & & & & & & & & & & & & & Displaypro();& & & & & & & & & & & & }& & & & & & & & }& & & & }} & & /******************************************************************//*& & & & & & & & & & & & & 定时器1中断& & & & & & & & & & & & & & & & & *//******************************************************************/void time1_isr(void) interrupt 3 using 0& & & & //定时器1用来动态扫描{& & & & st& & & & TH1=0xF8;& & & & //重入初值& & & & TL1=0xf0; & & & & & & switch (num) & & & & & & {& & & & & & & & case 0:P2=0;P0=StrTab[num];& //分别调用缓冲区的值进行扫描& & & & & & & & case 1:P2=1;P0=StrTab[num];& & & & & & & & case 2:P2=2;P0=StrTab[num];& & & & & & & & case 3:P2=3;P0=StrTab[num];& & & & & & & & case 4:P2=4;P0=StrTab[num];& & & & & & & & case 5:P2=5;P0=StrTab[num];& & & & & & & & case 6:P2=6;P0=StrTab[num];& & & & & & & & case 7:P2=7;P0=StrTab[num];& & & & & & & & default:& & & & }& & & & num++;& & & & //扫描8次,使用8个数码管& & & & if(num==8)& & & & & & & & num=0;} & & /******************************************************************//*& & & & & & & & & & & & & & & 定时器0中断& & & & & & & & & & & & & & & & *//******************************************************************/void tim(void) interrupt 1 using 1{& & & & static& & & & //定义内部局部变量 & & & & & & TH0=0xd8;& & & & //重新赋值& & & & TL0=0xf0;& & & & count++;& & & & switch (count)& & & & {& & & & & & & & case 0:& & & & & & & & case 20:& & & & & & & & case 40:& & & & & & & & case 60:& & & & & & & & case 80:Displaypro();& & & & //隔一定时间调用显示处理& & & & & & & & case 50:P1=~P1;& & & & //半秒 LED 闪烁& & & & & & & & default:& & & & } & & & & & & if (count==100)& & & & {& & & & & & & & count=0;& & & & & & & & second++;& & & & //秒加1& & & & & & & & if(second==60)& & & & & & & & {& & & & & & & & & & & & second=0;& & & & & & & & & & & & minute++;& & & & //分加1& & & & & & & & & & & & if(minute==60)& & & & & & & & & & & & {& & & & & & & & & & & & & & & & minute=0;& & & & & & & & & & & & & & & & hour++;& & & & //时加1& & & & & & & & & & & & & & & & if(hour==24)& & & & & & & & & & & & & & & & & & & & hour=0;& & & & & & & & & & & & }& & & & & & & & & }& & & & } }& 本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系! 试试再找找您想看的资料 资料搜索: 查看相关资料 & & &    同意评论声明    发表 尊重网上道德,遵守中华人民共和国的各项有关法律法规 承担一切因您的行为而直接或间接导致的民事或刑事法律责任 本站管理人员有权保留或删除其管辖留言中的任意内容 本站有权在网站内转载或引用您的评论 参与本评论即表明您已经阅读并接受上述条款 匿名 发表于 可以的 copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & & 地址: 电话:(86)774-2826670& & &&)基于DS1302实时日历时钟显示系统的设计_毕业论文-免费论文 欢迎来到网学网学习,获得大量论文和程序! 基于DS1302实时日历时钟显示系统的设计_毕业论文 请下载论文,论文或程序为doc或rar格式,只上传部分目录查看,如果需要此论文或程序,请点击-下载论文,下载需要资料或是论文。jiyu-DS1302-shishirilishizhongxianshi-system-deshejiabiyelunwen 毕 业 设 计(论 文)基于DS1302实时日历时钟显示系统的设计           教 学 系: 电子信息工程 指导教师: 专业班级: 二零一一年六月毕业设计(论文)任务书  学生   专业班级   电信1074   指导教师   熊利祥   工作单位   信息工程系   设计(论文)题目: 实时日历时钟显示系统的设计 设计(论文)主要内容:  在实时监控系统的设计中,要求各个控制信号进行实时监测,更重要的是在发生故障的情况下准确记录故障数据,以便准确分析排除错误。此外,在单片机的应用系统中,常常需要记录实时的时间信息并长期保存。为了达到上述的目的,必不可少地就需要实时时钟的参与和配合。然而,通常用的单片机没有实时时钟部件,如果需要此功能就得使用定时器来实现,而一旦系统掉电时钟就不能运行,这在需要实时时钟的系统中是不允许的,即便使用备用电池,通用单片机系统的较大功率也坚持不了多久。而采用独立运行的实时时钟,就可避免不少麻烦,同时配合相应的软件就可以有效地完成所要达到的目的。本设计要求学生设计一个实时日历时钟显示系统,要求满足的功能要求如下:  (1)可以准确地显示背景时间(时、分、秒)及公历日期(年、月、日、星期)。  (2)该系统存储的时间信息在掉电的情况下至少保存10年。  (3)日历时钟信息通过数码管进行实时显示。  (4)为系统的显示装置设计驱动电路,以提高数码管的显示亮度。  (6)时间显示可以选择24小时模式或带有"PM"和"AM"指示的12小时模式。  要求完成的主要任务及其时间安排:  任务要求:  (1)查阅不少于12篇的相关资料,其中英文文献不少于2篇;  (2)查阅相关资料,提出出设计方案,完成开题报告;  (3)完成实时日历时钟显示系统的硬件和软件设计  (4)在proteus中对系统或相关环节进行调试、仿真或试验,验证设计的正确性、可行性。  (5)完成毕业设计论文。  时间安排:   1~2周 查阅相关资料   3周 写开题报告   4~5周 设计总体方案   6~9周 进行硬件和软件的设计   10~11周 调试测试   12~14周 撰写论文   15周 毕业答辩  必读参考资料:  (1)郭天祥. 新概念51单片机C语言教程[M].北京:电子工业出版社,2009  (2)李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,2003  (3)戢卫平、胡耀辉. 单片机系统开发实例经典[M].北京:冶金工业出版社,2006  (4)杨辉先.单片机原理及应用[M].北京:人民邮电出版,2006  (5)杨国田,白焰,董玲. 51单片机实用C语言程序设计与典型实例[M].北京:中国电力出版社,2009               指导教师签名: 教研室主任签名: 盖章     毕业设计(论文)开题报告题目 实时日历时钟显示系统的设计 1.目的及意义(含国内外的研究现状分析): 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。 电子时钟是现代社会中的主要计时工具之一,广泛应用于手机,电脑,汽车等社会生活需要的各个方面,及对时间有要求的场合。本设计采用AT89C51 单片机作为主要核心部件,附以上电复位电路,时钟电路及按键调时电路组成。 数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等。这些方法都各有特点,其中,利用单片机实现的电子钟具有编程灵活,功能便于扩展,精确度高等特点。该系统实用性强、操作简单、扩展性强。2.国内研究概况 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机具有体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。  目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,录象机、摄象机,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。  电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许多场合可以看到数字电子钟。在城市的主要营业场所、车站、码头等公共场所使用LCD数字电子钟已经成为一种时尚。但目前市场上各式各样的LCD数字电子钟大多数用全硬件电路实现,电路结构复杂,功率损耗大等缺点。因此有必要对数字电子钟进行改进。3.基本内容和技术方案: 在本次设计中,要求用c51单片机系统和LED显示屏显示日历和时间,在保证时间正常显示的前提下,能对时间进行调整。此外,由于在单片机的应用系统中,常常需要记录实时的时间信息并长期保存。所以在单片机系统外加一个时钟芯片,同时配合相应的软件就可以有效地完成所要达到的目的。本设计能实现的功能如下:&&>&&>&毕业设计-基于MCS-51单片机的数字时钟系统设计 毕业设计-基于MCS-51单片机的数字时钟系统设计 毕业设计 基于MCS-51单片机的数字时钟系统设计,共51页,15524字 数字钟在日常生活中最常见,应用也最广泛。本次数字时钟电路根据设计要求采用ds1302和AT89C51单片机来实现时、分、秒24小时计时,采用六位数码管动态扫描显示。。文章的核心主要从硬件设计和软件编程两个大的方面。硬件电路设计主要包括中央处理单元电路、时钟电路、软件用汇编语言来实现,主要包括主程序、时间设置子程序等软件模块。电路基本能实现显示时间、调整时间功能达到了设计的要求和目的。并在Proteus和Keil软件上进行了仿真和调试。 关键词: AT89C51单片机 DS1302 液晶显示器模块 数字钟 基于MCS-51单片机的数字时钟系统设计 I ABSTRACT II 1.1课题研究背景 2 1.2课题研究意义 3 1.3本文的主要内容 3 1.4本文的结构 3 方案设计与论证 4 2.1数字时钟芯片选择 4 2.1.1 DS12887芯片 4 2.1.2 DS1302芯片 4 2.2显示部份选择方案 5 2.2.1 静态显示 5 2.2.2 动态显示 6 核心芯片简介 7 3.1 DS1302简介 7 3.1.1 DS1302引脚功能与内部结构 7 DS1302的控制字 8 DS1302的复位引脚 9 DS1302的数据输入输出 9 3.1.5 DS1302的寄存器 9 3.2 AT89C51简介 25 4 系统硬件设计 29 硬件主要电路设计 29 4.1.1 DS1302与单片机的接口设计 29 4.1.2并口芯片8255电路设计 30 4.1.3 7407/06驱动器 33 4.1.4显示设计 34 硬件辅助电路设计 38 4.2.1看门狗电路设计 38 4.2.2复位电路设计 39 4.5单片机系统电路图 40 系统软件设计 41 5.1系统主程序软件设计 41 5.1系通初始化 43 5.2显示程序设计 44 5.3看门狗程序设计 46 系统调试 32 6.1硬件调试 32 6.1.1 Proteus软件介绍 32 6.1.2硬件调试 35 6.2 软件调试 37 6.2.1软件编程环境keil介绍 37 6.2.2软件调试 39 参考文献 1 资料文件预览 共1文件夹,1个文件,文件总大小:1.18MB,压缩后大小:710.61KB 毕业设计-基于MCS-51单片机的数字时钟系统设计 基于DS1302数字时钟的设计.doc&&[1.18MB] [ 下载 ]&&&&&(需要: 75 个学海币)&&&&& Q: 为什么我下载的文件打不开? A: 本站所有资源如无特殊说明,解压密码都是www.xuehai.net,如果无法解压,请下载最新的软件。 Q: 我的学海币不多了,如何获取学海币? A: 上传优质资源可以获取学海币,详细见。 Q: 为什么我下载不了,但学海币却被扣了? A: 由于下载人数众多,下载服务器做了并发的限制。请稍后再试,48小时内多次下载不会重复扣学海币。 下载本文件意味着您已经同意遵守以下协议 1. 文件的所有权益归上传用户所有。 2. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。 3. 学海网仅提供交流平台,并不能对任何下载内容负责。 4. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。 5. 本站不保证提供的下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。 论文相关下载 电子电工论文下载排行榜 电子电工论文最近更新导读:本文介绍了基于STC89C52RC单片机设计的电子时钟,首先我们在绪论中简单介绍了单片机的发展与其在中低端领域中的优势以及课题的开发意义,接着介绍了STC89C52RC单片机的硬件结构和本毕业设计所要外扩的LED显示及,并在此基础上实现了时钟基本电路的设计,然后使用单片机C语言进行时钟程序的设计,第1章设计要求与方案论证,本文提出了一种基于STC89C52RC单片机的时钟设计方案,本方案以ST 本文介绍了基于STC89C52RC单片机设计的电子时钟。 首先我们在绪论中简单介绍了单片机的发展与其在中低端领域中的优势以及课题的开发意义;接着介绍了STC89C52RC单片机的硬件结构和本毕业设计所要外扩的LED显示及其驱动方法,并在此基础上实现了时钟基本电路的设计;然后使用单片机C语言进行时钟程序的设计,程序采用模块化结构,使得逻辑关系简单明了,维护方便。 第1章 设计要求与方案论证 本文提出了一种基于STC89C52RC单片机的时钟设计方案,本方案以STC89C52RC单片机作为主控核心,与时钟芯片DS1302、按键、LED显示等模块组成硬件系统。在硬件系统中设有独立按键和LED显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间等,综上所述此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 1.2功能要求 本电子时钟能动态显示年、月、日、星期、小时、分钟、秒 1.3方案论证 1.3.1 技术可行性 随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。 单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关: 1、单片机构成的应用系统有较大的可靠性。这些可靠性的获得除了依靠单片机芯片本身的高可靠性以及应用有最少的联接外,还可以方便地采用软、硬件技术。 2、系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统,应用系统有较高的软、硬件利用系数。 3、由于构成的应用系统是一个计算机系统,相当多的测、控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当地改变系统功能。 4、有优异的性能、价格比。 1.3.2 单片机的选择 方案一:采用传统的STC89C52RC作为电机的控制核心。单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各个领域应用广泛。 方案二:采用FTC10F04单片机,还带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。其主要特点如下:8KB Flash ROM,可以擦除1000次以上,数据保存10年。 由于本系统对CPU运算速度要求很高,需要执行很复杂的运算,方案一成本比较低,适合做设计,方案二运算速度高,性能好,所以两种方案都有可取之处。选用方案一作为主方案,方案二作为备用方案。 1.3.3 显示模块的选择 方案一:使用液晶显示屏显示时间数字。 液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。但由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控制器的资源占用较多,其成本也偏高。在使用时,不能有 静电干扰,否则易烧坏液晶的显示芯片,不易维护。 方案二:使用传统的LED数码管显示。 数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,称重轻,精确可靠,操作简单。数码管采用BCD编码显示数字,程序编译容易,资源占用较少。 根据以上的论述,采用方案二。在本系统中,我们采用了八段四位一体数码管串口的动态显示。 1.3.4 键盘模块的选择 在对日期和时间进行切换,对日期和时间进行调节校准过程中,系统需要产生激励电流,因此需要用按键。 方案一:使用独立式键盘。独立式键盘是指直接用I/O口线构成的单 方案二:使用矩阵式键盘。矩阵式键盘是由行线和列线组成,按键个按键电路。独立式按键电路配置灵活,软件结构简单。 位于行、列的交叉点上,行线、列线分别连接到按键开关的两端。其特点是简单且不增加成本,这种键盘适合按键数量较多的场合。 根据以上的论述,因本系统需要的按键不多,日期加1键,月数加1键,年数加1键,分数加1键,时数加1键,时间/日期切换键,要求简单。所以采用方案一独立式键盘。 1.3.5总体方案论证与选择 按照系统设计功能的要求,初步确定系统由主控模块、时控模块、及显示模块和键盘接口模块共4个模块组成。主控芯片使用51系列STC89C52RC单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。采用DS1302作为计时芯片,可以做到计时准确。更重要的是,DS1302可以在很小电流的后备电源(2.5~5.5V电源,再2.5V时耗电小于300nA),而且可以编程选择多种充电电流来为后备电源进行慢速充电,可以保证后备电源基本不耗电。显示模块采用普通的共阳极四位一体八段LED数码管。 包含总结汇报、专业文献、应用文书、考试资料、办公文档、教程攻略、文档下载、IT计算机、人文社科、经管营销、教学研究以及电子万年历毕业设计(基于AT89C51单片机和DS1302时钟芯片)等内容。本文共13页 相关内容搜索89C2051+DS5+8位LED数码管的电子钟程序 - c51编程(单片机的c语言) - 51单片机学习论坛 - Powered by Discuz! 89C2051+DS5+8位LED数码管的电子钟程序 单片机达人 89C2051+DS5+8位LED数码管的电子钟程序 AT89C2051只有15个IO口,要显示8位数码管有点吃力,必需扩展,所以找来74HC595串转并移位寄存器,一个做段显一个做位选,只用三个IO口就解决了8+8的显示,如果要再多一点也不怕,不过2051只有2K的存贮空间,也限制了显示位数。DS1302占用3个IO,这样一个P1只用了6个IO,还有两个空着,准备设置一个LED感应自动开关和一个DS18B20,如果程序大小允许再加入红外摇控,把LED显示做大一点,就是一款实用的电子钟。这个程序是我参考别人的相关程序自己补充修改写成的,已经在XL2000上测试通过,程序只有编译后1244,很小,再加入DS18B20湿度显示也没问题,只是我这部份还没学会,所以没有加入。#include &AT89X51.H&//DS1302内部寄存器定义&&#define sec 0x80&&#define min 0x82&&#define hou 0x84#define dat 0x86#define mou 0x88#define wek 0x8a#define yer 0x8c&&&&&#define read 0x01&//DS1302引脚定义sbit T_CLK=P1^0;sbit T_IO =P1^1;sbit T_RST=P1^2;//DS1302字节定义sbit ACC0=ACC^0;sbit ACC7=ACC^7;//74HC595 引脚定义sbit CLK=P1^5;&&&&&&&&&&&&& //595 11脚 时钟sbit STR=P1^6;&&&&&&&&&&&&& //595 12脚 锁存sbit RData=P1^7;&&&//595 14脚 数据 //设置键引脚定义sbit SET=P3^4;sbit UP=P3^2;sbit dw=P3^3;//**************函数声明*****************void delays(unsigned char);void display(void);void Scan_Key(void);void id_case1_key();void Set_id(unsigned char ,unsigned char);//*************变量定义******************unsigned char id=0,timecount,re_disp=0,ahour=0,aminute=0,asecond=0,adate=0,amouth=0,aweek=0,ayear=0;&&&&&&&&&&&&bit year,mouth,date,week,hour,minute,second,flag,&&&unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};&&&&&& /*个位0~9的数码管段码*/unsigned char code tab2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff};&& /*个位0~9的数码管段码带小数点*///写DS1302一字节void RTInputByte(unsigned char d) { &&&&&& ACC =&&& for(i=8; i&0; i--)&&& {&&&&&&& T_IO = ACC0;&&&&&&&&&&&&&&&&&& T_CLK = 1;&&&&&&& T_CLK = 0;&&&&&&& ACC = ACC && 1; &&& } }//读出DS1302一字节unsigned char RTOutputByte(void) { &&&&&& for(i=8; i&0; i--)&&& {&&&&&&& ACC = ACC &&1;&&&&&&&&&&&&&&&& ACC7 = T_IO;&&&&&&& T_CLK = 1;&&&&&&& T_CLK = 0;&&& } &&& return(ACC); }//写DS1302void Write1302(unsigned char ucAddr, unsigned char ucDa){&&& T_RST = 0;&&& T_CLK = 0;&&& T_RST = 1;&&& RTInputByte(ucAddr);&&&&&& // 地址,命令 &&& RTInputByte(ucDa);&&&&&&&& // 写1Byte数据&&& T_CLK = 1;&&& T_RST = 0;}//读DS1302unsigned char Read1302(unsigned char ucAddr){&&& unsigned char ucD&&& T_RST = 0;&&& T_CLK = 0;&&& T_RST = 1;&&& RTInputByte(ucAddr);&&&&&&&&&&&& // 地址,命令 &&& ucData = RTOutputByte();&&&&&&&& // 读1Byte数据&&& T_CLK = 1;&&& T_RST = 0;&&& return(ucData);}//74HC595 发送数据函数void sendbyte(unsigned char bbyte1){&&for(f=0;f&8;f++)&{&&RData=bbyte1&0x80;&& &&CLK=0;& CLK=1;&&bbyte1&&=1; &} }//内部定时器函数void t0(void) interrupt 1 using 0&&{& &TH0=()/256; & &TL0=()%256;& & &timecount++;re_disp++;& &if(timecount&9)&& &&{&&&timecount=0;&&& &&flag=~&& &&}&if(re_disp&200){re_disp=0;if(id)id=0;}}//延时函数void delays(unsigned char k)&&&{&unsigned char i,j;&for(i=0;i&k;i++)&&for(j=0;j&50;j++);}//读取时间日期函数void readtime(void){ 1=0&adate=Read1302(dat|read);&amouth=Read1302(mou|read);&aweek=Read1302(wek|read);&ayear=Read1302(yer|read);&ahour=Read1302(hou|read);&aminute=Read1302(min|read);&asecond=Read1302(sec|read);}//显示小时分钟及秒钟void display1(void)&&&&&&{&& readtime();&if(flag&hour)&&&&&&&&{&&&sendbyte(0xff);&&&sendbyte(0xff);&&&STR=0;STR=1;&&}&else&&&&&&&&&{&&&sendbyte(tab[ahour/16]);&&&sendbyte(0xfe);&&&STR=0;STR=1;&&&delays(10);&&&sendbyte(tab[ahour%16]);&&&sendbyte(0xfd);&&&STR=0;STR=1;&&&delays(10);&&}&sendbyte(0xbf);&sendbyte(0xfb);&STR=0;STR=1;&if(flag&minute)&&{&&&sendbyte(0xff);&&&sendbyte(0xff);&&&STR=0;STR=1;&&}&else&&{&&&sendbyte(tab[aminute/16]);&&&sendbyte(0xf7);&&&STR=0;STR=1;&&&delays(10);&&&sendbyte(tab[aminute%16]);&&&sendbyte(0xef);&&&STR=0;STR=1;&&&delays(10);&&}&sendbyte(0xbf);&&&&&&&&&&//秒与分之间的间隔符&sendbyte(0xdf);&STR=0;STR=1;&if(flag&second)&&{&&&sendbyte(0xff);&&&sendbyte(0xff);&&&STR=0;STR=1;&&}&else&&{&&&sendbyte(tab[asecond/16]);&&&sendbyte(0xbf);&&&STR=0;STR=1;&&&delays(10);&&&sendbyte(tab[asecond%16]);&&&sendbyte(0x7f);&&&STR=0;STR=1;&&&delays(10);&&}}//显示年月日星期void display3(void)&&&&&&{&& readtime();&if(flag&year)&&&&&&&&{&&&sendbyte(0xff);&&&sendbyte(0xff);&&&STR=0;STR=1;&&}&else&&&&&&&&&{&&&sendbyte(tab[ayear/16]);&&&sendbyte(0xfe);&&&STR=0;STR=1;&&&delays(10);&&&sendbyte(tab2[ayear%16]);&&&sendbyte(0xfd);&&&STR=0;STR=1;&&&delays(10);&&}&if(flag&mouth)&&&&&&&&{&&&sendbyte(0xff);&&&sendbyte(0xff);&&&STR=0;STR=1;&&}&else&&&&&&&&&{&&&sendbyte(tab[amouth/16]);&&&sendbyte(0xfb);&&&STR=0;STR=1;&&&&&&&& delays(10);&&&sendbyte(tab2[amouth%16]);&&&sendbyte(0xf7);&&&STR=0;STR=1;&&&delays(10);&&}&if(flag&date)&&{&&&sendbyte(0xff);&&&sendbyte(0xff);&&&STR=0;STR=1;&&}&else&&{&&&sendbyte(tab[adate/16]);&&&sendbyte(0xef);&&&STR=0;STR=1;&&&delays(10);&&&sendbyte(tab[adate%16]);&&&sendbyte(0xdf);&&&STR=0;STR=1;&&&delays(10);&&}&&sendbyte(0xbf);&&sendbyte(0xbf);&&STR=0;STR=1;&if(flag&week)&&&&&&&&{&&&sendbyte(0xff);&&&sendbyte(0xff);&&&STR=0;STR=1;&&}&else&&&&&&&&&{&&&sendbyte(tab[aweek%16]);&&&sendbyte(0x7f);&&&STR=0;STR=1;&&&delays(5);&&}}//设定时间日期显示选择void display(void){&switch(id)&{&&case 0: display1();&&case 1: display1();&&case 2: display1();&&case 3: display1();&&case 4: display3();&&case 5: display3();&&case 6: display3();&&case 7: display3();&&default:&}}//按键扫描 选择显示日期与时间及闪烁位选择void Scan_Key(void)&&&{&&&& display();&if(id==0)&{&&if (!UP) &&&&& {&&&&& &while(!UP)display3();&&&&&re_disp=0;&&&&&&&&&&&&&&&& }&& }&if(!SET)&&&&&&&{&&&while(!SET) display();&&&re_disp=0;&&&&&&&id++;&&&if(id&7)&&&&id=0;&&&&}&if(id==0){year=0;mouth=0;date=0;week=0;hour=0;minute=0;second=0;}&if(id==1){hour=1;id_case1_key();}&&&if(id==2){hour=0;minute=1;id_case1_key();}&if(id==3){minute=0;second=1;id_case1_key();}&if(id==4){second=0;year=1;id_case1_key();}&if(id==5){year=0;mouth=1;id_case1_key();}&if(id==6){mouth=0;date=1;id_case1_key();}&if(id==7){date=0;week=1;id_case1_key();}}//加减键与显示void id_case1_key(void)&&&&&{&& &if (!UP) &&&&& &{&&&&&& &&while(!UP)display();&&&&& re_disp=0;&&& &&Set_id(id,1);&&& &&&&& &}&& &if (!dw) &&&&& &{&&&&&& &&while(!dw)display();&&&&& re_disp=0;&&& &&Set_id(id,2);&&& &&&&& &}}//设定时间,加减范围void Set_id(unsigned char sel,unsigned char sel_1)&{& &signed char max,mini,address,&&&&&&if(sel==1)& {address= max=23;mini=0;}& &if(sel==2)& {address= max=59;mini=0;}&& & &if(sel==3)& {address= max=0;mini=0;}&if(sel==4)& {address= max=99;mini=0;}& &if(sel==5)& {address= max=12;mini=1;}&& & &if(sel==6)& {address= max=31;mini=1;}& &if(sel==7)& {address= max=7;mini=1;}&& P1=0& & &item=Read1302(address|read)/16*10+Read1302(address|read)%16;&& &if (sel_1==1)&&item++;&&&&&&&&&if(item&max)&&item=&& & &if (sel_1==2)&&item--;&&&&&&&&if(item&mini)&&item=&& && P1=0&Writee,0x00);& &Write1302(address,item/10*16+item%10);&&&&&&&& &Writee,0x80);}void main()&&&&&&&{& &TMOD=0x01;&&&&&&TH0=()/256;&TL0=()%256;&EA=1;&ET0=1;&TR0=1; &Write,0xa5);//&if(!SET&!UP)//&&Set1302(inittime);&Writee,0x80);&&&&while(1)&&{& &&&Scan_Key();&&&&&&&}} 单片机达人 哪位大侠要是加入了别的功能,希望也能把程序贴出来共享,谢谢[em01] 单片机达人 修正一下,DS1302的三根线不知为什么不能用89C2051的P1。0 P1。1两个IO,只好改到P1。3 P1。4 上去,上面的程序不能正常调时间,显示为00-00-00,按键无反映,没有读写DS1302的动作。查了好半天程序也没有头绪,最后是改了IO口才正常,请教为什么不能使用P1。0 P1。1 这两个IO口?上面的程序我已经改为16位显示日期和时间的了。程序也不大只有1296字节。 单片机教授 因为2051的P1.0和P1.1口是没有上拉电阻的,要用时,外加10K电阻 单片机达人 哦,原来如些,谢谢 单片机小学生 把16位显示的程序发给我一份吧,谢谢, 单片机幼儿园 我的出问题了&&能加我QQ吗? 单片机幼儿园}

我要回帖

更多关于 数码管显示原理 的文章

更多推荐

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

点击添加站长微信