嵌入式电子闹钟()时钟课程设计

合集下载

嵌入式课程设计-- 基于LCD的电子时钟实验

嵌入式课程设计-- 基于LCD的电子时钟实验

课程设计报告题目嵌入式系统项目设计课程设计(报告)任务书(理工科类)Ⅰ、课程设计(报告)题目:基于LCD的电子时钟实验Ⅱ、课程设计(论文)工作内容学习LCD与ARM的LCD的控制器的接口原理,掌握内置LCD控制器驱动编写方法和RTC控制方法,在可行性分析的基础上实现以下功能:1、编写程序实现电子时钟功能,通过实验系统的LCD将时间显示出来;2、仿照给定图形在LCD上显示类似的时钟界面;3、动态显示当前的时间,包括:年、月、日、时、分、秒,时针,分针、秒针必须为动态实时指示当前的时间。

一、课程设计目标1、培养综合运用知识和独立开展实践创新的能力;2、培养学生的编程能力、用计算机解决实际问题的能力。

3、培养学生遇到问题,解决问题的能力。

二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、实验设备有L-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆;3、PC操作系统WIN98或WIN2000或WINXP,ARM SDT2.5或ADS1.2集成开发环境,仿真器驱动程序;4、本实验使用实验教学系统的CPU板,在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

三、课程设计预期效果1、完成实验环境搭建;2、分模块调试和编译;3、组合并完善程序;4、联合仿真软件运行程序;5、液晶显示器显示时钟图样,时,分,秒能指向正确的时间。

学生姓名:严维锋专业年级:自动化2008级目录前言 (3)第一章系统设计 (4)第一节课题目标及总体方案 (4)第二节原理框图 (5)第三节程序和芯片的初始化 (5)第四节构建功能模块 (7)第五节 MAIN函数的局部原理分析 (8)第二章实验(测试)结果及讨论 (13)第一节 ADS1.2软件的编译,连接和运行 (13)第二节程序调试 (14)第三章结论 (14)心得体会 (15)参考文献 (16)附录 (17)源程序 (17)前言近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,其强大的控制能力和专业性在通讯、网络、工控、电子等领域发挥着越来越重要的作用。

嵌入式电子闹钟课程设计方案

嵌入式电子闹钟课程设计方案

嵌入式系统综合实验题目基于嵌入式的数字闹钟系统设计学生姓名秦乙学号20071309087学院电子与信息工程学院专业信息工程二O一O年十二月二十七日目录论文标题.................................................... 错误!未定义书签。

摘要和关键词................................................ 错误!未定义书签。

1 绪论 (2)1.1 在信息产业中EDA产生的影响 (2)1.2 中国国内EDA发展情况 (2)2 FPGA简介 (2)2.1 FPGA概述 (2)2.2 FPGA基本结构 (3)2.3 FPGA编程原理 (3)3 设计的总体方案 (4)3.1流程图 (4)3.2模块组成 (4)3.3数字闹钟工作原理 (4)4设计的详细原理 (5)4.1主要模块 (5)4.2功能概述 (5)5设计的步骤和过程 (6)5.1计时模块 (6)5.2校时模块 (7)5.3设定闹钟模块 (8)5.4显示模块设计 (9)5.5蜂鸣器模块设计..................................... 错误!未定义书签。

2 6设计的仿真和结果......................................... 错误!未定义书签。

2 7总结..................................................... 错误!未定义书签。

5 参考文献................................................... 错误!未定义书签。

5基于嵌入式的数字闹钟系统设计秦乙南京信息工程大学电子与信息工程学院信息工程系,南京210044 摘要:随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。

为了在观测时间的同时,能够了解其它与人类密切相关的信息,比如温度、星期、日期等,电子数字钟诞生了,它集时间、日期、星期和温度功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

嵌入式课程设计-- 基于LCD的电子时钟实验

嵌入式课程设计-- 基于LCD的电子时钟实验

课程设计报告题目嵌入式系统项目设计课程设计(报告)任务书(理工科类)Ⅰ、课程设计(报告)题目:基于LCD的电子时钟实验Ⅱ、课程设计(论文)工作内容学习LCD与ARM的LCD的控制器的接口原理,掌握内置LCD控制器驱动编写方法和RTC控制方法,在可行性分析的基础上实现以下功能:1、编写程序实现电子时钟功能,通过实验系统的LCD将时间显示出来;2、仿照给定图形在LCD上显示类似的时钟界面;3、动态显示当前的时间,包括:年、月、日、时、分、秒,时针,分针、秒针必须为动态实时指示当前的时间。

一、课程设计目标1、培养综合运用知识和独立开展实践创新的能力;2、培养学生的编程能力、用计算机解决实际问题的能力。

3、培养学生遇到问题,解决问题的能力。

二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、实验设备有L-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆;3、PC操作系统WIN98或WIN2000或WINXP,ARM SDT2.5或ADS1.2集成开发环境,仿真器驱动程序;4、本实验使用实验教学系统的CPU板,在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

三、课程设计预期效果1、完成实验环境搭建;2、分模块调试和编译;3、组合并完善程序;4、联合仿真软件运行程序;5、液晶显示器显示时钟图样,时,分,秒能指向正确的时间。

学生姓名:严维锋专业年级:自动化2008级目录前言 (3)第一章系统设计 (4)第一节课题目标及总体方案 (4)第二节原理框图 (5)第三节程序和芯片的初始化 (5)第四节构建功能模块 (7)第五节 MAIN函数的局部原理分析 (8)第二章实验(测试)结果及讨论 (13)第一节 ADS1.2软件的编译,连接和运行 (13)第二节程序调试 (14)第三章结论 (14)心得体会 (15)参考文献 (16)附录 (17)源程序 (17)前言近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,其强大的控制能力和专业性在通讯、网络、工控、电子等领域发挥着越来越重要的作用。

天津大学嵌入式课程设计报告材料

天津大学嵌入式课程设计报告材料

嵌入式课程(设计文档)题目:数字电子时钟设计学院专业学号年级姓名2011 年 12月 14 日数字电子时钟设计一实现功能1 基本的数字时钟计时功能2 时间设定功能3 闹钟功能二设计思路数字时钟在lcd上显示,分为三个部分:时钟,分钟和秒钟,为照顾整体美观性,时钟和分钟为统一大字体,在lcd上用矩形拼凑而成,秒钟为小字体,在lcd上用线画出。

秒钟满60自动分钟加一,秒钟重计。

分钟满60后时钟自动加一,分钟重计。

时钟满二十四后自动清零。

在初始时候可以从键盘中输入时钟的时和分进行时间的设定,数字时钟在lcd上显示此时间并以此为基础进行计时。

此时钟还有设定闹钟功能,按下开关键sw2由超级终端开始提示输入闹钟时间并亮起led4,由键盘输入设定时间后当时间到达此设定时间则响起闹钟铃声,关闭sw2,则闹钟停止。

三硬件支持实验设计由MX1下的lcd显示屏,led灯,键盘,开关,音频播放器以及RS232串口通信支持。

四源代码分析#include "INCLUDES.H"#include "mx1_aitc.h"#include "IRQ.h"#include "mx1_gpio.h"#include "mx1_uart.h"#include <string.h>#include "misc.h"#include "mx1_lcdc.h"#include "mx1_ssi.h"#include "wave.h"#include "switch.h"#include "led.h"extern void OSStartTimeTick( void );extern void OSTickISR( void );int sec_1=0,sec_2=0, min_1,min_2,hour_1,hour_2,i;/* 定义所需要的变量*//* 下面定义几个函数*/void Showtime_sec_1(int sec_1)/* 用于显示秒钟第一位的函数*/{MX1_LCDC_DrawRect( 240,0, 280,40, 50, 50, LS_SOLID, FS_SOLID );/* 刷新秒钟第一位的屏幕*/switch(sec_1){case(0):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 5,250, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(1):MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );break;case(2):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,250,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(3):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, LS_SOLID );MX1_LCDC_DrawLine( 270, 5,270, 35, 31, FS_SOLID );MX1_LCDC_DrawLine(250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(4):MX1_LCDC_DrawLine( 250, 5,250, 20, 31, LS_SOLID );MX1_LCDC_DrawLine( 250, 20,270, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );break;case(5):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 5,250, 25, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 20,270,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );}}void Showtime_sec_2(int sec_2)/* 用于显示秒钟第二位的函数*/{MX1_LCDC_DrawRect( 280,0, 320,40, 50, 50, LS_SOLID, FS_SOLID );/* 刷新秒钟第二位的屏幕*/switch(sec_2){case(0):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(1):MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(2):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 20,290,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(3):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(4):MX1_LCDC_DrawLine( 290, 5,290, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(5):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 25, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 20,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(6):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 20,310,35, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(7):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(8):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(9):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );}}void Showtime_min_1(int min_1)///* 用于显示分钟第一位的函数*/{MX1_LCDC_DrawRect( 170,40, 240,200, 50, 50, LS_SOLID, FS_SOLID );/* 刷新分钟第一位的屏幕*/switch( min_1){case(0):MX1_LCDC_DrawRect( 170, 40,230, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 215, 40,230, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 215, 40,230, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 40,230, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 112,185, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );break;case(3):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 40,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(215, 40,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 112,230,200, 31,31, LS_SOLID,FS_SOLID );}}void Showtime_min_2(int min_2)/* 用于显示分钟第二位的函数*/{MX1_LCDC_DrawRect( 240, 40, 320, 200, 50, 50, LS_SOLID,FS_SOLID );/* 刷新分钟第二位的屏幕*/switch(min_2){case(0):MX1_LCDC_DrawRect( 250, 40,310, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 40,265, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 250, 40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 112,265, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID,FS_SOLID );break;case(3):MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 250, 40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 112,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(6):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 112,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(7):MX1_LCDC_DrawRect( 250, 40,310, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(8):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(9):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );}}void Showtime_hour_1(int hour_1)/* 用于显示时钟第一位的函数*/{MX1_LCDC_DrawRect( 10, 40, 70, 200, 50, 50, LS_SOLID, FS_SOLID );/* 刷新时钟第一位的屏幕*/switch( hour_1){case(0):MX1_LCDC_DrawRect( 10, 40,70, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 55, 40,70, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 185,70, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 55, 40,70, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 10, 40,70,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(10,112,70,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(55, 40,70, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 112,25, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 185,70,200, 31,31, LS_SOLID, FS_SOLID );}}void Showtime_hour_2(int hour_2)/* 用于显示时钟第二位的函数*/{MX1_LCDC_DrawRect( 90, 40, 80, 150, 50, 50, LS_SOLID, FS_SOLID );/* 刷新时钟第一位的屏幕*/switch(hour_2){case(0):MX1_LCDC_DrawRect( 90, 40,150, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 40,105, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 112,105, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(3):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 112,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(6):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 112,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(7):MX1_LCDC_DrawRect( 90, 40,150, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(8):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90,112,150,127, 31,31, LS_SOLID, FS_SOLID);MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(9):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID);MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90,112,150,127, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );}}void change(char tmp)/* 将从键盘输入的字符转为整数的函数*/{switch(tmp){case('0'):i=0;break;case('1'):i=1;break;case('2'):i=2;break;case('3'):i=3;break;case('4'):i=4;break;case('5'):i=5;break;case('6'):i=6;break;case('7'):i=7;break;case('8'):i=8;break;case('9'):i=9;}}/* 下面定义两个任务*/#define STK_SIZE_TASK1 256 /* 分配给任务的堆栈大小 */#define STK_SIZE_TASK2 256#define PRIO_TASK1 3 /* 任务的优先级 */#define PRIO_TASK2 4OS_STK StkTask1[STK_SIZE_TASK1]; /* 为任务分配堆栈空间 */OS_STK StkTask2[STK_SIZE_TASK2];void YourTask1( void *pdata )/* 任务一用于显示从键盘输入时间和基本的时钟功能*/{char tmp1,tmp2,tmp3,tmp4;IRQ_Register( OSTickISR, TIMER1_INT ); /* 开启uC/OS-II的时钟中断(必须在第一个运行的任务里进行) */OSStartTimeTick();/* 在下面添加任务内容 */MX1_LCDC_DrawRect(0,0,320,240, 50,50, LS_SOLID, FS_SOLID);MX1_UART_Init( COM1 );MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp1 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp1 );change(tmp1);hour_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp2 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp2 );change(tmp2);hour_2=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp3 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp3 );change(tmp3);min_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp4 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp4 );change(tmp4);min_2=i;Showtime_min_1(min_1);Showtime_min_2(min_2);Showtime_hour_1(hour_1);Showtime_hour_2(hour_2);/* 显示从键盘的输入时间,实现功能一*/MX1_LCDC_DrawCircle(160, 100,5, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawCircle(160, 160,5, 31,31, LS_SOLID, FS_SOLID );while( 1 ){OSTimeDlyHMSM( 0, 0, 1, 0);/* 延时一秒后秒钟加一*//* 下面为实现时钟的逻辑*/sec_2++;if(sec_2>9){sec_1++;sec_2=0;}if(sec_1>5){min_2++;sec_1=0;}if(min_2>9){min_1++;min_2=0;}if(min_1>5){hour_2++;min_1=0;}if(hour_2>9){hour_1++;hour_2=0;}if(hour_1==2&&hour_2==4){hour_1=0;hour_2=0;}Showtime_sec_1(sec_1);Showtime_sec_2(sec_2);Showtime_min_1(min_1);Showtime_min_2(min_2);Showtime_hour_1(hour_1);Showtime_hour_2(hour_2);/* 实现基本时钟功能即功能二*/}}/* 任务二实现闹钟功能*/void YourTask2(void *pdata){int sethour_1,sethour_2,setmin_1,setmin_2;int j=1;char tmpl1,tmpl2,tmpl3,tmpl4;IRQ_Register( OSTickISR, TIMER1_INT ); /* 开启uC/OS-II的时钟中断 */OSStartTimeTick();MX1_UART_Init( COM1 );WAVE_Init( WAVE_BASE_DEFAULT );LED_Init( LED3 );SWITCH_Init( SW2 ); /* 初始化开关 */while(1){if( SWITCH_IS_ON( SW2 )&&j==1 )/* 如果开关二按下超级终端提示依次输入闹钟时间*/{ LED_On( LED4 );j++;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl1 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl1 );change(tmp1);sethour_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl2 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl2 );change(tmp2);sethour_2=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl3 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl3 );change(tmp3);setmin_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl4 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl4 );change(tmp4);setmin_2=i;}elseLED_Off( LED4 );if(hour_1==sethour_1&&hour_2==sethour_2&&min_1==sethour_1&&min_2==sethour_2 )/* 达到闹钟时间后开始放音乐*/{WAVE_Play( );OSTimeDlyHMSM( 0, 0, 0, 500);}}}/* 初始化后,从这里开始执行C代码 */int __main( void ){unsigned int palette[LCDC_CMRAM_SIZE];int i;MX1_AITC_Init(); /* 初始化中断控制器 */IRQ_Init(); /* 初始化中断管理 */OSInit(); /* 初始化uC/OS-II内核数据结构 */MX1_GPIO_Init( MX1_GPIO_PC );MX1_SSI_Init( MX1_SSI1 );//初始化LCDMX1_LCDC_Init(LCDC_PANEL_WIDTH, LCDC_PANEL_HEIGHT,LCDC_INIT_STARTX, LCDC_INIT_STARTY, LCDC_VPW, LCDC_PANEL_CONF, LCDC_BPP );// 初始化调色板for( i=0; i<16; i++ ){palette[i] = RGB( i, 0, 0 );palette[i+16] = RGB( 0, i, 0 );palette[i+32] = RGB( 0, 0, i );palette[i+48] = RGB( i, i, i );}MX1_LCDC_CMRAM_Set( palette );/* 建立一个任务 */OSTaskCreate( YourTask1, 0, &StkTask1[STK_SIZE_TASK1-1], PRIO_TASK1 );OSTaskCreate( YourTask2, 0, &StkTask2[STK_SIZE_TASK2-1], PRIO_TASK2 );OSStart(); /* 开始调度 */return 0;}五实验现象初始化后,超级终端显示提示时间设定,由键盘输入后,开始计时功能,屏幕上显示时,分,秒在计时阶段若打开开关sw2则提示输入设定闹钟值,输入后当时间到达闹钟值时音乐响起,关闭sw2,则闹钟停止。

嵌入式包括时分秒的数字时钟课程设计

嵌入式包括时分秒的数字时钟课程设计

嵌入式包括时分秒的数字时钟课程设计答案:嵌入式包括时分秒的数字时钟的课程设计可以通过使用微控制器和相关的编程语言来实现。

以下是一个基本的课程设计方案,用于设计一个嵌入式数字时钟。

1. 硬件设计:- 使用一个微控制器,如Arduino或Raspberry Pi,作为主控制器。

- 连接一个实时时钟(RTC)模块,以获取准确的时间信息。

- 连接一个数码管显示器,用于显示时、分、秒的数字。

- 连接适当的按钮或开关,用于设置时间和控制其他功能。

2. 软件设计:- 使用适当的编程语言,如C或Python,编写嵌入式软件。

- 初始化RTC模块,并设置初始时间。

- 通过读取RTC模块的时间信息,更新时、分、秒的变量。

- 将时、分、秒的变量转换为适当的格式,并在数码管显示器上显示。

- 实现按钮或开关的功能,例如设置时间、切换显示模式等。

- 使用循环结构,不断更新时间和响应用户输入。

扩展和深入分析:在设计嵌入式数字时钟时,可以进一步扩展和改进功能,以满足特定需求和提供更好的用户体验。

以下是一些可能的扩展和深入分析方向:1. 闹钟功能:- 添加闹钟功能,允许用户设置特定时间的闹钟。

- 当闹钟时间到达时,触发声音或震动提示。

2. 温度和湿度显示:- 连接温度和湿度传感器,显示当前环境的温度和湿度信息。

3. 亮度控制:- 添加光敏电阻或其他传感器,根据环境光线调整数码管显示器的亮度。

4. 日期和星期显示:- 使用RTC模块提供的日期信息,显示当前日期和星期。

5. 时钟同步:- 使用无线通信模块,如Wi-Fi或蓝牙,与互联网时间服务器同步时钟。

6. 电池备份:- 添加电池备份电路,以保持时钟运行,即使主电源中断。

通过以上扩展和改进,嵌入式数字时钟可以成为一个更加功能强大和实用的设备。

这些功能可以根据具体需求进行选择和实现,以满足不同用户的需求。

总结:嵌入式包括时分秒的数字时钟的课程设计可以通过硬件和软件的结合来实现。

硬件设计包括选择适当的微控制器、实时时钟模块、数码管显示器和按钮开关。

物联网嵌入式技术教案8.3_实现多功能电子时钟功能_教案 V1.0

物联网嵌入式技术教案8.3_实现多功能电子时钟功能_教案 V1.0
《物联网
学年度 第学期
项目名称
项目八 多功能电子时钟
授课教师
授课时间
课题名称
8.3实现多功能电子时钟功能
授课班级
授课类型
新授课
课时
3
教学
目标
知识目标
1.了解I2C通信协议;
2.掌握通过I2C控制PCF8563时钟芯片过程。
能力目标
1.能根据MCU编程手册,通过STM32CubeMX软件,准确配置引脚;
引导问题:
(1)提问学生总线上的设备应该是怎么连接的?
(2)提问怎样确认数据开始和结束传输?
(3)怎样确认一位的数据是正确的?
2.讲述I2C通信协议的启动条件、位传送、标志位;
3.详细讲述I2C总线协议的主从设备数据的读写。
听讲
学生通过教师设计的“引导问题”、“练一练”,带着问题学习任务实施所需的知识点,在必要时即时动手实践,可有效地提高n)
一、经验分享(5min,PPT第55页)
当天轮到的小组选派代表分析本组实施经验。
二、自评和互评(5min,PPT第55页)
1.小组各成员参照评价标准完成自评;
2.完成对其他小组的评价。
各组自评、互评
学生通过对自己的实施过程和经验的介绍,锻炼自我展示能力。
课堂任务单
4.培养可持续发展能力:利用书籍或网络上的资料帮助解决实际问题。
教学
重点
1.PCF8563时钟模块的知识。
教学
难点
PCF8563时钟模块的寄存器和时间获取。
教法与
学法
讲授法、任务驱动法、讨论法等。
教学手段及资源
教材、PPT、课堂任务单、思维导图、实操视频。
学情
分析

嵌入式课程设计——基于DS1302数字钟

嵌入式课程设计——基于DS1302数字钟

嵌入式课程设计报告题目:基于DS1302数字钟姓名:学号:班级:电子101专业:电子信息工程指导老师:提交时间: 2013-12-13组员:目录摘要................................................. - 1 -1.引言............................................... - 3 -2.硬件电路设计:..................................... - 4 - 2.1 DS1302 ........................................ - 4 - 2. 2 AT89C52 ...................................... - 6 - 2. 3 LCD1602 ...................................... - 7 -2. 4 设计方案 ..................................... - 8 -3.软件程序设计....................................... - 9 - 3.1主程序.......................................... - 9 - 3.2 LCD1602程序:................................. - 10 -3.3 DS1302应用程序:.............................. - 13 -4.课设的心得体会.................................... - 17 - 参考文献............................................ - 20 -摘要本设计选取串行接口时钟芯片 DS1302 与单片机同步通信构成数字时钟电路并用LCD1602显示。

基于51单片机的电子时钟_嵌入式课程设计报告_西安科技大学_网络工程

基于51单片机的电子时钟_嵌入式课程设计报告_西安科技大学_网络工程

课程设计:嵌入式系统应用题目名称:电子时钟姓名:学号:班级:网络工程完成时间:2013年12月31日1设计的任务1.1设计内容基于已经焊好的STC89C52RC单片机,以单片机控制技术设计电子时钟。

1.2 设计目标用LCD上显示相应的时间,实现显示年、月、日、星期、时、分、秒的功能,通过键盘来控制实现年、月、日、星期、时、分、秒校准功能。

2 设计的过程2.1 基本结构2.1.1 STC89C52介绍采用STC89C52单片机作为主控制系统;采用DS1302作为时钟芯片;采用1602 LCD液晶作为显示器件。

STC89C52原理图主要功能:STC89C52是由深圳宏晶科技公司生产的与工业标准MCS-51指令集和输出管脚相兼容的单片机。

STC89C52主要功能如表所示。

引脚介绍:①主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源GND(Pin20):接地线②外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端③控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。

ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

④可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

P0口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7STC89C52最小系统:最小系统是指能进行正常工作的最简单电路。

嵌入式闹钟课程设计报告

嵌入式闹钟课程设计报告

嵌入式闹钟课程设计报告一、课程目标知识目标:1. 理解嵌入式闹钟的基本原理,掌握其核心组件的功能与作用。

2. 学会使用编程语言(如C语言)编写嵌入式闹钟程序,实现对时间的显示、设置和闹钟提醒功能。

3. 了解嵌入式系统的基本概念,掌握常见的输入输出接口及其应用。

技能目标:1. 能够运用所学知识设计和制作一个具有实际功能的嵌入式闹钟。

2. 培养学生的动手操作能力,学会使用相关工具和仪器进行硬件焊接、调试和程序下载。

3. 提高学生的团队协作能力,学会在项目过程中进行有效沟通和分工合作。

情感态度价值观目标:1. 培养学生对嵌入式系统的兴趣,激发学生学习编程和电子技术的热情。

2. 培养学生的创新精神和实践能力,鼓励学生勇于尝试、不断探索。

3. 增强学生的自信心和责任感,使学生在面对挑战时保持积极的态度。

课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,培养学生的动手能力和创新能力。

学生特点:初中生,具备一定的电子和编程基础,对新鲜事物充满好奇心,喜欢动手实践。

教学要求:注重理论与实践相结合,强调学生的主动参与和动手实践,关注个体差异,提高学生的综合素质。

通过本课程的学习,使学生能够掌握嵌入式闹钟的制作方法,培养其创新意识和团队协作能力。

教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. 嵌入式系统基本概念:介绍嵌入式系统的定义、组成及应用领域,使学生了解嵌入式系统的基本知识。

- 教材章节:第1章 嵌入式系统概述2. 嵌入式闹钟硬件设计:讲解闹钟所需的主要硬件组件,如微控制器、时钟芯片、显示屏、按键等,并介绍硬件电路的搭建方法。

- 教材章节:第2章 嵌入式系统硬件设计3. 嵌入式编程基础:教授C语言编程基础,包括变量、数据类型、运算符、控制语句等,为编写嵌入式闹钟程序打下基础。

- 教材章节:第3章 嵌入式编程基础4. 时间显示与设置:讲解时间的表示方法、时间设置与显示的实现,使学生掌握闹钟时间调整与显示功能的设计。

嵌入式课程设计报告数字时钟本科论文

嵌入式课程设计报告数字时钟本科论文

数字时钟课程设计报告课程设计名称:数字时钟系别:系姓名:班级:学号:_ _成绩:_指导教师:开课时间:2015-2016学年二学期目录一.引言 (1)1.1系统背景 (1)1.2 系统功能 (1)二.系统总体方案 (2)2.1MKL25Z128VLK4微控制器介绍 (2)2.2系统硬件框图 (2)三.系统硬件设计 (3)3.1定时器(TPM)模块 (3)3.1.1计时器/定时器的工作原理 (3)3.1.2 TPM模块功能概述 (3)3.2 串行通信(UART)模块 (4)3.2.1串行通信RS-232总线标准 (4)3.2.2MAX232芯片进行电平转换基本原理 (4)3.3液晶显示模块 (5)3.4单片机(MCU)模块 (7)3.4.1 MC9S08AW60单片机性能概述 (7)四.软件设置 (8)4.1主函数(main.c) (8)4.2中断子程序(isr.c) (10)4.3LCD子程序(lcd.c) (12)4.4定时器(timer.c) (15)4.5 定时器/脉宽调制子程序(tpm.c) (16)4.7运行结果 (28)五.总结 (28)参考文献 (29)一.引言1.1系统背景电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。

而且向着精确、低功耗、多功能发展。

基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。

从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。

另外,程序较为简洁,具有可靠性和较好的可读性。

如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。

数字时钟系统可采用数字电路实现,也可以采用单片机来完成。

嵌入式系统课程设计报告

嵌入式系统课程设计报告

嵌入式系统课程设计报告摘要:本次设计的嵌入式系统为基于单片机的数字时钟设计。

系统主要由AT89C51单片机、LCD液晶显示屏和RTC模块组成。

通过组合这些元器件,实现了时钟的精确显示和功能操作。

本文将详细介绍设计过程中所采用的硬件和软件设计及其实现过程,最终得到了效果良好的数字时钟。

一、设计目的本次课程设计的主要目的是熟练掌握嵌入式系统设计的基本流程和方法。

同时通过本次设计,学员还需对AT89C51单片机及RTC模块等嵌入式系统所需的元器件有所了解,并能够熟练地进行元器件的选型、电路设计、软件编程及系统调试等工作。

二、设计原理1. 系统硬件设计原理数字时钟主要由AT89C51单片机、LCD液晶显示屏和RTC模块组成,它们之间的连接如下图所示:图1 数字时钟系统框图其中,AT89C51单片机是整个系统的核心部件,其外部晶振采用11.0592MHZ的振荡器,为系统提供时钟信号。

RTC模块采用DS1302芯片,它具有精度高、稳定性好、且具有多种测试功能的特点,可以提供更加精确的时间信息。

时钟的显示模块采用16×2字符型LCD液晶显示屏。

2. 软件设计原理软件设计主要包括两部分——RTC模块的驱动程序和数字时钟主程序的编写。

其中,RTC模块的驱动程序主要实现对DS1302芯片的驱动,包括寄存器的读写、校时以及晶振稳定等功能。

数字时钟主程序主要是对AT89C51单片机的程序编写,实现数字时钟的显示和操作。

三、系统设计过程系统设计主要分为硬件设计和软件设计两个方面的工作,具体步骤如下:1. 硬件设计(1) 按照电路原理图进行元器件的选型、连线以及设备安装,需要注意每个元器件的接口定义和功能实现。

(2) 对DS1302芯片进行驱动程序的编写,实现对时间信息的读取和校时功能。

(3) 对LCD液晶显示模块进行驱动程序的编写,实现数字时钟的显示和操作。

2. 软件设计(1) 编写RTC模块的驱动程序,在AT89C51单片机调用RTC 模块时,直接调用驱动程序。

基于嵌入式系统的LCD电子时钟设计

基于嵌入式系统的LCD电子时钟设计

基于嵌入式系统的LCD电子时钟设计————————————————————————————————作者:————————————————————————————————日期:基于嵌入式系统的LCD电子时钟设计院系: 物理工程学院年级: 2009级专业:测控技术与仪器学号: 20092240111姓名:雷亚东指导老师: 田增国目录前言 (1)第一章课题目标及总体方案 (2)第二章系统设计 (3)1、系统结构原理 (3)2、硬件组成与设计 (4)3、软件组成与设计 (4)第三章实验结果 (5)心得体会 (5)参考文献 (5)附录 (6)前言嵌入式系统反映了当代最新的技术水平.嵌入式系统不仅和一般的PC机上的应用系统不同,就是针对不同的具体应用而设计的嵌入式系统之间差别也很大。

嵌入式系统一般功能单一,简单而且兼容性方面要求不高,但是在大小和成本方面限制较多。

在本实验中以arm7处理器S3C44B0X和液晶显示屏LRH9J515XA STN/BW为基础,设计实现了带农历的实时时钟电路。

当有外部中断产生时,串口与S3C44B0X进行通信,实现更改时钟时间,且应用公历转农历的算法,实现将农历时间实时显示在LCD上。

另外还具有闹铃、星期提示功能,基本上能够满足人们的需求。

关键字:arm7 S3C44B0X LCD 农历串口第一章课题目标及总体方案一、目的●了解实时时钟的硬件控制原理及设计方法。

●掌握S3C44B0X处理器的RTC模块程序设计方法.●初步掌握液晶显示屏的使用及其电路设计方法。

●掌握S3C44B0X处理器的LCD控制器的使用。

●通过实验掌握液晶显示文本和图形的方法以及程序设计的方法.二、设备1。

硬件:Embest EDUKIT —Ⅱ/Ⅲ实验平台,Embest ARM标准/增强型仿真器套件,PC机。

2. 软件:Embest IDE Pro 2004集成开发环境,Windows98/2000/NT/XP操作系统。

嵌入式秒表课程设计

嵌入式秒表课程设计

嵌入式秒表 课程设计一、课程目标知识目标:1. 学生理解嵌入式系统基本原理,掌握秒表功能的相关算法和编程方法。

2. 学生了解并掌握嵌入式系统中时间计算、计时器使用等知识。

3. 学生掌握嵌入式系统设计中硬件与软件的协同工作原理。

技能目标:1. 学生能够运用所学知识,设计并实现一个具备基本秒表功能的嵌入式系统。

2. 学生能够运用编程软件和开发板进行程序编写、调试与优化。

3. 学生能够通过实际操作,培养动手能力和解决问题的能力。

情感态度价值观目标:1. 学生培养对嵌入式系统的兴趣,激发探索精神和创新意识。

2. 学生在学习过程中,培养团队合作意识,学会与他人共同解决问题。

3. 学生通过课程学习,认识到科技发展对社会的重要性,增强社会责任感。

课程性质:本课程为实践性课程,注重理论联系实际,培养学生的动手操作能力和创新能力。

学生特点:学生具备一定的编程基础,对嵌入式系统有初步了解,好奇心强,喜欢动手实践。

教学要求:教师需引导学生结合课本知识,通过实际操作,掌握嵌入式系统设计方法和技巧。

在教学过程中,注重培养学生的创新思维和团队协作能力。

课程目标分解为具体学习成果,以便于教学设计和评估。

二、教学内容1. 嵌入式系统基本原理回顾:引导学生复习嵌入式系统的工作原理,硬件与软件的协同工作,重点掌握计时器原理及应用。

相关教材章节:第一章 嵌入式系统概述,第三节 嵌入式系统硬件与软件协同设计。

2. 秒表功能算法分析:讲解秒表功能涉及的时间计算方法,如计时、暂停、复位等,并通过实例进行分析。

相关教材章节:第二章 嵌入式系统编程基础,第四节 算法设计与分析。

3. 嵌入式系统编程实践:指导学生运用所学知识,编写具备秒表功能的程序,并在开发板上进行调试与优化。

相关教材章节:第三章 嵌入式系统编程实践,第五节 嵌入式系统编程案例。

4. 硬件与软件协同设计:介绍如何在嵌入式系统中实现硬件与软件的协同设计,以实现秒表功能。

相关教材章节:第四章 嵌入式系统硬件设计,第六节 硬件与软件协同设计实例。

嵌入式系统原理及应用课程设计

嵌入式系统原理及应用课程设计

嵌入式系统原理及应用课程设计报告题目:电子时钟的设计与实现班级:文专电0931姓名:杨阳学号:200990607145试验台号:10 ___________________ 指导老师:_________________ 程序成绩: _______________________ 报告成绩: _______________________ 总成绩:优良中及格不及格2012年2月25日•课程设计目的通过该课程设计将嵌入式系统原理及应用课程中所学的处理器和接口等技术应用于实际设计中。

通过中断、PWM定时器、串口、SIO、GPIO等技术在实验平台上进行综合设计,在理论和实验的基础上进一步提高综合设计能力。

二.课程设计内容及功能要求1.通过一个PWM定时计数器,采用定时中断的功能,设计能够在LED上进行时分秒显示的时钟;2.通过键盘实现对钟的功能;3.实现闹钟的功能,闹钟的时间由键盘输入进行设定;4.将时钟在超级终端上显示;时间的设定可以通过超级终端实现;三•功能实现1.总体功能框图开始设置中断| A2.详细设计:(将所设计的各部分的功能程序框图及相关程序代码进行详细的描述)①.#i nclude"uhal.h"#in clude"myuart.h"#i nclude"KeyBoard.h"#i nclude"Timer.h"#in clude"lsr.h"#i nclude"44b.h"#i nclude "Zlg7289.h"#i nclude "def.h"#in clude "lcd320.h" int Timer3INTCou nt=0;int hour = 0 ;int mi nute = 0 ;#pragma import__use_ no _semihost in g_swi) // en sure no functions that use semihosti ng int main( void){int clock_h = 23 ;int clock_m = 59 ;int clock_s = 0 ;int key ;int val=0;ARMTargetI ni t(); //开发版初始化Zlg7289_Reset();Ini t_Timer3(100,16,40000,20000);INTS_OFF();//Disable in terrupt in PSRSetlSR」nterrupt(INT_TIMER3_OFFSET, Timer3_ISR,0);Open_INT_GLOBAL();Open_INT(BIT_TIMER3);INTS_ON();//E nable in terrupt in PSRStart_Timer3();Delay(1000);Delay(1000);Delay(1000);Uart_Pri ntf("\n");LCD 」nit(); LCD_ChangeMode(DspTxtMode);//转换LCD 显示模式为文本显示模式while(1){Delay(1000);Delay(1000);Delay(1000); Delay(1000);Delay(1000);Delay(1000);Timer3INTCou nt = Timer3INTCou nt + 1 ;if(Timer3INTCou nt>59)Timer3INTCo unt = 0 ;}if( key == 10 ) //秒设置,键盘 2按下时扫描值为10{ Delay(1000);Delay(1000);Delay(1000);// 延时让数码管频率显示可见。

《嵌入式系统》课程设计电子时钟系统设计

《嵌入式系统》课程设计电子时钟系统设计

《嵌入式系统》课程设计说明书电子时钟系统设计学院:学生姓名:指导教师:职称专业:班级:学号:完成时间:湖南工学院嵌入式系统课程设计课题任务书指导教师学生姓名罗朗课题名称电子时钟系统设计内容及任务一、目标在GEC210开发板上设计一个基于QT的电子时钟系统来显示当前的系统时间。

二、任务根据控制要求,明确设计任务,拟定设计方案与进度计划,运用所学的理论知识,进行电子时钟系统原理设计、硬件系统设计、软件系统设计、创新设计,提高理论知识工程应用能力、系统调试能力、分析问题与解决问题的能力。

主要内容包括:1.嵌入式交叉开发环境搭建。

2.Linux操作系统的移植。

3.根据需求确定外围模块设计并完成相应驱动开发。

4.应用程序原理及框架设计。

5.Linux下应用程序编写及移植。

6.系统总体功能调试。

7.编写设计说明书。

三、要求1.本系统显示结果示例如下:摘要本次课设是基于ARM嵌入式开发板设计一个具有模拟表盘与数字显示的电子时钟,与传统的机械钟相比,它具有走时准确、显示直观,无机械转动装置等优点。

该电子时钟系统首先是在QT上通过API函数和C语言进行设计,然后将嵌入式Linux程序下载到开发板上,这样就能够实现简单的计时,并且时间与系统时间一致。

关键词:ARM嵌入式电子时钟 QT 计时目录1 绪论...................................................... 错误!未定义书签。

1.1 电子时钟的简介............................. 错误!未定义书签。

1.2 设计背景................................... 错误!未定义书签。

1.3 设计目的及意义............................. 错误!未定义书签。

2 嵌入式Linux和QT系统............................ 错误!未定义书签。

嵌入式电子闹钟()时钟课程设计

嵌入式电子闹钟()时钟课程设计

#include<reg52.h> //头文件#include<intrins.h>#define uchar unsigned char //宏定义#define uint unsigned int//位定义sbit rs=P2^5; //液晶位定义sbit lcden=P2^7;sbit s1=P2^0; //时间功能切换按键sbit s2=P2^1; //按键加sbit s3=P2^3; //按键减sbit s4=P2^4; //闹钟功能切换键sbit rst=P1^5; //ds1302引脚定义sbit io=P1^6;sbit sclk=P1^7;sbit beep=P3^0; //蜂鸣器uchar num,count,shi,fen,miao,s1num,s2num,year,month,day,week,flag,flag1,year1,month1,day1,week1,shi1,fen1,miao1,year2,month2,day2,week2,shi2,fen2,miao2,year5,month5,day5,week5,shi5,fen5,miao5,wk,ashi,afen; //参数定义uchar code table[]="20 - - "; //液晶固定显示uchar code table1[]=" : : 00:00";/*uchar time_dat[7]={12,1,6,6,12,59,59}; //年周月日时分秒uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};*/void write_com(uchar com); //液晶写指令函数void write_data(uchar date); //液晶写数据函数void write_ds1302(uchar add,uchar dat); //ds1302芯片写指令函数void set_rtc(); //ds1302时间设置函数void time_pros(); //ds1302进制转换函数void read_rtc(); //ds1302读时间函数void alarm(); //闹钟函数void delay(uint z) //延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void init() //初始化{lcden=0;flag=0;flag1=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80); //液晶固定显示,第一行 for(num=0;num<14;num++){write_data(table[num]);delay(5);}write_com(0x80+0x40); //液晶显示第二行for(num=0;num<20;num++){write_data(table1[num]);delay(5);}}void write_com(uchar com)//1602液晶写指令{rs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date)//1602液晶写写数据{rs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void write_sfm(uchar add,uchar date)//时分秒{uchar shi3,ge;shi3=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi3);write_data(0x30+ge);}void write_nyr(uchar ad,uchar date)//年月日{uchar shi4,ge2;shi4=date/10;ge2=date%10;write_com(0x80+ad);write_data(0x30+shi4);write_data(0x30+ge2);}void write_week(uchar wk) //星期按西方星期设置星期天为第一天{write_com(0x80+11);switch(wk){case 1: write_data('S');delay(5);write_data('U');delay(5);write_data('N');break;case 2: write_data('M');delay(5);write_data('O');delay(5);write_data('N');break;case 3: write_data('T');delay(5);write_data('U'); delay(5);write_data('E'); break;case 4: write_data('W'); delay(5);write_data('E'); delay(5);write_data('D'); break;case 5: write_data('T'); delay(5);write_data('H'); delay(5);write_data('U'); break;case 6: write_data('F'); delay(5);write_data('R'); delay(5);write_data('T'); break;case 7: write_data('S'); delay(5);write_data('A'); delay(5);write_data('T'); break;}}void keyscan() //按键函数{if(s1==0){delay(5);if(s1==0){write_com(0x0f);s1num++; //记录按键次数flag=1;flag1=1;while(!s1);switch(s1num)//光标闪烁点定位{case 1:write_com(0x80+0x40+6); //秒break;case 2:write_com(0x80+0x40+3); //分break;case 3:write_com(0x80+0x40+0); //时break;case 4:write_com(0x80+11); //星期break;case 5:write_com(0x80+8); //日break;case 6:write_com(0x80+5); //月break;case 7:write_com(0x80+2); //年break;case 8:s1num=0;write_com(0x0c);//设置开显示光标不显示关闭时间设置set_rtc();flag=0;break;}}}if(s1num!=0) //按键加减{if(s2==0) //加按键函数{delay(10);if(s2==0){while(!s2);switch(s1num) //根据功能键相应次数做出调节{case 1: miao++; //秒加if(miao==60)miao=0;write_sfm(6,miao);write_com(0x80+0x40+6);break;case 2: fen++; //分加if(fen==60)fen=0;write_sfm(3,fen);write_com(0x80+0x40+3);break;case 3: shi++; //时加if(shi==24)shi=0;write_sfm(0,shi);write_com(0x80+0x40+0);break;case 4: week++; //星期加 if(week==8)week=1;write_week(week);write_com(0x80+11);break;case 5: day++; //日加if(day==32)day=1;write_nyr(8,day);write_com(0x80+8);break;case 6: month++; //月加if(month==13)month=1;write_nyr(5,month);write_com(0x80+5);break;case 7: year++; //年加 if(year==100)year=0;write_nyr(2,year);write_com(0x80+2);break;}}}if(s3==0) //减按键函数同上 {delay(10);if(s3==0){while(!s3);switch(s1num) //根据功能键相应次数做出调节{case 1: miao--;if(miao==-1)miao=59;write_sfm(6,miao);write_com(0x80+0x40+6);break;case 2: fen--;if(fen==-1)fen=59;write_sfm(3,fen);write_com(0x80+0x40+3);break;case 3: shi--;if(shi==-1)shi=23;write_sfm(0,shi);write_com(0x80+0x40+0); break;case 4: week--;if(week==-1)week=7;write_week(week);write_com(0x80+11);break;case 5: day--;if(day==-1)day=31;write_nyr(8,day);write_com(0x80+8);break;case 6: month--;if(month==-1)month=12;write_nyr(5,month);write_com(0x80+5);break;case 7: year--;if(year==-1)year=99;write_nyr(2,year);write_com(0x80+2);break;}}}}if(s4==0) //闹钟按键{delay(5);if(s4==0){write_com(0x0f); //光标闪烁s2num++; //记录按键次数flag=1;while(!s4);switch(s2num)//光标闪烁点定位{case 1:write_com(0x80+0x40+13); //分break;case 2:write_com(0x80+0x40+10); //时break;case 3:write_com(0x0c); //关闭闹钟设置 flag=0;s2num=0;break;}}}if(s2num!=0) //闹钟设置{if(s2==0) //闹钟加{delay(10);if(s2==0){while(!s2);switch(s2num) //根据功能键相应次数做出调节{case 1: afen++;if(afen==60)afen=0;write_sfm(13,afen);write_com(0x80+0x40+13);break;case 2: ashi++;if(ashi==24)ashi=0;write_sfm(10,ashi);write_com(0x80+0x40+10); break;}}}if(s3==0) //闹钟减{delay(10);if(s3==0){while(!s3);switch(s2num) //根据功能键相应次数做出调节 {case 1: afen--;if(afen==-1)afen=59;write_sfm(13,afen);write_com(0x80+0x40+13); break;case 2: ashi--;if(ashi==-1)ashi=23;write_sfm(10,ashi);write_com(0x80+0x40+10); break;}}}}}void wirte_ds1302_byte(uchar dat) //ds1302字节写{uchar i;for(i=0;i<8;i++){sclk=0;io=dat&0x01;dat=dat>>1;sclk=1;}}void write_ds1302(uchar add,uchar dat) //ds1302写函数{rst=0;_nop_();// 空操作sclk=0;_nop_();rst=1;_nop_();wirte_ds1302_byte(add);wirte_ds1302_byte(dat);rst=0;io=1;sclk=1;}uchar read_ds1302(uchar add) //ds1302读函数{uchar i,value;rst=0;_nop_();// 空操作sclk=0;_nop_();rst=1;_nop_();wirte_ds1302_byte(add);for(i=0;i<8;i++){value=value>>1;sclk=0;if(io){value=value|0x80;}sclk=1;}rst=0;_nop_();// 空操作sclk=0;_nop_();io=1;return value;}void set_rtc() //ds1302时间设置{write_ds1302(0x8e,0x00); //关写保护year1=year/10; //转换为十六进制year=year%10;year=year+year1*16;write_ds1302(0x8c,year);week1=week/10;week=week%10;week=week+week1*16;write_ds1302(0x8a,week);month1=month/10;month=month%10;month=month+month1*16;write_ds1302(0x88,month);day1=day/10;day=day%10;day=day+day1*16;write_ds1302(0x86,day);shi1=shi/10;shi=shi%10;shi=shi+shi1*16;write_ds1302(0x84,shi);fen1=fen/10;fen=fen%10;fen=fen+fen1*16;write_ds1302(0x82,fen);miao1=miao/10;miao=miao%10;miao=miao+miao1*16;write_ds1302(0x80,miao);write_ds1302(0x8e,0x80); //开写保护}void read_rtc() //从ds1302中读时间{year2=read_ds1302(0x8d);week2=read_ds1302(0x8b);month2=read_ds1302(0x89);day2=read_ds1302(0x87);shi2=read_ds1302(0x85);fen2=read_ds1302(0x83);miao2=read_ds1302(0x81);}void time_pros() //从ds1302中读出的时间转换为十进制{year5=year2/16;year2=year2%16;year2=year2+year5*10;month5=month2/16;month2=month2%16;month2=month2+month5*10;day5=day2/16;day2=day2%16;day2=day2+day5*10;shi5=shi2/16;shi2=shi2%16;shi2=shi2+shi5*10;fen5=fen2/16;fen2=fen2%16;fen2=fen2+fen5*10;miao5=miao2/16;miao2=miao2%16;miao2=miao2+miao5*10;}void display() //显示函数{write_sfm(6,miao2);write_com(0x80+0x40+6);write_sfm(3,fen2);write_com(0x80+0x40+3);write_sfm(0,shi2);write_com(0x80+0x40+0);write_week(week2);write_com(0x80+11);write_nyr(8,day2);write_com(0x80+8);write_nyr(5,month2);write_com(0x80+5);write_nyr(2,year2);write_com(0x80+2);if((ashi==shi2)&&(afen==fen2)){alarm();}}void alarm() // 闹钟{beep=0;delay(1000);beep=1;}void main() //主函数{init(); //初始化 while(1){keyscan(); //按键函数if(flag==0){keyscan();read_rtc();time_pros();display();}}}。

嵌入式时钟设计

嵌入式时钟设计

摘要本文说明为多功能时钟设计方案,基于S3C2410结合RTC模块,IIC(控制小键盘和数码管等)来做具备定期功能的实时时钟。

实时时钟(RTC)单元在系统电源关闭的情况下可以在备用电池下工作。

RTC 可以使用STRB/LDRB ARM操作传输二进制码十进制数的8 位数据给CPU。

数据包括秒、分钟、小时、日期、天、月、年的时间信息。

RTC 单元可以在32.768KHz 的外部晶振下工作,可以可以执行报警功能。

关键词:多功能时钟功能时钟;S3C2410;RTC;IIC目录一、实验题目分析 (1)1.1 问题描述 (1)1.2功能分析 (1)1.3 开发平台及工具介绍 (1)二、实验概要设计 (1)2.1 实验基本原理 (1)2.2 实验电路图 (4)三、实验详细过程 (6)3.1 具体实验过程和内容 (6)3.2 程序流程图 (6)3.3 实验和程序问题分析 (7)四、实验输出界面 (7)五、设计心得体会 (9)六、讨论及进一步研究建议 (9)七、参考文献 (10)附录:主要程序代码: (11)一、实验题目分析1.1 问题描述结合实时时钟,IIC(控制小键盘和数码管等)来做具备定期功能的实时时钟。

1.2功能分析至少完成以下功能:(1)能显示每秒的时刻(2)按下功能键能切换显示日期(3)能设置定时闹钟,定时到产生某种输出(4)可以扩展考虑加入外部中断,如停止闹钟功能等。

1.3 开发平台及工具介绍实验器材:CITK2410开发板,JTAG连接线,调试器,并口数据线,串口数据线开发软件:ADS1.2集成开发环境二、实验概要设计2.1 实验基本原理IIC总线:IIC总线的器件分为主器件和从器件。

主器件的功能是启动在总线上传送数据,并产生时钟脉冲,以允许与被寻址的器件进行数据传送。

SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

}#include<reg52。

h 〉 // #include<intrins 。

h 〉uchar num ,count,shi,fen,miao ,s1num ,s2num,year,month,day ,week,flag,flag1,year1,month1, day1,week1,shi1,fen1,miao1,year2,month2,day2,week2,shi2,fen2,miao2,year5,month5, day5,week5,shi5,fen5,miao5,wk ,ashi,afen; // 参数定义 uchar code table []="20 — — "; // uchar code table1[]=" : : 00:00”; /*uchar time_dat[7]={12,1,6,6,12,59,59}; // uchar write_add [7]={0x8c ,0x8a,0x88,0x86,0x84,0x82,0x80}; uchar read_add [7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};*/ void write_com (uchar com); // void write_data(uchar date ); //void write_ds1302(uchar add,uchar dat ); //ds1302void set_rtc (); //ds1302 void time_pros(); //ds1302 void read_rtc (); //ds1302 void alarm (); // void delay(uint z)//{uint x,y ;for (x=z;x>0;x-—) for(y=110;y 〉0;y--);#define uchar unsigned char// #define uint unsigned int // 位定义 sbit rs=P2^5; sbit lcden=P2^7; sbit s1=P2^0; sbit s2=P2^1; sbit s3=P2^3; sbit s4=P2^4; sbit rst=P1^5; sbit io=P1^6; sbit sclk=P1^7; sbit beep=P3^0; // // // // // //ds1302 //宏定义液晶位定义 时间功能切换按键 按键加 按键减 闹钟功能切换键 引脚定义 蜂鸣器 头文件 液晶固定显示年周月日时分秒 液晶写指令函数 液晶写数据函数芯片写指令函数 时间设置函数 进制转换函数 读时间函数 闹钟函数 延时函数}void write_com(uchar com)//1602 液晶写指令 {rs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;}void write_data(uchar date)//1602 液晶写写数据 {rs=1; P0=date; delay (5); lcden=1; delay(5); lcden=0;//void init() {lcden=0; flag=0; flag1=0;write_com(0x38); write_com (0x0c ); write_com(0x06); write_com (0x01); write_com (0x80); // for(num=0;num<14;num++) {write_data(table[num ]); delay(5); }write_com (0x80+0x40); // for(num=0;num 〈20;num++) {write_data(table1[num]); delay (5);}初始化液晶固定显示,第一行液晶显示第二行void write_sfm(uchar add,uchar date)// 时分秒{uchar shi3,ge; shi3=date/10; ge=date%10;write_com(0x80+0x40+add); write_data(0x30+shi3);write_data(0x30+ge);}void write_nyr(uchar ad,uchar date)// 年月日{uchar shi4,ge2;shi4=date/10;ge2=date%10; write_com(0x80+ad); write_data(0x30+shi4); write_data(0x30+ge2);}void write_week(uchar wk) // 星期按西方星期设置{星期天为第一天write_com(0x80+11);switch(wk){case 1:write_data('S’); delay(5);write_data('U’); delay(5);write_data(’N’); break;case 2: write_data('M’); delay(5);write_data('O’); delay(5);write_data('N’); break;case 3: write_data('T');delay(5); write_data('U'); delay(5); write_data('E'); break;case 4:write_data('W’); delay(5);write_data(’E’); delay(5);write_da ta('D’); break;case 5: write_data('T'); delay(5);write_data(’H’); delay(5);write_data('U’); break;case 6: write_data('F’); delay(5);write_data('R’); delay(5);write_data('T’); break;case 7: write_data('S'); delay(5);write_data(’A'); delay(5);write_data(’T'); break;}}// 按键函数void keyscan(){if(s1==0){delay(5);if(s1==0)write_com(0x0f); s1num++; //flag=1;flag1=1;while(!s1);记录按键次数switch(s1num)// 光标闪烁点定位{case 1:write_com(0x80+0x40+6); // 秒break;case 2:write_com(0x80+0x40+3); // 分break;case 3:write_com(0x80+0x40+0); // 时break;case 4:write_com(0x80+11); // break;case 5:write_com(0x80+8); // break;星期日case 6:write_com(0x80+5);// break;case 7:write_com(0x80+2); //break;case 8:s1num=0;write_com(0x0c);// 间设置set_rtc();flag=0;break;}设置开显示光标不显示关闭时if(s1num!=0) // {按键加减if/加按键函数delay(10); if(s2==0) {while(!s2); switch(s1num) //根据功能键相应次数做出调节{case 1: miao++; // 秒加 if (miao==60) miao=0;write_sfm(6,miao); write_com(0x80+0x40+6); break;case 2: fen++; // 分加 if(fen==60)fen=0; write_sfm (3,fen); write_com (0x80+0x40+3); break ;case 3: shi++; // 时加 if (shi==24)shi=0; write_sfm (0,shi); write_com (0x80+0x40+0); break ;case 4: week++; // if(week==8) week=1; write_week(week ); write_com(0x80+11); break; case 5: day++; // if(day==32) day=1; write_nyr(8,day ); write_com(0x80+8); break;if (month==13)month=1; write_nyr (5,month); write_com (0x80+5);break;case 7: year++; //年加if (year==100) year=0;write_nyr(2,year );write_com(0x80+2);break;}}}if (s3==0) // 减按键函数同上 {星期加日加 case 6: month++;//月加delay(10);if(s3==0){while(!s3);switch(s1num) // 根据功能键相应次数做出调节{case 1: miao—-;if(miao==—1)miao=59;write_sfm(6,miao); write_com(0x80+0x40+6);break;case 2: fen——;if(fen==-1)fen=59;write_sfm(3,fen); write_com(0x80+0x40+3); break;case 3: shi—-;if(shi==—1)shi=23;write_sfm(0,shi); write_com(0x80+0x40+0); break;case 4: week--;if(week==—1) week=7;write_week(week); write_com(0x80+11); break;case 5: day--; if(day==-1) day=31; write_nyr(8,day);write_com(0x80+8); break;case 6: month—-;if(month==—1)month=12;write_nyr(5,month); write_com(0x80+5); break;case 7: year-—;if(year==—1) year=99;write_nyr(2,year); write_com(0x80+2); break;}}}}if(s4==0) // {闹钟按键delay(5);if(s4==0){write_com(0x0f); // s2num++;// flag=1;while(!s4);switch(s2num)//光标闪烁记录按键次数光标闪烁点定位{case 1:write_com(0x80+0x40+13);// break;case 2:write_com(0x80+0x40+10); // 时break;case 3:write_com(0x0c);flag=0; s2num=0;break;}}}//关闭闹钟设置if(s2num!=0) //{if(s2==0) //{delay(10); if(s2==0){ while(!s2);switch(s2num)//闹钟设置闹钟加根据功能键相应次数做出调节{case 1: afen++;if(afen==60)afen=0;write_sfm(13,afen);write_com(0x80+0x40+13);break;case 2: ashi++;if(ashi==24)ashi=0;write_sfm(10,ashi); write_com(0x80+0x40+10); break;}}}if(s3==0) // 闹钟减{delay(10);if(s3==0){while(!s3);switch(s2num) // 根据功能键相应次数做出调节{case 1: afen--;if(afen==—1)afen=59;write_sfm(13,afen);write_com(0x80+0x40+13);break;case 2: ashi--;if(ashi==-1)ashi=23;write_sfm(10,ashi);write_com(0x80+0x40+10); break;}}}}}void wirte_ds1302_byte(uchar dat) //ds1302 字节写{ uchar i;for(i=0;i〈8;i++){sclk=0;io=dat&0x01;dat=dat>>1; sclk=1; }}void write_ds1302(uchar add ,uchar dat) //ds1302 {rst=0;_nop_();// 空操作 sclk=0; _nop_(); rst=1;_nop_(); wirte_ds1302_byte (add ); wirte_ds1302_byte (dat ); rst=0; io=1; sclk=1;}uchar read_ds1302(uchar add) //ds1302{uchar i,value; rst=0;_nop_();// 空操作 sclk=0; _nop_(); rst=1;_nop_(); wirte_ds1302_byte(add ); for (i=0;i<8;i++) { value=value 〉>1; sclk=0; if (io) { value=value |0x80; } sclk=1; } rst=0;_nop_();// 空操作 sclk=0; _nop_();写函数读函数sclk=1;io=1;return value; }void set_rtc(){write_ds1302(0x8e,0x00);year1=year/10; //year=year%10;year=year+year1*16;write_ds1302(0x8c,year);//ds1302// 关写保护转换为十六进制week1=week/10;week=week%10;week=week+week1*16; write_ds1302(0x8a,week);month1=month/10;month=month%10;month=month+month1*16; write_ds1302(0x88,month);day1=day/10;day=day%10;day=day+day1*16; write_ds1302(0x86,day);shi1=shi/10;shi=shi%10;shi=shi+shi1*16; write_ds1302(0x84,shi);fen1=fen/10;fen=fen%10;fen=fen+fen1*16; write_ds1302(0x82,fen);miao1=miao/10;miao=miao%10;miao=miao+miao1*16;write_ds1302(0x80,miao);时间设置write_ds1302(0x8e,0x80); // 开写保护flag1=0;void read_rtc () //{year2=read_ds1302(0x8d); week2=read_ds1302(0x8b );month2=read_ds1302(0x89); day2=read_ds1302(0x87);shi2=read_ds1302(0x85);fen2=read_ds1302(0x83);miao2=read_ds1302(0x81);}void time_pros() // 进制{从 ds1302 中读出的时间转换为十year5=year2/16; year2=year2%16;year2=year2+year5*10; month5=month2/16; month2=month2%16;month2=month2+month5*10; day5=day2/16; day2=day2%16; day2=day2+day5*10; shi5=shi2/16; shi2=shi2%16; shi2=shi2+shi5*10; fen5=fen2/16; fen2=fen2%16; fen2=fen2+fen5*10; miao5=miao2/16;miao2=miao2%16; miao2=miao2+miao5*10;void display(){从 ds1302 中读时间// 显示函数write_sfm(6,miao2); write_com(0x80+0x40+6);write_sfm(3,fen2); write_com(0x80+0x40+3);write_sfm(0,shi2); write_com(0x80+0x40+0);write_week(week2);write_com(0x80+11);write_nyr(8,day2);write_com(0x80+8);write_nyr(5,month2);write_com(0x80+5);write_nyr(2,year2);write_com(0x80+2);if((ashi==shi2)&&(afen==fen2)) {alarm();}}void alarm() // 闹钟{beep=0; delay(1000);beep=1;void mai n()//{in it();//while(1){keysca n();//if(flag==O){keysca n(); read_rtc(); time_PrOS(); display();}■■■・』』u ■〈n “ Ia ・.■,□ ∣22912-07-64 I-C12: 18=03 C0=0^■ W■'h Ui■t∣?K。

相关文档
最新文档