第五讲 DS1302程序设计

1.建立工程模板

2.编写所需的底层文件

3.定义数码管显示模式变量

·将三个显示界面放到0-2 三个设置界面放到3-5

4.编写时钟显示界面

1)定义时钟数据数组

·数组的数据以BCD码形式储存 不建议以十进制储存

2)上电初始化DS1302芯片

3)实时读取DS1302数据 并显示在数码管上

5.编写闹钟显示界面

1)定义闹钟数据变量

方法一:

·建议以BCD码形式定义

·删除数据以0xbb储存 0xbb/16 = 0xbb%16 = 11 -> “-”

方法二:

2)定义闹钟编号变量

3)显示闹钟数据

方法一:

仿真显示(好慢啊这玩意儿

简化版

方法二:一维数组显示闹钟

6.日期显示界面

1)补充日期相关底层

隔开了就不能用for循环了

2)定义日期数据数组

3)上电初始化日期

4)实时读取日期数据

5)显示日期数据在数码管上

仿真显示

7.编写界面切换按键

界面切换按键,“时钟-闹钟-日期”循环切换【显示模式】  不需要保存啥的莫

PS:蓝桥杯板子的按键是4 而仿真上是3!!

显示over!!

8.编写设置界面

1)定义设置数组

·简化程序变量繁多的问题

2)显示设置数组

9.编写参数设置按键

参数设置按键,跳转到当前【显示参数】的【设置模式】

·memcpy(目标数组,数据数组,数据长度) -> <string.h>

·指针数组优化程序

才可以跳过去

10.设置界面完善

1)定义计时变量、闪烁标志位变量

2)编写中断代码 取反!!

3)定义闪烁判断位

4)编写数码管代码

11.数据输入

1)定义标志位 

2)编写按键代码

12.数据保存

1)数据合理性的判​​​​​​

  • Set_Dat[0]直接引用了数组的第一个元素,其类型为unsigned char。这意味着它是一个值,而非一个地址。
  • &Set_Dat[0]是获取Set_Dat数组第一个元素的地址(或简单地使用Set_Dat,其类型为unsigned char*,即指向unsigned char的指针。
case 15:/*参数设置按键,跳转到当前【显示参数】的【设置模式】*/
			if(Seg_Mode < 3)//在非设置界面 而在显示界面
			{
				Seg_Mode +=3;//切换到对应设置界面
				Alarm_Index = 0;//开始设置 对应的设置数组的指针要复位
				Input_Index=Input_Flag=0;
//				switch(Seg_Mode)
//				{
//					case 3://切换到 时钟设置界面
//						memcpy(Set_Dat,ucRtc,9);
//					break;
//					case 6://切换到 闹钟设置界面
//						memcpy(Set_Dat,ucAlarm,9);
//					break;
//					case 9://切换到 日期设置界面
//						memcpy(Set_Dat,ucDate,9);
//					break;
//				}
				//把实际值赋值给设置值
				memcpy(Set_Dat,Set_Flag[Seg_Mode-3],9);//3 6 9--> 0 1 2
			}
			else//在参数设置界面下
			{
				if(Input_Index >= 3)//只有输入完三次数据后才能使能保存按键
				{
					if(Seg_Mode==4)
					{
						if(Dat_Judgment(&Set_Dat[0],Seg_Mode - 3) && Dat_Judgment(&Set_Dat[3],Seg_Mode - 3),Dat_Judgment(&Set_Dat[6],Seg_Mode - 3))
							result = 1;
					}
					else if(Seg_Mode == 3 || Seg_Mode == 5)
					{	
						if(Dat_Judgment(&Set_Dat[0],Seg_Mode - 3))
							result = 1;
						else 
							result = 0;
					}
					if(result == 1)//有效
					{
//					if(Dat_Judgment(&Set_Dat[0],Seg_Mode-3) && Dat_Judgment(&Set_Dat[3],Seg_Mode-3) && Dat_Judgment(&Set_Dat[6],Seg_Mode-3))
//					{
					switch(Seg_Mode)
					{
						case 3://时钟
							Set_Rtc(Set_Dat);
						break;
						case 4://闹钟
							memcpy(ucAlarm,Set_Dat,9);
						break;
						case 5://日期
							Set_Date(Set_Dat);
						break;
					}
					Seg_Mode -= 3;//跳转回显示界面
				}
				else//无效
				{
					memcpy(Set_Dat,Set_Flag[Seg_Mode - 3],9);
					Input_Index = Input_Flag =0;
				}
			}
		}
			
		break;

Seg_Disp_Mode -= 3;//跳转回数据显示界面

13.闹钟删除按键

14.闹钟切换按键

15.设置退出按键 (退出设置界面时,设置的指针清零

16.闹钟功能按键

1)定义使能标志位

2)编写按键代码

17.Led显示

1)L1

1.定义标志位

2.判断闹钟使能条件

可能是没删干净,if后面加了个;......

3.点亮L1

2)L2-L4

3)L8

18.关于什么时候设置指针清零

  • 28
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
单片机应用课程设计报告 (2012~2013学年第2学期) 设计题目:基于DS1302电子时钟的设计 班别: 姓名: 指导教师: 时间: 目录 1 设计任务 3 2 系统总体方案设计 3 2.1 各个模块方案论证 3 2.1.1 时钟芯片的选择 3 2.1.2 显示器的选择 3 2.2总体方案设计 4 3 硬件电路设计 4 3.1 单片机最小系统 4 3.2 1302时钟电路 5 3.3 按键调时电路 5 4 系统软件设计 6 4.1 主程序流程图 6 4.2 子程序流程图 7 4.2.1 DS1302子程序流程图 7 4.2.2 1602子程序流程图 8 4.3 按键校正调时程序 8 5 实物调试 9 5.1实物性能分析 9 5.2 总结 12 附录1 14 (1)系统总电路图 14 (2)系统仿真图 14 附录2 16 部分程序清单 16 1 设计任务 基本要求:采用DS1302时钟芯片与单片机STC89C52相结合设计电子时钟来显示出实时年 、月、日、时、分、秒等时间,并且可以通过按键进行时间调整。 2 系统总体方案设计 2.1 各个模块方案论证 2.1.1 时钟芯片的选择 由于设计的是电子时钟, 而单片机STC89C52自带计时功能,利用单片机实现数据的显示和调整是可行的,采用单 片机计时,利用它的一个16位定时器/计数器每50ms产生一个中断信号,中断20次后产生 一个秒信号,然后根据时间进制关系依次向分、时、日、星期、月、年进位。这样就实 现了直接用单片机来实现电子万年历设计。 用单片机来实现电子万年历设计,无须外接其他芯片,充分利用了单片机的资源。但 是精度不够高,误差较大,掉电后丢失所有数据,软件编程较复杂。 在以单片机为核心构成的装置中,经常需要一个实时的时钟和日历,以便对一些实时 发生事件记录时给予时标,实时时钟芯片便可起到这一作用。利用单片机进行控制,采 用DS1302作为实时时钟芯片,其三线接口SCLK、I/O、/RST与单片机进行同步通信,外加 掉电存储电路、显示电路、键盘电路,即构成一个基本的电子万年历系统。由于在系统 设计时,需要考虑以下几点因素:功耗低、精确度高、软件程较简单,芯片的体积小、 芯片成本低等,而DS1302芯片有上面所述的诸多优点,所以本设计采用DS1302作为实时 时钟芯片。 2.1.2 显示器的选择 LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出需要 的字符,但此次设计需要显示汉字,如果选用数码管来显示汉字,则会需要数十个,这 样就会产生浪费,而且不方便控制,不符合设计的初衷。 LCD1602具有微功耗、体积小、显示内容丰富、超薄轻巧,对比度可调、内含复位电 路、提供各种控制命令等特点,完全满足本次设计的需要,因此选择用LCD1602作为显示 器使用。 2.2总体方案设计 DS1302具有自身计时的功能,但是自身却没法显示并且调整时间,这时就不可避免的 要使用到单片机STC89C52,它可以作为一个桥梁,架接液晶显示器和DS1302,并且利用 单片机的专用端口可以实现调整时间的功能。 利用单片机STC89C52实现数据的显示和调整是整个系统的关键所在,在整个系统中, 使用单片机的P0口作为液晶显示屏的显示端口,液晶显示屏所显示的数据全都通过P0口 接收与发送 ,P1口用作触发开关的通信接口,这样单片机可以较好地完成时间的显示与调整。 3 硬件电路设计 3.1单片机最小系统 单片机最小系统是时钟的主要控制器,它是连接外围与时钟电路、输入按键、显示器 LCD1602的纽带。它主要由STC89C52单片机单片机晶振电路与单片机复位电路组成。单 片机最小系统如图1所示。 图1 单片机最小系统电路 晶振系统由两个30pf的陶瓷电容和一个12MHz的晶振组成,分别接在XTAL1、XTAL2上 ,在单片机内部,这两个端口是一个反相放大器的输入端,这个放大器构成了片内震荡 器,它决定了单片机的时钟周期。 单片机有一个复位引脚RST,高电平有效,只要RST保持高电平,单片机将循环复位,复 位期间,ALE、PSEN输出高电平。RST从高电平变为低电平之后,PC指针变为0000H,使单 片机从程序存储器地址为0000H的单元开始执行。当单片机执行程序出错或进入死循环时 ,也可按复位按钮重新启动。 3.2 1302时钟电路 时钟电路是时间计时的基本电路,时钟电路一般由DS1302时钟芯片和32.768MHz晶振 构成。理论上在晶振两端加两个6pf的电容,可以使晶振频率更为精确。DS1302时钟电路 图如图2所示。 图2 1302时钟电路 3. 按键调时电路 按键调时电路主要的作用是校正时间,它包含有五个动作:进入(S3),退出(S6),加 一(S4),减一(S5),切换(S
基于DS1302电子时钟的设计 【摘 要】针对电子时钟芯片DS1302的工作原理,本文对基于DS1302的电子时钟系统进行了硬 件和软件的设计。仿真结果表明,该设计的电子时钟电路简单,能完整地显示日期、星 期和时间,实用性较强。 【关键词】DS1302 ;AT89C51;时钟系统 The Design of Electronic Clock Based on DS1302 FENG Da-jie (Automation Department, Hainan Normal University, Haikou Hainan, 571158) 【Abstract】According to the working principle of electronic clock chip DS1302, this paper has designed electronic clock system both in hardware and software. The result of simulation demonstrates that electronic clock system designed is of simple structure and can display date, week and time, and therefore the system is more practical. 【Key words】DS1302; AT89C51; Clock system 在很多单片机系统中都要求带有实时时钟电路,如数据记录仪表、数字钟。本论文介 绍了利用时钟芯片DS1302来制作电子时钟。利用时钟芯片DS1302制作的电子时钟最大的 优点是精度高,能完整的提供秒、分、时、日、星期、月、年的信息,并且每个月的天 数和闰年的天数可自动调整。 1 电子时钟系统硬件电路设计 DS1302电子时钟电路如图1所示,该系统主要由AT89C51单片机、时钟芯片DS1302及液 晶显示器1602 三大部分组成。在此系统中,DS1302是美国DALLAS公司推出的一种高性能,低功耗的实 时时钟芯片。系统的工作原理是单片机通过读取DS1302寄存器的数据,然后将数据显示 在1602液晶显示器上。 DS1302时钟芯片简介 DS1302是DALLAS公司堆出的涓流充电时钟芯片,可以通过串行接口与单片机进行通信 。DS1302单片机之间的通信,仅需三根I/O线:复位(RET)、I/O数据线、串行时钟( SCLK),DS1302外部引脚如图2所示。 2 电子时钟系统软件设计 在软件设计方面,采用C 语言编写DS1302初始化、读写时序, LCD1602初始化及LCD1602显示子程序,软件流程图如图3所示。 2.1 DS1302 读写时序 在DS1302时钟芯片与单片机的通信过程中,一个时钟周期是一个上升沿序列,紧跟着 一个下降沿。对于数据的输入,在时钟周期的上升沿期间,数据必须正确;在时钟周期 的下降沿,数据位输出。如果RST的输入低电平,所有数据传输中止,I/O引脚变成高阻 状态,DS1302读写时序如图4所示。 采用英国Labcenter electronics 开发的Proteus 软件对该电子时钟系统进行仿真,仿真效果如图5所示,从DS1302中读出的数据通过LCD 1602显示出来,显示器的第一行显示日期和星期,第二行显示时间。仿真结果表明,该 电子时钟系统具有电路结构简单,能显示出日期、星期和时间。 【参考文献】 [1]刘坤,宋弋,赵红波,等.51 单片机C 语言应用开发技术大全[M].北京:人民邮电出版社,2008. [2]王明顺,吴省.可涓流充电的串行实时时钟芯片DS1302 及其应用设计[J]. 电子技术应用,1996,10. [3]何立民. 单片机应用系统设计[M]. 北京:北京航空航天大学出版社,1990:133-189. ----------------------- 基于DS1302电子时钟的设计(1)全文共2页,当前为第1页。 基于DS1302电子时钟的设计(1)全文共2页,当前为第2页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值