嵌入式电子闹钟()时钟课程设计
嵌入式课程设计-- 基于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与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)前言近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,其强大的控制能力和专业性在通讯、网络、工控、电子等领域发挥着越来越重要的作用。
基于ARM的时钟+闹钟设计
《嵌入式系统》课程设计报告基于ARM的时钟系统院系:学生姓名:专业:应用电子技术班级:指导教师:完成时间:目录1 引言............................................ 错误!未定义书签。
2 STM32单片机RTC介绍............................. 错误!未定义书签。
3 总体设计框图.................................... 错误!未定义书签。
4 硬件电路 (2)4.1 STM32芯片管脚介绍 (2)4.2 STM32复位和时钟电路设计 (3)4.3闹钟提醒电路 (4)5 程序流程图 (4)5.1 主程序流程图 (4)5.2 中断程序流程图 (6)6 总结与体会 (6)参考文献: (7)附录: (8)基于ARM的时钟系统摘要:本设计选择STM32为核心控制元件,设计了用RTC定时器实现时钟的控制与设计,本设计能作为普通时钟用,而且能设置闹钟。
程序使用C语言进行编程,能动态显示当前时间,包括时、分、秒,并且用串口助手显示。
关键词:STM32 ARM 时钟闹钟1 引言随着科技的发展,嵌入式系统广泛应用于工业控制和商业管理领域,在多媒体手机、袖珍电脑,掌上电脑,车载导航器等方面的应用,更是极大地促进了嵌入式技术深入到生活和工作各个方面。
嵌入式系统主要由嵌入式处理器、相关支撑硬件及嵌入式软件系统组成。
本文介绍基于STM32F103R6T6的嵌入式微处理器的电子时钟设计,并且在液晶上显示。
2 STM32单片机RTC介绍STM32的实时时钟(RTC)是一个独立的定时器。
RTC模块拥有一组连续计数的计数器,在相应软件配置下,可以提供时钟日历的功能,修改计数器的值可以重新设置系统当前的时间和日期。
STM32F10x系列微控制器片上内置的RTC模块,主要特性如下:(1)可编程的预分频系数,分频系数最高位2^20。
(2)32位的可编程计数器,可用于长程时间段的测量。
嵌入式包括时分秒的数字时钟课程设计
嵌入式包括时分秒的数字时钟课程设计答案:嵌入式包括时分秒的数字时钟的课程设计可以通过使用微控制器和相关的编程语言来实现。
以下是一个基本的课程设计方案,用于设计一个嵌入式数字时钟。
1. 硬件设计:- 使用一个微控制器,如Arduino或Raspberry Pi,作为主控制器。
- 连接一个实时时钟(RTC)模块,以获取准确的时间信息。
- 连接一个数码管显示器,用于显示时、分、秒的数字。
- 连接适当的按钮或开关,用于设置时间和控制其他功能。
2. 软件设计:- 使用适当的编程语言,如C或Python,编写嵌入式软件。
- 初始化RTC模块,并设置初始时间。
- 通过读取RTC模块的时间信息,更新时、分、秒的变量。
- 将时、分、秒的变量转换为适当的格式,并在数码管显示器上显示。
- 实现按钮或开关的功能,例如设置时间、切换显示模式等。
- 使用循环结构,不断更新时间和响应用户输入。
扩展和深入分析:在设计嵌入式数字时钟时,可以进一步扩展和改进功能,以满足特定需求和提供更好的用户体验。
以下是一些可能的扩展和深入分析方向:1. 闹钟功能:- 添加闹钟功能,允许用户设置特定时间的闹钟。
- 当闹钟时间到达时,触发声音或震动提示。
2. 温度和湿度显示:- 连接温度和湿度传感器,显示当前环境的温度和湿度信息。
3. 亮度控制:- 添加光敏电阻或其他传感器,根据环境光线调整数码管显示器的亮度。
4. 日期和星期显示:- 使用RTC模块提供的日期信息,显示当前日期和星期。
5. 时钟同步:- 使用无线通信模块,如Wi-Fi或蓝牙,与互联网时间服务器同步时钟。
6. 电池备份:- 添加电池备份电路,以保持时钟运行,即使主电源中断。
通过以上扩展和改进,嵌入式数字时钟可以成为一个更加功能强大和实用的设备。
这些功能可以根据具体需求进行选择和实现,以满足不同用户的需求。
总结:嵌入式包括时分秒的数字时钟的课程设计可以通过硬件和软件的结合来实现。
硬件设计包括选择适当的微控制器、实时时钟模块、数码管显示器和按钮开关。
嵌入式课程设计——基于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显示。
基于嵌入式 处理器电子时钟设计
嵌入式原理与系统设计课程考核报告(设计)课程设计题目嵌入式电子时钟设计指导教师唐友学生姓名吴琦二O一一年六月十六日计算机与信息工程系1.电子时钟1.1 电子时钟简介1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。
现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。
从而达到计时的功能,是人民日常生活补课缺少的工具。
1.2 电子时钟的基本特点现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
2. 89C51单片机介绍VCC:电源。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
嵌入式电子闹钟()时钟课程设计
}#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。
基于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. 时间显示与设置:讲解时间的表示方法、时间设置与显示的实现,使学生掌握闹钟时间调整与显示功能的设计。
数字时钟的嵌入式系统的设计
基于嵌入式操作系统的数字电子钟系统设计一.嵌入式背景介绍随着信息化、智能化、网络化的发展以及计算机技术的发展,嵌入式技术也获得了广阔的发展空间,嵌入式技术目前已成为通信和消费类产品的共同发展方向。
嵌入式技术的应用到处可见,应用十分广泛。
如家庭中的数字电视、机顶盒、DVD、超级VCD智能手机等;办公室中的复印机、打印机、扫描仪、键盘灯;手持设备也用到了嵌入式技术,包括MP3、GPS手机、数码相机、数码摄像机等;汽车电子产品:电子地图、导航、车载GPS等。
其他领域,如通信、机器人等都应用到了嵌入式技术,由此可以看出,嵌入式系统的发展已日趋成熟了。
嵌入式系统被定义为:以应用为中心,以计算机技术为基础、软件硬件可剪裁、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
嵌入式系统是现代多学科互相融合的产物,嵌入式系统无多余软件,并且以固态化出现,硬件亦无多余存储器,有可靠性高、成本低、体积小、功耗少等特点。
嵌入式系统又是知识密集,投资规模大,产品更新换代快,且具有不断创新特征、不断发展的系统。
嵌入式系统主要由嵌入式处理器、相关支撑硬件和嵌入式软件系统组成,它是集软硬件于一体的可独立工作的“器件”。
嵌入式处理器主要由一个单片机或微控制器组成。
而这些嵌入式微处理器目前多是8位、16位和32位的,与64位的高性能处理器相比,具有很强的经济性。
相关支撑硬件包括显示卡、存储介质、通讯设备、IC卡或信用卡的读取设备等。
嵌入式系统有别于一般的计算机处理系统,它不具备像硬盘那样大容量的存储介质,而大多使用闪存作为存储介质。
嵌入式软件包括与硬件相关的底层软件、操作系统、图形界面、通讯协议、数据库系统等、标准化浏览器和应用软件等。
随着计算机技术、信息技术和网络技术以及其他技术的发展,嵌入式系统将向着更加小、更快速、功耗更低以及互联网的方向发展。
本系统的功能是可调数字时钟,LED显示时间,通过键盘和触摸屏均可以校对时钟。
嵌入式课程设计报告数字时钟本科论文
数字时钟课程设计报告课程设计名称:数字时钟系别:系姓名:班级:学号:_ _成绩:_指导教师:开课时间: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系统背景电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。
而且向着精确、低功耗、多功能发展。
基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。
从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。
另外,程序较为简洁,具有可靠性和较好的可读性。
如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。
数字时钟系统可采用数字电路实现,也可以采用单片机来完成。
嵌入式课程设计报告具有日历功能的电子时钟
学生姓名:权胜 王希 严家强
专业年级:计算机应用技术10511
前言5
第一章系统设计6
第一节课题目标及总体方案6
第二节项目设计模块描述及流程图5
1、模块描述6
2、总体设计流程图6
3、功能设计流程图7
4、闹钟功能程序流程图8
一、主函数模块9
二、功能实现模块10
1、8个LED灯的按位显示程序10
display();
}
}
二、
1、8个LED灯的按位对应显示程序
采集AIN2的ADC值,根据ADC的值,控制蜂鸣器的声音频率。控制PWM1的频率。(为100Hz 至1KHz,最低值和最高值可以根据实际效果调整)。并把实际调整的频率打印到超级终端,如“100Hz”。
采集AIN1的ADC值,根据ADC的值,控制蜂鸣器的音量。控制PWM1的占空比。(为0% 至100%,最低值和最高值可以根据实际效果调整).并把实际调整的占空比打印到超级终端上,如“50%”。
第
1.模块描述:我先进行了整个系统的规划,将整个系统分为两大模块:第一,主函数模块;第二,功能实现模块(进行时间和闹钟的设定,以及其他一些显示功能);第三,闹钟功能实现模块。
2.总体设计流程图:
3、功能设计流程图
4
一、主函数模块
int i;
int main(int argc,char **argv)
{
sys_init();//初始化系统
iic_init_8led();//初始化8个led灯
for(i=0;i<8;i++)
{
iic_write_8led(0x70, 0x10+i,0xfc);//8个灯全0
物联网嵌入式技术 项目八 多功能电子时钟教案
1.讲解湿度比较难检测的原因;
引导问题:
(1)提问学生湿度检测对湿敏器件有什么要求?
2.讲解湿敏传感器对于湿度检测器件的要求。
三、光照传感器(20min,PPT24-30)
小组讨论:
(1)大家光照传感器和原理有什么了解?
1.介绍光照传感器的工作原理。
四、STM32获取湿度光照数据分析(20min,PPT32-38)
1.根据图片讲述任务用到的湿度传感器模块和光照传感器模块构成;
2.讲述湿度传感器的湿度和电压频率的关系,并提问应该如何采集频率。
听讲
学生通过教师设计的“引导问题”、“练一练”,带着问题学习任务实施所需的知识点,在必要时即时动手实践,可有效地提高其学习的主动性。
PPT
任务实施
(50min)
一、设备准备(1min,PPT第40页)
5.能根据I2C相关资料,理解I2C的工作过程;
6.能根据PCF8563相关手册,通过I2C进行读写等操作,获取RTC时间。
素质目标
1.培养谦虚、好学、勤于思考、认真做事的良好习惯:严谨的开发流程和正确的编程思路;
2.培养团队协作能力:相互沟通、互相帮助、共同学习、共同达到目标;
3.提升自我展示能力:讲述、说明、表述和回答问题;
当天轮到的小组选派代表分析本组实施经验。
二、自评和互评(5min,PPT第75页)
1.小组各成员参照评价标准完成自评;
2.完成对其他小组的评价。
各组自评、互评
学生通过对自己的实施过程和经验的介绍,锻炼自我展示能力。
课堂任务单
任务小结
(5min)
一、任务小结(5min,PPT第77页)
基于嵌入式系统的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操作系统。
嵌入式系统原理及应用课程设计
嵌入式系统原理及应用课程设计报告题目:电子时钟的设计与实现班级:文专电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系统............................ 错误!未定义书签。
嵌入式课程设计报告具有日历功能的电子时钟
嵌入式体系开辟课程设计专周陈述课程设计(陈述)Ⅰ.课程设计标题:具有日历功效的电子时钟标题:具有日历功效的电子时钟系别及专业:盘算机工程系盘算机应用技巧班级:10511学生姓名:权胜(14)王希(05)严家强(23)指点先生:宋国明完成时光:2012-12-24/2012-12-28Ⅱ.课程设计步调及内容一.课程设计目的1.造就分解应用常识和自力开展实践创新的才能;2.造就学生将理论常识与现实应用联合在一路;3.造就学生的自我进修才能息争决问题的才能;4.造就学生的协作意识和团队合作才能;5.造就学生的总结经验的才能.二.研讨办法及手腕应用1.问题解决模块化,将义务分成若干模块,分模块调试和完成义务;2.查阅网上的相干素材,查阅相干论文材料,进行比较.研讨;3.在自力思虑的基本上,就教先生,和同组同窗评论辩论.进修;4.重复调试.总结经验.消除错误;5.衔接PC和EDUKIT-III ARM嵌入式开辟实验箱,完成全部实验情况搭建;6.应用μVision4和超等终端软件进行软件编译和进行调试检讨;7.应用ULINK2仿真器下载至实验箱进行不雅察.调试.三.课程设计预期后果1.程序启动后,蜂鸣器响三声,8位LED数码管显示初始值“0”,1秒后显示当前日期和时光,日期格局:****年**月**日,时光格局:*(礼拜)-**时**分**秒.PC机超等终端同时显示相干的信息.2.按下“D”键,可进行日期.时光的修正.设置:有按键时,把键值显示到最右侧,后续按键时,把以前的按键左移,把当前按键值显示到最右侧数码管.设置完毕后,按“FUN”键确认,退出设置,时钟显示修正后的时光.3.显示控制和闹钟设置:按键“*”,进行数码管闪耀/不闪耀的切换.按键“A”,设置闹钟时光.时光到达后,闹铃(蜂鸣器)响,按“FUN”键,封闭闹铃.按键设置时,PC的超等终端显示响应的提醒信息,同时把所按的键值,经由过程串口发送到超等终端显示.4.闹铃声音频率及音量控制:按下“B”键时,进入闹铃声音的设置.收集AIN2的ADC值,依据ADC的值,控制蜂鸣器的声音频率.控制PWM1的频率.(为100Hz 至1KHz,最低值和最高值可以依据现实后果调剂).并把现实调剂的频率打印到超等终端,如“100Hz”.收集AIN1的ADC值,依据ADC的值,控制蜂鸣器的音量.控制PWM1的占空比.(为0% 至100%,最低值和最高值可以依据现实后果调剂).并把现实调剂的占空比打印到超等终端上,如“50%”.按“FUN”键停滞设置.学生姓名:权胜王希严家强专业年级:盘算机应用技巧10511目次前言近年来,跟着盘算机技巧及集成电路技巧的成长,嵌入式技巧日渐普及,在通信.收集.工控.医疗.电子等范畴施展着越来越主要的感化.嵌入式体系无疑成为当前最热点最有成长前程的IT应用范畴之一.实不时钟(RTC)器件是一种能供给日历/时钟.数据存储等功效的专用集成电路,经常应用作各类盘算机体系的时钟旌旗灯号源和参数设置存储电路.RTC具有计时精确.耗电低和体积小等特色,特殊实用于在各类嵌入式体系忠记载事宜产生的时光和相干信息,尤其是在通信工程.电力主动化.工业控制等主动化程度较高范畴的无人职守情况.跟着集成电路技巧的不竭成长,RTC器件的新品也不竭推出.这些新品不但具有精确的RTC,还有大容量的存储器.温度传感器和A/D数据收集通道等,已成为集RTC.数据收集和存储于一体的分解功效器件,特殊实用于以微控制器为焦点的嵌入式体系.症结字:嵌入式体系.实不时钟RTC第一章体系设计第一节课标题的及总体计划跟着嵌入式技巧的成长,我们身边充斥着各类各样的嵌入式电子产品.实不时钟(RTC)就是一种在现代电子装备中应用异常广泛,可以帮忙人们及时.精确的控制时光的器件,如手机.PDA及一些智能内心都供给了时钟显示.我们本次课题的目的就是要基于SAMSUNG S3C2410AL-20芯片设计出一个实不时钟,编写C说话可以经由过程μVision4和超等终端软件调试,然后经由过程ULINK2仿真器下载至实验箱内进行不雅察.在实验箱中的LED显示灯上显示出时光和日历.别的,我们将要实现的体系分为三个模块实现,每个模块间相对自力而又互相接洽.第二节项目设计模块描写及流程图1.模块描写:我先辈行了全部体系的计划,将全部体系分为两大模块:第一,主函数模块;第二,功效实现模块(进行时光和闹钟的设定,以及其他一些显示功效);第三,闹钟功效实现模块.2.总体设计流程图:3.功效设计流程图4.闹钟功效程序流程图一.主函数模块int i;int main(int argc,char **argv){sys_init(); //初始化体系iic_init_8led();//初始化8个led灯for(i=0;i<8;i++){iic_write_8led(0x70, 0x10+i,0xfc);//8个灯全0 }for(i=0;i<3;i++){jiao();//挪用发声函数delay(5000);}uart_printf("迎接运器具有日历功效的电子时钟\n请依据提醒按键操纵\n0键:显示时钟\n1键:显示日期\nA键:设置闹钟\nD键:设置日期时光\n*键:数码管闪耀/不闪耀的切换\n");rtc_init(); //实不时钟初始化rtc_display1(); //显示时光while(1){rtc_init();display();}}二.功效实现模块1.8个LED灯的按位对应显示程序void display_Time(void)//对应到8个LED灯按位显示{iic_init_8led();//显示时光iic_write_8led(0x70, 0x10+0, num[g_nHour%16]);iic_write_8led(0x70, 0x10+1, num[g_nHour/16]);iic_write_8led(0x70, 0x10+2, 0x02);iic_write_8led(0x70, 0x10+3, num[g_nWeekday]);iic_write_8led(0x70, 0x10+4, num[g_nSec%16]);iic_write_8led(0x70, 0x10+5, num[g_nSec/16]);iic_write_8led(0x70, 0x10+6, num[g_nMin%16]);iic_write_8led(0x70, 0x10+7, num[g_nMin/16]);}void display_data(void){iic_init_8led();//显示日期iic_write_8led(0x70, 0x10+0, num[g_nYear%4096%256%16]);//取个位iic_write_8led(0x70, 0x10+1, num[g_nYear/16%16]);//取十位iic_write_8led(0x70, 0x10+2, num[g_nYear/256%16]);//取百位iic_write_8led(0x70, 0x10+3, num[g_nYear/4096]);//取千位iic_write_8led(0x70, 0x10+4, num[g_nDate%16]);iic_write_8led(0x70, 0x10+5, num[g_nDate/16]);iic_write_8led(0x70, 0x10+6, num[g_nMonth%16]);iic_write_8led(0x70, 0x10+7, num[g_nMonth/16]);}2.获取体系时光void rtc_display1(void){int a;INT32T nTmp;rRTCCON = 0x01;ucChar=0;st1=1; //代表正在显示时钟 st1=2代表正在显示日期while(ucChar>29||ucChar<=0){iic_init_8led();while(1){if(rBCDYEAR==0x99) //获取体系日期及时光g_nYear = 0x1999;elseg_nYear = 0x2000 + rBCDYEAR;g_nMonth = rBCDMON;g_nWeekday = rBCDDAY;g_nDate = rBCDDATE;g_nHour = rBCDHOUR;g_nMin = rBCDMIN;g_nSec = rBCDSEC;if(g_nSec!=nTmp) // 雷同时光不显示勤俭资本{nTmp = g_nSec;break;}}3.*键功效实现if(st2==1){//按*键履行闪耀for(a=0;a<8;a++){iic_write_8led(0x70,0x10+a,0x00); //8个灯熄灭}delay(1000);//延时1sdisplay_Time();//再显示}else{display_Time();//未按下不变}4.按键断定函数void display(void){if(ucChar==0x01){//断定是否按下0键uart_printf("\n按键0,数码管显示时光:\n");rtc_display1();//显示时光函数} else if(ucChar==0x02){//断定是否按下1键uart_printf("\n按键1,数码管显示日期:\n");rtc_display2();//显示日期函数} else if(ucChar==0x14){ //断定是否按下D键uart_printf("\n按下键D,进入日期设置,请先输入日期(格局年年年年代月日日).输入完成后按fun键确认.\n");setDate();//设置时光函数} else if(ucChar==0x1c){ //断定是否按下*键if(st3==1){//若按下*键,数码管闪耀显示uart_printf("\n按下键*,数码管停滞闪耀显示.\n");st3=0;ss();//挪用闪耀/不闪耀切换}else{ //再次按下*键,数码管停滞闪耀uart_printf("\n按下键*,数码管闪耀显示.\n");st3=1;ss();}} else if(ucChar==0x11){//断定是否按下A键uart_printf("\n按下键A,设置闹钟.请输入闹钟时光,按fun键确认.\n");isAlam=1;//已设置了闹钟alam_jiao();//挪用闹铃函数} else if(st1==1){//断定当前是否显示时光,挪用显示时光函数rtc_display1();} else if(st1==2){//断定当前是否显示日期,挪用显示日期函数rtc_display2();}}5.时光及日期设置函数void setDate(void){int i,u;ucChar=0;for(u=0;u<8;u++){iic_write_8led(0x70,0x10+u,0x00); //灯灭}i=0;while(1){iic_init_8led();while(g_nKeyPress--){keyboard_init();g_nKeyPress = 0;//按键值置0while(g_nKeyPress == 0);//空轮回,等待有键按下iic_read_keybd(0x70, 0x1, &ucChar);if(i==8||i==17){//断定日期和时光输入完成while(1){while(g_nKeyPress--){keyboard_init();g_nKeyPress=0;while(g_nKeyPress==0);iic_read_keybd(0x70, 0x1, &ucChar);ucChar=key_set(ucChar);if(ucChar==0xff){ //按下FUN键确认if(i==8){uart_printf("\n完成日期设置,持续设置时光(格局礼拜-不时分分秒秒)\n"); }else{uart_printf("\n完成时光设置.\n");}i++;break;}}if(i==9||i==18){//输入超出,跳出程序break;}}}if(ucChar != 0)//断定是否有键按下,并对应LED灯8位按位显示{ucChar= key_set(ucChar);switch(i){case 0:iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nYear=ucChar*4096; //设置年i++;break;case 1:iic_write_8led(0x70, 0x10+5, num[g_nYear/4096]);iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nYear=g_nYear+ucChar*256;i++;break;case 2:iic_write_8led(0x70, 0x10+6, num[g_nYear/4096]);iic_write_8led(0x70, 0x10+5, num[g_nYear/256%16]);iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nYear=g_nYear+ucChar*16;i++;break;case 3:iic_write_8led(0x70, 0x10+7, num[g_nYear/4096]);iic_write_8led(0x70, 0x10+6, num[g_nYear/256%16]);iic_write_8led(0x70, 0x10+5, num[g_nYear/16%16]);iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nYear=g_nYear+ucChar;i++;break;case 4:iic_write_8led(0x70, 0x10+0, num[g_nYear/4096]);iic_write_8led(0x70, 0x10+7, num[g_nYear/256%16]);iic_write_8led(0x70, 0x10+6, num[g_nYear/16%16]);iic_write_8led(0x70, 0x10+5, num[g_nYear%4096%256%16]); iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nMonth=ucChar*16;//设置月i++;break;case 5:iic_write_8led(0x70, 0x10+1, num[g_nYear/4096]);iic_write_8led(0x70, 0x10+0, num[g_nYear/256%16]);iic_write_8led(0x70, 0x10+7, num[g_nYear/16%16]);iic_write_8led(0x70, 0x10+6, num[g_nYear%4096%256%16]); iic_write_8led(0x70, 0x10+5, num[g_nMonth/16]);iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nMonth= g_nMonth+ucChar;i++;break;case 6:iic_write_8led(0x70, 0x10+2, num[g_nYear/4096]);iic_write_8led(0x70, 0x10+1, num[g_nYear/256%16]);iic_write_8led(0x70, 0x10+0, num[g_nYear/16%16]);iic_write_8led(0x70, 0x10+7, num[g_nYear%4096%256%16]); iic_write_8led(0x70, 0x10+6, num[g_nMonth/16]);iic_write_8led(0x70, 0x10+5, num[g_nMonth%16]);iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nDate=ucChar*16;//设置日i++;break;case 7:iic_write_8led(0x70, 0x10+3, num[g_nYear/4096]);iic_write_8led(0x70, 0x10+2, num[g_nYear/256%16]);iic_write_8led(0x70, 0x10+1, num[g_nYear/16%16]);iic_write_8led(0x70, 0x10+0, num[g_nYear%4096%256%16]); iic_write_8led(0x70, 0x10+7, num[g_nMonth/16]);iic_write_8led(0x70, 0x10+6, num[g_nMonth%16]);iic_write_8led(0x70, 0x10+5, num[g_nDate/16]);iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nDate=g_nDate+ucChar;i++;break;case 9:for(u=0;u<8;u++){iic_write_8led(0x70,0x10+u,0x00);//8个灯灭}i++;break;case 10:iic_write_8led(0x70, 0x10+5, num[ucChar]);iic_write_8led(0x70, 0x10+4, 0x02);g_nWeekday=ucChar;//设置礼拜i++;break;case 11:iic_write_8led(0x70, 0x10+6, num[g_nWeekday]); iic_write_8led(0x70, 0x10+5, 0x02);iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nHour=ucChar*16;//设置小时i++;break;case 12:iic_write_8led(0x70, 0x10+7, num[g_nWeekday]); iic_write_8led(0x70, 0x10+6, 0x02);iic_write_8led(0x70, 0x10+5, num[g_nHour/16]); iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nHour=g_nHour+ucChar;i++;break;case 13:iic_write_8led(0x70, 0x10+0, num[g_nWeekday]); iic_write_8led(0x70, 0x10+7, 0x02);iic_write_8led(0x70, 0x10+6, num[g_nHour/16]); iic_write_8led(0x70, 0x10+5, num[g_nHour%16]); iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nMin=ucChar*16;//设置分钟i++;break;case 14:iic_write_8led(0x70, 0x10+1, num[g_nWeekday]); iic_write_8led(0x70, 0x10+0, 0x02);iic_write_8led(0x70, 0x10+7, num[g_nHour/16]); iic_write_8led(0x70, 0x10+6, num[g_nHour%16]); iic_write_8led(0x70, 0x10+5, num[g_nMin/16]); iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nMin=g_nMin+ucChar;i++;break;case 15:iic_write_8led(0x70, 0x10+2, num[g_nWeekday]); iic_write_8led(0x70, 0x10+1, 0x02);iic_write_8led(0x70, 0x10+0, num[g_nHour/16]);iic_write_8led(0x70, 0x10+7, num[g_nHour%16]);iic_write_8led(0x70, 0x10+6, num[g_nMin/16]);iic_write_8led(0x70, 0x10+5, num[g_nMin%16]);iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nSec=ucChar*16;//设置秒钟i++;break;case 16:iic_write_8led(0x70, 0x10+3, num[g_nWeekday]);iic_write_8led(0x70, 0x10+2, 0x02);iic_write_8led(0x70, 0x10+1, num[g_nHour/16]);iic_write_8led(0x70, 0x10+0, num[g_nHour%16]);iic_write_8led(0x70, 0x10+7, num[g_nMin/16]);iic_write_8led(0x70, 0x10+6, num[g_nMin%16]);iic_write_8led(0x70, 0x10+5, num[g_nSec/16]);iic_write_8led(0x70, 0x10+4, num[ucChar]);g_nSec=g_nSec+ucChar;i++;break;case 18:rRTCCON = rRTCCON & ~(0xf) | 0x1;// No reset, Merge BCD counters, 1/32768, RTC Control enablerBCDYEAR = rBCDYEAR & ~(0xff) | g_nYear;rBCDMON = rBCDMON & ~(0x1f) | g_nMonth;rBCDDAY = rBCDDAY & ~(0x7) | g_nWeekday; rBCDDATE =rBCDDATE & ~(0x3f) | g_nDate;rBCDHOUR = rBCDHOUR & ~(0x3f) | g_nHour;rBCDMIN = rBCDMIN & ~(0x7f) | g_nMin;rBCDSEC = rBCDSEC & ~(0x7f) | g_nSec;rRTCCON = 0x0;rtc_display1(); //显示时光函数break;}}}}}6.闪耀/不闪耀切换函数void ss(void){if(st3==0){//若按下*键if(st1==1){//断定当前是否显示时光,挪用显示时光函数st2=0;rtc_display1();}else if(st1==2){//断定当前是否显示日期,挪用显示日期函数st2=0;rtc_display2();}}else{//未按下键,再次断定显示日期照样时光,再进行挪用当前显示函数 if(st1==1){st2=1;rtc_display1();}else if(st1==2){st2=1;rtc_display2();}}}7.发声函数void jiao(){ int u;rGPFCON=0x5500;rGPFUP=0;rGPBCON = rGPBCON & 0xFFFFFC|1;rGPBDAT &= 0xFFFFFE;rGPFDAT=0;//初始化蜂鸣器设置for(u=0;u<100000;u++);rGPFDAT=0xF0;for(u=0;u<100000;u++);delay(5000);//延时5srGPBDAT |= 1;delay(5000);rGPFCON = 0x55aa;}8.键值对应到键盘函数UINT8T key_set(UINT8T ucChar){switch(ucChar){case 1:case 2:case 3:case 4:case 5:ucChar-=1; break;case 9:case 10:case 11:case 12:case 13:ucChar-=4; break;case 17:case 18:case 19:case 20:case 21:ucChar-=7; break;case 25: ucChar = 0xF; break;case 26: ucChar = '+'; break;case 27: ucChar = '-'; break;case 28: ucChar = '*'; break;case 29: ucChar = 0xFF; break;default: ucChar = 0;}return ucChar;}9.中止函数void __irq rtc_int0_int(void){ClearPending(BIT_EINT0);rRTCRST = (1<<3) | 3;than 30 g_nSec}void __irq rtc_int(void)//到达设定闹钟时光,触发中止{ int i;ClearPending(BIT_RTC);f_nIsRtcInt = 1;}void __irq rtc_tick(void){ClearPending(BIT_TICK);f_unTickCount++;}三.闹钟功效实现模块1.A键设置闹钟功效实现if(isAlam==1){//按下A键设置闹钟//在超等终端上显示已设定的闹钟为-uart_printf(" %x:%x:%x %s,%x/%x/%x 已设定闹钟 %x:%x:%x,%x/%x/%x\r",g_nHour,g_nMin,g_nSec,day[g_nWeekday],g_nMonth,g_nDate,g _nYear,rALMHOUR,rALMMIN,rALMSEC,rALMYEAR,rALMMON,rALMDATE);if(f_nIsRtcInt==1){//断定到了设定的闹钟f_nIsRtcInt==0;//到了闹钟时光久置为初始值isAlam=0;//将设置的闹钟置0(已设置闹钟)uart_printf("\n闹钟叫了,请按FUN键停滞.\n");naoz();//挪用闹钟函数}}else{//未按下A键就不变uart_printf(" %x:%x:%x %s,%x/%x/%x\r",g_nHour,g_nMin,g_nSec,day[g_nWeekday],g_nM onth,g_nDate,g_nYear);}keyboard_init();//接收键盘的输入,并且将值放在ucCharg_nKeyPress = 0;iic_read_keybd(0x70, 0x1, &ucChar);}display();//按键断定函数rRTCCON = 0x0;// No reset, Merge BCD counters, 1/32768, RTC Control disable(for power consumption)}void naoz(void){//闹钟函数int i;while(1){//闹钟响后,按FUN键停滞while(g_nKeyPress--){keyboard_init();//接收键盘的输入,并且将值放在ucCharg_nKeyPress=0;iic_read_keybd(0x70, 0x1, &ucChar);ucChar=key_set(ucChar);if(ucChar==0xff){//按下FUN键ucChar=0;//给按键值置0uart_printf("\n闹钟已停滞.\n");return;}}iic_init_8led();for(i=0;i<8;i++){iic_write_8led(0x70,0x10+i,0x00);//8个LED灯全灭}display_Time();//挪用体系时光显示jiao();//挪用发声函数}2.闹钟设置函数void alam(void){int i,u;ucChar=0;for(u=0;u<8;u++){iic_write_8led(0x70,0x10+u,0x00);//8个LED灯全灭}i=0;while(1){iic_init_8led();while(g_nKeyPress--){keyboard_init();g_nKeyPress = 0;//接收键盘的输入,并且将值放在ucCharwhile(g_nKeyPress == 0);iic_read_keybd(0x70, 0x1, &ucChar);if(i==6){//断定时光输入是否完成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#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();}}}。