嵌入式电子闹钟()时钟课程设计教学内容
嵌入式课程设计-- 基于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 摘要:随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。
为了在观测时间的同时,能够了解其它与人类密切相关的信息,比如温度、星期、日期等,电子数字钟诞生了,它集时间、日期、星期和温度功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
嵌入式包括时分秒的数字时钟课程设计
嵌入式包括时分秒的数字时钟课程设计答案:嵌入式包括时分秒的数字时钟的课程设计可以通过使用微控制器和相关的编程语言来实现。
以下是一个基本的课程设计方案,用于设计一个嵌入式数字时钟。
1. 硬件设计:- 使用一个微控制器,如Arduino或Raspberry Pi,作为主控制器。
- 连接一个实时时钟(RTC)模块,以获取准确的时间信息。
- 连接一个数码管显示器,用于显示时、分、秒的数字。
- 连接适当的按钮或开关,用于设置时间和控制其他功能。
2. 软件设计:- 使用适当的编程语言,如C或Python,编写嵌入式软件。
- 初始化RTC模块,并设置初始时间。
- 通过读取RTC模块的时间信息,更新时、分、秒的变量。
- 将时、分、秒的变量转换为适当的格式,并在数码管显示器上显示。
- 实现按钮或开关的功能,例如设置时间、切换显示模式等。
- 使用循环结构,不断更新时间和响应用户输入。
扩展和深入分析:在设计嵌入式数字时钟时,可以进一步扩展和改进功能,以满足特定需求和提供更好的用户体验。
以下是一些可能的扩展和深入分析方向:1. 闹钟功能:- 添加闹钟功能,允许用户设置特定时间的闹钟。
- 当闹钟时间到达时,触发声音或震动提示。
2. 温度和湿度显示:- 连接温度和湿度传感器,显示当前环境的温度和湿度信息。
3. 亮度控制:- 添加光敏电阻或其他传感器,根据环境光线调整数码管显示器的亮度。
4. 日期和星期显示:- 使用RTC模块提供的日期信息,显示当前日期和星期。
5. 时钟同步:- 使用无线通信模块,如Wi-Fi或蓝牙,与互联网时间服务器同步时钟。
6. 电池备份:- 添加电池备份电路,以保持时钟运行,即使主电源中断。
通过以上扩展和改进,嵌入式数字时钟可以成为一个更加功能强大和实用的设备。
这些功能可以根据具体需求进行选择和实现,以满足不同用户的需求。
总结:嵌入式包括时分秒的数字时钟的课程设计可以通过硬件和软件的结合来实现。
硬件设计包括选择适当的微控制器、实时时钟模块、数码管显示器和按钮开关。
嵌入式课程设计报告---基于LCD的电子时钟
课程设计报告题目基于LCD的电子时钟课程设计(报告)任务书(理工科类)Ⅰ、课程设计(报告)题目:基于LCD的电子时钟实验Ⅱ、课程设计(论文)工作内容一、课程设计目标1、培养综合运用知识和独立开展实践创新的能力;2、培养学生将理论知识与实际应用结合在一起;3、培养学生的自我学习能力和解决问题的能力;4、培养学生的协作意识和团队合作能力;5、培养学生的总结经验的能力。
二、研究方法及手段应用1、问题解决模块化,将任务分成若干模块,分模块调试和完成任务;2、查阅网上的相关素材,查阅相关论文资料,进行比较、研究;3、在独立思考的基础上,请教老师,和同组同学讨论、学习;4、反复调试、总结经验、排除差错;5、连接PC和EL-ARM-830实验箱,完成整个实验环境搭建;6、运用Code Warrior for ARM编译软件编译汇编语言和进行调试;7、使用H-JTAG下载至硬件进行观察、调试。
三、课程设计预期效果1、在液晶屏上显示表盘,和时间点和时、分、秒针;2、在液晶屏上显示时、分、秒、年、月、日;3、在液晶屏上实现指针的动态图像;4、可以实现自己设定的初始时间。
学生姓名:王宁专业年级:09电子信息工程目录前言 (4)第一章系统设计 (5)第一节课题目标及总体方案 (5)第二节相关组件说明 (5)第三节项目设计模块描述及流程图 (7)1.主函数模块 (8)2.时钟表盘的构建模块 (8)3. 表盘下日期的显示模块 (9)4.任务运行模块 (10)第二章结果与显示 (11)结果显示 (11)心得体会 (12)参考文献 (13)附录 (13)前言近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。
嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。
实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。
嵌入式电子闹钟()时钟课程设计
}#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。
课程设计电子闹钟
课程设计电子闹钟一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握电子闹钟的基本原理、电路构成及编程方法;技能目标要求学生能够独立完成电子闹钟的制作和调试,并具备一定的创新思维和问题解决能力;情感态度价值观目标要求学生在制作电子闹钟的过程中,培养对科学的热爱、对技术的敬畏以及对创新的热情。
二、教学内容本课程的教学内容主要包括电子闹钟的基本原理、电路构成、编程方法及制作技巧。
教学大纲安排如下:1.第1-2课时:电子闹钟的基本原理和电路构成,介绍电子元件的功能和用法,学习电路图的阅读和绘制。
2.第3-4课时:编程方法,学习编程语言的基本语法,掌握编程技巧,编写电子闹钟的控制程序。
3.第5-6课时:制作技巧,学习电子元件的焊接方法,组装电子闹钟,并进行调试和优化。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法。
1.讲授法:用于讲解电子闹钟的基本原理、电路构成和编程方法,帮助学生建立知识体系。
2.讨论法:通过分组讨论,让学生分享制作电子闹钟的心得,培养学生的团队协作能力。
3.案例分析法:分析典型的电子闹钟制作案例,让学生了解实际应用,提高学生的创新思维。
4.实验法:动手制作电子闹钟,培养学生的实践操作能力,巩固所学知识。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的电子闹钟制作教材,为学生提供系统性的学习资料。
2.参考书:提供电子电路、编程语言等相关领域的参考书籍,丰富学生的知识储备。
3.多媒体资料:制作精美的课件、视频教程等,提高学生的学习兴趣。
4.实验设备:提供电子元件、电路板、编程器等实验设备,确保学生能够顺利进行实践操作。
五、教学评估本课程的教学评估方式包括平时表现、作业和考试等。
评估方式应客观、公正,能够全面反映学生的学习成果。
1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性。
嵌入式闹钟课程设计报告
嵌入式闹钟课程设计报告一、课程目标知识目标: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系统背景电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。
而且向着精确、低功耗、多功能发展。
基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。
从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。
另外,程序较为简洁,具有可靠性和较好的可读性。
如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。
数字时钟系统可采用数字电路实现,也可以采用单片机来完成。
课程设计电子时钟设计
课程设计电子时钟设计一、教学目标本课程旨在让学生掌握电子时钟的基本设计原理和技能,能够独立完成一个简单的电子时钟设计项目。
具体目标如下:1.了解电子时钟的基本构成和原理;2.掌握常用的电子元器件及其功能;3.学习电子时钟设计的常用方法和技巧。
4.能够使用基本的电子工具和设备;5.能够阅读和理解电子时钟的设计图纸;6.能够独立完成一个简单的电子时钟设计项目。
情感态度价值观目标:1.培养学生的创新意识和团队合作精神;2.培养学生对电子技术的兴趣和热情;3.培养学生对科学研究的严谨态度和责任感。
二、教学内容本课程的教学内容主要包括以下几个部分:1.电子时钟的基本原理和构成;2.常用电子元器件的功能和应用;3.电子时钟设计的常用方法和技巧;4.电子时钟设计实例讲解和分析。
第一周:电子时钟的基本原理和构成;第二周:常用电子元器件的功能和应用;第三周:电子时钟设计的常用方法和技巧;第四周:电子时钟设计实例讲解和分析。
三、教学方法本课程采用讲授法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:用于讲解电子时钟的基本原理、构成和设计方法;2.案例分析法:通过分析具体的电子时钟设计案例,让学生更好地理解和掌握设计技巧;3.实验法:让学生通过实际操作,独立完成一个简单的电子时钟设计项目。
四、教学资源本课程的教学资源主要包括以下几个部分:1.教材:《电子时钟设计入门》;2.参考书:电子时钟设计相关的专业书籍;3.多媒体资料:电子时钟设计的相关视频和图片;4.实验设备:电子工作台、示波器、信号发生器等。
以上教学资源将用于支持教学内容和教学方法的实施,丰富学生的学习体验。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面客观地评价学生的学习成果。
1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,评估其对电子时钟设计的理解和掌握程度。
2.作业:布置相关的设计项目和练习题,要求学生在规定时间内完成,以检验其对电子时钟设计方法和技巧的掌握情况。
嵌入式课程设计报告具有日历功能的电子时钟
学生姓名:权胜 王希 严家强
专业年级:计算机应用技术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
嵌入式系统课程设计报告
嵌入式系统课程设计报告摘要:本次设计的嵌入式系统为基于单片机的数字时钟设计。
系统主要由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 模块时,直接调用驱动程序。
电子时钟综合课程设计
电子时钟综合课程设计一、教学目标本课程旨在通过学习电子时钟的设计与制作,让学生掌握电子时钟的基本原理,了解电子元件的功能及其应用,提高学生的动手能力和创新能力,培养学生的团队合作意识和科学探究精神。
1.了解电子时钟的工作原理;2.掌握常用电子元件的功能和用法;3.学习简单的电路图阅读和分析能力。
4.能够阅读和理解电子时钟电路图;5.能够独立设计和制作简单的电子时钟;6.能够对电子时钟进行调试和故障排除。
情感态度价值观目标:1.培养学生的团队合作意识和分工合作能力;2.培养学生的科学探究精神和创新思维;3.增强学生对电子技术的兴趣和自信心。
二、教学内容本课程的教学内容主要包括电子时钟的工作原理、常用电子元件的功能及其应用、电子时钟电路的设计与制作、电子时钟的调试与故障排除等。
1.电子时钟的工作原理:介绍电子时钟的基本工作原理,包括时钟芯片、分频器、显示器等组成部分的功能和作用。
2.常用电子元件的功能及其应用:介绍电子时钟中常用的电子元件,如电阻、电容、二极管、三极管等,以及它们的功能和应用。
3.电子时钟电路的设计与制作:学习如何设计和制作一个简单的电子时钟电路,包括电路图的阅读和分析、元件的选择和焊接、电路的调试和优化等。
4.电子时钟的调试与故障排除:学习如何对电子时钟进行调试和故障排除,提高学生的动手能力和问题解决能力。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法、实验法等。
1.讲授法:通过讲解电子时钟的工作原理和常用电子元件的功能及其应用,使学生掌握基本知识。
2.讨论法:通过小组讨论和分享,促进学生之间的交流与合作,培养学生的团队合作意识和科学探究精神。
3.案例分析法:通过分析具体的电子时钟电路案例,使学生能够理解和应用所学知识,提高学生的电路分析和设计能力。
4.实验法:通过动手制作和调试电子时钟,培养学生的动手能力和创新能力,同时加深学生对电子时钟工作原理的理解。
电子时钟电子课程设计
电子时钟电子课程设计一、教学目标本课程旨在让学生了解电子时钟的工作原理,掌握基本的电子电路设计和实验技能,培养学生的创新意识和团队合作精神。
具体目标如下:1.知识目标:学生能够理解电子时钟的基本原理,包括时钟芯片、电路板设计、显示系统等。
2.技能目标:学生能够运用电子元件,如电阻、电容、二极管、晶体管等,设计并制作一个简单的电子时钟。
3.情感态度价值观目标:学生能够体验到科技制作的乐趣,增强对科学的兴趣和好奇心,培养团队合作和解决问题的能力。
二、教学内容本课程的教学内容主要包括电子时钟的工作原理、电路设计、实验操作和调试技巧。
具体安排如下:1.第一章:电子时钟概述,介绍电子时钟的原理和应用。
2.第二章:电路设计基础,讲解电子元件的功能和应用,以及电路图的绘制。
3.第三章:时钟芯片的使用,介绍时钟芯片的原理和编程方法。
4.第四章:电路板设计和制作,讲解电路板的设计原则和制作流程。
5.第五章:显示系统的设计,介绍各种显示器件的原理和应用。
6.第六章:实验操作和调试,讲解实验设备的使用方法和调试技巧。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。
具体应用如下:1.讲授法:用于讲解电子时钟的基本原理和知识点。
2.讨论法:鼓励学生就电路设计和实验过程中遇到的问题进行讨论,培养团队合作精神。
3.案例分析法:分析典型的电子时钟设计案例,帮助学生掌握电路设计和调试技巧。
4.实验法:让学生动手制作电子时钟,提高其实际操作能力和创新能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:电子时钟设计指南,用于引导学生学习电子时钟的基本知识和技能。
2.参考书:电子电路设计手册,为学生提供更多的电路设计参考资料。
3.多媒体资料:包括电子时钟工作原理的视频、电路图演示等,帮助学生更好地理解电子时钟的原理和设计。
电子时钟课程设计 (2)
电子时钟课程设计1. 引言本篇文档介绍了一个关于电子时钟的课程设计方案。
电子时钟是一种常见的时间显示设备,它可以通过集成电路和显示屏来实现时间的精确显示。
本课程设计旨在帮助学生深入了解电子时钟的工作原理和实现方法,并通过实际动手实践来巩固所学知识。
2. 设计目标本课程设计的主要目标如下:1.了解电子时钟的基本工作原理;2.掌握使用集成电路和显示屏实现电子时钟的方法;3.理解时钟实时显示的原理,并能够实现时间的准确显示;4.学会利用按键和继电器等模块实现时钟的功能扩展。
3. 设计内容本课程设计包括以下三个主要部分:3.1 硬件设计在硬件设计部分,学生需要选择适当的集成电路和显示屏,根据设计要求进行电路布局和连线。
具体的设计步骤如下:1.确定所需的功能,包括显示时间、日期、闹钟等;2.选择适当的集成电路,如时钟芯片、计数器芯片等,并了解其引脚功能;3.选择合适的显示屏,如数码管、液晶显示屏等,并了解其接口要求;4.根据引脚功能和接口要求,进行电路布局和连线;5.搭建电路并进行测试,确保电子时钟的基本功能正常。
3.2 软件设计在软件设计部分,学生需要编写相应的程序代码,控制集成电路和显示屏实现电子时钟的功能。
具体的设计步骤如下:1.熟悉集成电路的工作原理和编程接口;2.编写初始化程序,对集成电路进行初始化设置;3.编写时钟显示程序,实现时间的实时显示功能;4.编写日期显示程序,实现日期的显示功能;5.编写闹钟程序,实现闹钟功能的设定和响铃;6.编写功能扩展程序,如按键控制、亮度调节等。
3.3 整体调试在整体调试部分,学生需要对硬件和软件进行整体的测试和调试,确保电子时钟的各项功能正常工作。
具体的调试步骤如下:1.连接电子时钟的电源,确保电路和显示屏正常供电;2.进行硬件自检,检查电路连线和元件的工作状态;3.启动电子时钟,观察显示屏是否正常显示时间和日期;4.设置闹钟,检查闹钟的设定和响铃功能;5.进行功能扩展测试,如按键控制、亮度调节等;6.若发现问题,及时进行修改和调试,直至所有功能正常。
嵌入式秒表课程设计
嵌入式秒表 课程设计一、课程目标知识目标:1. 学生理解嵌入式系统基本原理,掌握秒表功能的相关算法和编程方法。
2. 学生了解并掌握嵌入式系统中时间计算、计时器使用等知识。
3. 学生掌握嵌入式系统设计中硬件与软件的协同工作原理。
技能目标:1. 学生能够运用所学知识,设计并实现一个具备基本秒表功能的嵌入式系统。
2. 学生能够运用编程软件和开发板进行程序编写、调试与优化。
3. 学生能够通过实际操作,培养动手能力和解决问题的能力。
情感态度价值观目标:1. 学生培养对嵌入式系统的兴趣,激发探索精神和创新意识。
2. 学生在学习过程中,培养团队合作意识,学会与他人共同解决问题。
3. 学生通过课程学习,认识到科技发展对社会的重要性,增强社会责任感。
课程性质:本课程为实践性课程,注重理论联系实际,培养学生的动手操作能力和创新能力。
学生特点:学生具备一定的编程基础,对嵌入式系统有初步了解,好奇心强,喜欢动手实践。
教学要求:教师需引导学生结合课本知识,通过实际操作,掌握嵌入式系统设计方法和技巧。
在教学过程中,注重培养学生的创新思维和团队协作能力。
课程目标分解为具体学习成果,以便于教学设计和评估。
二、教学内容1. 嵌入式系统基本原理回顾:引导学生复习嵌入式系统的工作原理,硬件与软件的协同工作,重点掌握计时器原理及应用。
相关教材章节:第一章 嵌入式系统概述,第三节 嵌入式系统硬件与软件协同设计。
2. 秒表功能算法分析:讲解秒表功能涉及的时间计算方法,如计时、暂停、复位等,并通过实例进行分析。
相关教材章节:第二章 嵌入式系统编程基础,第四节 算法设计与分析。
3. 嵌入式系统编程实践:指导学生运用所学知识,编写具备秒表功能的程序,并在开发板上进行调试与优化。
相关教材章节:第三章 嵌入式系统编程实践,第五节 嵌入式系统编程案例。
4. 硬件与软件协同设计:介绍如何在嵌入式系统中实现硬件与软件的协同设计,以实现秒表功能。
相关教材章节:第四章 嵌入式系统硬件设计,第六节 硬件与软件协同设计实例。
《嵌入式系统》课程设计电子时钟系统设计
《嵌入式系统》课程设计说明书电子时钟系统设计学院:学生姓名:指导教师:职称专业:班级:学号:完成时间:湖南工学院嵌入式系统课程设计课题任务书指导教师学生姓名罗朗课题名称电子时钟系统设计内容及任务一、目标在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();}}}。
课程设计-电子时钟
单片机课程设计-----定时闹铃系别:电子通信工程系专业:应用电子技术班级:嵌入式091班姓名:黄文钦学号:38实训地点:实训时间:2011年1月10日至1月14日1.概述1.1 系统的作用本系统是利用STC89C52单片机结合6个七段显示器以24时制“时时分分秒秒”格式显示时间的电子定时闹铃,系统可以设置2组定时闹铃;当定时闹铃时,该电子时钟通过蜂鸣器发出嘀嘀嘀嘀响声;本系统还具有整点报时功能,当现在时间为整点报时。
还有秒表功能,由于该电子定时闹铃有强大功能可以在多种场合下使用,利用七段显示器发光也可以在夜晚和黑暗场合下使用。
1.2 系统的功能要求(1)使用6位七段显示器显示24时制时间。
(2)时间显示格式为“时时分分秒秒”。
(3)定时闹铃功能。
(4)整点报时功能:当现在时间为整点时响铃。
(5)定时闹铃和现在时间模式可以互相切换而不影响各自功能。
(6)具有4个按键来进行功能设置,可以设置当前时间、闹铃的时间设置和秒表开关设置。
(7)具有秒表计时功能(8)调时区域闪烁(9)通过复位按键可以重启系统。
2.系统的硬件设计2.1系统的电路原理(1)系统以STC89C52单片机为本电路的核心元件,通过单片机的P0.0~P0.7引脚和A102J排阻加上拉电压来驱动七段显示器段显示数字。
(2)通过单片机的P2.2~P2.7引脚连接A103J排阻拉升电压信号,控制共阴极七段显示器连通接地来循环点亮6位七段显示器。
(3)在七段显示器供电的同时由P0脚驱动显示不同数字。
根据人眼的视觉暂留特点,调整延迟时间使所观察到时间数字是稳定的数字。
(4)系统使用了YXDZ蜂鸣器,通过单片机P3.0引脚连接8550PNP三极管推动发声。
(5)电路通过4个按键连接单片机P1.0~P1.3引脚低电平控制系统功能设置。
单片机实训3(6)单片机的复位电路,采用传统上电复位,通过Reset按键控制。
(7)系统通过一个发光二极管指示电路供电是或正常。
物联网嵌入式技术 项目八 多功能电子时钟教案
2.讲述湿度传感器的湿度和电压频率的关系,并提问应该如何采集频率。
听讲
学生通过教师设计的“引导问题”、“练一练”,带着问题学习任务实施所需的知识点,在必要时即时动手实践,可有效地提高其学习的主动性。
PPT
任务实施
(50min)
一、设备准备(1min,PPT第40页)
PPT、
实操视频
知识储备
(75min)
一、多功能电子时钟(15min,PPT16-18)
小组讨论:
(1)电子时钟具有哪些特点呢?
(2)电子时钟一般具有哪些功能?
1.讲述电子时钟的功能和特点;
引导问题:
(1)在哪些地方可以见到这些多功能的电子时钟?
二、湿敏传感器(20min,PPT21-22)
引导问题:
老师讲解本次任务所要达到的技能目标。
帮助学生梳理各个任务点,为学习指明路径。
四、任务描述与要求(10min,PPT第10页)
1.教师围绕“采集湿度光照传感器数据
”讲解本任务的要求。
2.演示任务8.1的完成效果。
听讲
教师介绍完任务的结构后,演示任务完成效果,学生将对本任务的要求有一个感性的认识,同时也能吸引其注意力,激发其学习的积极性。
教材
《物联网嵌入式技术》。
教学环节(时间分配)
教学内容与教师活动
学生
活动
设计意图
教学手段
课前准备
(35min)
一、教师说课-课程整体设计(10min,课程整体设计PPT)
1.课程性质与定位;
2.课程教学目标;
3.课程教学内容;
4.课程教学实施;
5.课程考核评价。
- 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();}}}。