"MCS-51单片机电子时钟设计与C语言编程实例:软硬件设计与程序流程图详解"

版权申诉
0 下载量 155 浏览量 更新于2024-02-22 收藏 269KB DOC 举报
本论文通过采用MCS-51单片机和C语言进行编程,实现了电子时钟的设计。该时钟由片内定时器与两位一体七段LED显示时分秒,以及DS1302温度集成块显示两位温度组成。论文介绍了单片机系统总体方案的设计方法以及软硬件的设计方法,并给出了相应的程序流程图。单片机是集成电路芯片,由微处理器、片内数据储存、特殊功能寄存器、片内程序存储器、并行输入输出、定时/计数器、串行通信口、总线控制器、中断控制系统、片内振荡器和内部总线组成。它的特点是体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。 关键词:单片机,电子时钟,定时器,数码管,DS1302 绪论 单片机作为一种集成电路芯片,由微处理器(CPU)、片内数据储存(RAM)与特殊功能寄存器(SFR)、片内程序存储器(ROM)、并行输入输出(I/O)、定时/计数器、串行通信口、总线控制器、中断控制系统、片内振荡器和内部总线组成。它的特点是体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。 本论文采用MCS-51单片机来实现电子时钟的设计,由C语言进行编程,实现了片内定时器与两位一体七段LED显示时分秒,以及DS1302温度集成块显示两位温度。通过电子时钟设计的实例,介绍了单片机系统总体方案的设计方法和软硬件的设计方法,并给出了相应的程序流程图。 第一部分 理论基础 1.1 单片机的特点 单片机的特点主要包括:体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。这些特点使得单片机在智能生产和工业自动化领域得到了广泛的应用。 1.2 单片机的组成 单片机由微处理器、片内数据储存、特殊功能寄存器、片内程序存储器、并行输入输出、定时/计数器、串行通信口、总线控制器、中断控制系统、片内振荡器和内部总线组成。这些组成部分相互协作,共同完成单片机的各种功能。 1.3 单片机在电子时钟设计中的应用 在电子时钟设计中,单片机可以通过片内定时器来实现时钟的计时功能,通过并行输入输出来驱动LED数码管显示时分秒,同时通过串行通信口来与温度传感器DS1302进行通信,实现温度的显示功能。 第二部分 设计方案 2.1 系统总体方案 本论文采用MCS-51单片机作为核心处理器,通过C语言进行编程,实现了电子时钟的设计。时钟由片内定时器与两位一体七段LED显示时分秒,以及DS1302温度集成块显示两位温度组成。 2.2 硬件设计 在硬件设计上,通过合理的电路连接和元件选择,实现了单片机与LED数码管、DS1302温度传感器的连接,以及外部电源的供电。 2.3 软件设计 在软件设计上,通过C语言编程,实现了时钟的计时功能、LED数码管的驱动和温度传感器DS1302的通信功能。并给出了相应的程序流程图,展示了软件的设计思路和流程。 第三部分 结论 通过本论文的研究,成功实现了基于MCS-51单片机的电子时钟设计。论文介绍了单片机系统总体方案的设计方法、硬件的设计方法和软件的设计方法,并给出了与之对应的程序流程图。这为单片机在电子时钟设计领域的应用提供了一定的参考和借鉴价值。 总之,单片机作为一种集成电路芯片,在电子时钟设计中具有重要的应用价值。通过合理的系统总体方案、硬件设计和软件设计,可以实现功能强大的电子时钟产品。希望本论文的研究成果能够对相关领域的研究和应用工作提供一定的帮助和指导。
2023-02-27 上传
第一章 电子时钟的设计 1.1电子时钟简介  电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它 具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活 环境的不断改善和美化,在许多场合都用到电子时钟。 1.2电子时钟的基本特点 现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表 都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式 电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时 间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校 对,片选的灵活性好。 1.3电子时钟的应用 LCD数字电子钟除了在城市的主要营业场所、车站、码头等公共场所使用,还可以改 装在摩托车和汽车上,LCD显示,带蓝色背光,白天在太阳光下也能非常清楚的看到显示 时间,关钥匙可以关闭蓝色背光,时间还能显示也不会清零,因LCD的显示耗电量很省的 ,所以一直工作也不必担心耗电问题。在骑摩托车时,为了看时间,先要停下车子,取 出手机,才能看时间,是否有点麻烦,现在车上改装了一个蓝色背光的液晶电子钟后, 不管白天黑夜色,随时可以看时间,非常方便。 1.4电子时钟的工作原理 一般电子钟是一个将" 时","分","秒"显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度 为23时59分59秒,另外应有校时功能和报时功能。因此,一个基本的数字钟电路主要由 译码显示器、"时","分","秒"计数器、校时电路、报时电路和振荡器组成。主电路系 统由秒信号发生器、"时、分、秒"计数器、译码器及显示器、校时电路、整点报时电路 组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英 晶体振荡器加分频器来实现。将标准秒信号送入"秒计数器","秒计数器"采用60进制计 数器,每累计60秒发出一个"分脉冲"信号,该信号将作为"分计数器"的时钟脉冲。"分计 数器"也采用60进制计数器,每累计60分钟,发出一个"时脉冲"信号,该信号将被送到" 时计数器"。"时计数器"采用24进制计时器,可实现对一天24小时的累计。译码显示电路 将"时"、"分"、"秒"计数器的输出状态用七段显示译码器译码,通过七段显示器显示出 来。整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生 器实现报时。校时电路时用来对"时"、"分"、"秒"显示数字进行校对调整。 而该电子时钟由89C51,BUTTON,六段数码管等构成,采用晶振电路作为驱动电路, 由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分 钟为一小时,满二十四小时为一天。而电路中唯一的一个控制键却拥有多种不同的功能 ,按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开, 则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则 可实现小时的调节,同样每按一次小时加一。 第二章 单片机识的相关知识 2.1单片机的介绍 单片机也被称为微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。单片机由 芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集 成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设 备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处 理器的发展便分道扬镳。   早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能 不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的 单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单 片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展 ,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位 ,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年 代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期 的专用处理器,而普通的型号出厂价格跌落至1美元,最高端[1]的型号也只有10美元。 当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广 泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以 直接使用专用的Windows和Linux操作系统。   单片机比专用处理器更适合应用于嵌入式系统,因
2023-02-27 上传
单片机电子时钟的设计 本例直接忽略了星期这项内容,通过上、下、左、右、回车、ESC 这 6 个按键可以调整时间。这也是一个具有综合练习性质的实例,虽然在功能实现上没有多 少难度,但要进行的操作却比较多而且烦琐,同学们可以从中体会到把繁杂的功能实现 分解为一步步函数操作的必要性以及方便灵活性。简单说一下这个程序的几个要点,方 便大家阅读理解程序。 把 DS1302 的底层操作封装为一个 DS1302.c 文件,对上层应用提供基本的实时时间的操作接口,这个文件也是我们的又一个功能模 块了,我们的积累也越来越多了。 定义一个结构体类型 sTime 用来封装日期时间的各个元素,又用该结构体定义了一个时间缓冲区变量 bufTIme 来暂存从 DS1302 读出的时间和设置时间时的设定值。需要注意的是在其它文件中要使用这个结构体变量 时,必须首先再声明一次 sTIme 类型; 定义一个变量 seTIndex 来控制当前是否处于设置时间的状态,以及设置时间的哪一位,该值为 0 就表示正常运行,1~12 分别代表可以修改日期时间的 12 个位; 由于这节课的程序功能要进行时间调整,用到了 1602 液晶的光标功能,添加了设置光标的函数,我们要改变哪一位的数字,就在 1602 对应位置上进行光标闪烁,所以 Lcd1602.c在之前文件的基础上添加了两个控制光标的函数; 时间的显示、增减、设置移位等上层功能函数都放在 main.c 中来实现,当按键需要这些函数时则在按键文件中做外部声明,这样做是为了避免一组 功能函数分散在不同的文件内而使程序显得凌乱。 /***************************DS1302.c 文件程序源代码*****************************/ #include sbit DS1302_CE = P1 "; sbit DS1302_CK = P3; sbit DS1302_IO = P3; struct sTIme { //日期时间结构体定义 unsigned int year; //年 unsigned char mon; //月 unsigned char day; //日 unsigned char hour; //时 unsigned char min; //分 unsigned char sec; //秒 unsigned char week; //星期 }; /* 发送一个字节到 DS1302 通信总线上 */ void DS1302ByteWrite(unsigned char dat){ unsigned char mask; for (mask=0x01; mask!=0; mask《《=1){ //低位在前,逐位移出 if ((mask">DS1302_IO = 1; }else{ DS1302_IO = 0; } DS1302_CK = 1; //然后拉高时钟 DS1302_CK = 0; //再拉低时钟,完成一个位的操作 } DS1302_IO = 1; //最后确保释放 IO 引脚 } /* 由 DS1302 通信总线上读取一个字节 */ unsigned char DS1302ByteRead(){ unsigned char mask; unsigned char dat = 0; for (mask=0x01; mask!=0; mask《《=1){ //低位在前,逐位读取 if (DS1302_IO != 0){ //首先读取此时的 IO 引脚,并设置 dat 中的对应位 dat "= mask; } DS1302_CK = 1; //然后拉高时钟 DS1302_CK = 0; //再拉低时钟,完成一个位的操作 } return dat; //最后返回读到的字节数据 } /* 用单次写操作向某一寄存器写入一个字节,reg-寄存器地址,dat-待写入字节 */ void DS1302SingleWrite(unsigned char reg, unsigned char dat){ DS1302_CE = 1; //使能片选信号 DS1302ByteWrite((reg《《1)"0x80); //发送写寄存器指令 DS1302ByteWrite(dat); //写入字节数据 DS1302_CE = 0; //除能片选信号 } /* 用单次读操作从某一寄存器读取一个字节,reg-寄存器地址,返回值-读到的字节 */ unsigned char DS1302SingleRead(unsigned char reg){ unsigned char dat; DS1302_CE = 1; //使能片选信号 DS1302ByteWrite((reg《《1)"0x81);