课程设计 实时时钟

合集下载

实时时钟设计试验报告

实时时钟设计试验报告

实验报告5.按下Key4 Key3执行时,该按键执行加一操作,Led灯按照5秒顺时针一个一个亮。

6.按下Key5 Key3执行时,该按键执行减一操作,Led灯按照5秒顺时针一个一个亮。

7.按下Key6 Key3执行时,该按键执行确定操作,Led灯按照5秒顺时针一个一个亮。

8.按下INT 闹钟关闭。

5、实验总结本次实验是对课本上“电子日历钟设计”的加深。

通过本次试验我对led和led显示有了更加熟悉的认识,能熟练应用它们的功能。

同时我对时钟计数器也有了一定的认识,可以使用定时中断实现实时时钟,更重要的是我的实践能力有很大的提高。

程序设计中遇到的问题(1)、问题:初始完成程序后秒针走的时间很快,不是精确的一秒走一次。

原因:单片机只能用主系统时间,修改fprs后可以真确显示。

(2)、问题:时间切换函数与显示函数和设计的不一样,如只需要显示时,却多显示分。

原因:在仔细看代码后发现每次按键中断都在调用time1()函数,而seeond++在里面,所以每次都会加快秒的运行。

把seeond++移到外面放入time()函数后这个问题就解决了。

(3)、问题:运行时发现按键中断总会加快秒的运行,不是很精确。

原因:最后设置了一个虚拟的key7,当执行完时间指向ease7,然后调用Freshddisplaybuffer函数,这样就很好的解决了这个问题。

在程序调试过程中,设置断点并且在断点处增加一个LED灯,通过判断灯是否亮可以判断程序是否执行到该位置,对程序调试有很大的帮助。

开始WhileKey? 6 1 3 2 4 结束主程序流程图附件程序流程图:Yd_c_inter() Freshddisp laybuffer(); Set_D_T(); noise(); key=7; , 5 NDownNum() ; Freshddispl aybuffer(); Set_D_T(); noise(); key=7; FreshddisplaybufferTime1();Show_Time();Show_Time(); Time1() Freshddis playbuffer ();; Display_D ate(); noise(); 初始化蜂鸣器并关闭蜂鸣器BZOE = 0;初始化 INT 按键 Init_Inter();初始化 Lcd 和 Led; Init_Lcd(),Init_Led();UpNum(); Freshddis playbuffer (); Set_D_T(); noise(); key=7; key = 0; noise(); Time1(); Freshddis playbuffer (); Set_D_T(); noise();初始化按键中断InitKey_INTKR();Time1(); noise();关中断DI ()关中断EI()开中断EI();源代码:#pragma sfr#pragma EI#pragma DI#pragma access#pragma interrupt INTTM000 Time#pragma interrupt INTKR OnKeyPress#pragma interrupt INTP5 OnKeyOver void Init_Led();void InitKey_INTKR();void Init_Lcd();void Init_Inter();void LightOneLed(unsigned char ucNum);void LightOff();int Count_Day(int month);〃定义变量i,是切换时间的标志//定义 key=0 〃用于存放当前月的天数 〃默认的秒second=0 〃默认的分minute=0 〃默认的时hour=12 〃默认的天day=1 〃默认的月month=5 〃默认的年year=2014 〃默认的闹钟时=1 〃默认的闹钟分=1 〃秒的数码显示缓存区 〃分的数码显示缓存区 〃时的数码显示缓存区 〃天的数码显示缓存区 〃月的数码显示缓存区 〃年的数码显示缓存区 〃月,天的数码显示缓存区 〃时,分的数码显示缓存区 〃分,秒的数码显示缓存区 〃闹钟时的数码显示缓存区 〃闹钟分的数码显示缓存区 //INT 中断中间变量LCD_num[10]={0X070d,0x0600,0x030e,0x070a,0x0603,0x050b,0x050f,0x0700,0x070f,0x070b);//数字0〜〜9的显示码unsigned char Scond;// ......................................................... 延时函数1 .............................................. //void Delay(int k){int i,j;for(i=0;i<k;i++){for(j=0;j<k;j++){〃使用特殊功能寄存器 〃开中断 〃关中断 〃使用绝对地址指令 〃定义时间中断函数为Time 〃定义按键中断为OnKeyPress //定义INT 中断为OnKeyOverchar i=0;int key=0;int temp=1;int temp1 = 1;int second=0;int minute=0;int hour=12;int day=1;int month=5;int year=2014;int c_hour=1;int c_minute=1;int buffs[2];int buffm[2];int buffh[2];int buffday[2];int buffmonth[2];int buffyear[4];int buffmd[4];int buffhm[4];int buffms[4];int buffch[2];int buffcm[2];unsigned char Que = 0;int// .................................................. 初始化Led函数................ //void Init_Led(){PM13=0XF0; 〃端口13的第四位为输出模式PM14=0XF0; 〃端口14的第四位为输出模式PM15=0XF0; 〃端口15的第四位为输出模式)// ............................................................. 按键中断函数............... •//void InitKey_INTKR(){PM4 = 0x3F; //P4的六个端口设置为输入模式PU4 = 0x3F; 〃接通上拉电阻KRM = 0x3F; 〃允许六个按键中断KRMK = 0;PM3.0 = 1;PU3.0 = 1;EGP.5 = 1;PMK5 = 0;PPR5 = 0;KRPR = 1;)// ............................... 初始化lcd函数............... //void Init_Lcd(){ PFALL=0x0F; 〃所有接lcd引脚指定为lcd引脚LCDC0=0x34; 〃设置原时钟和时钟频率LCDMD=0x30; //设置lcd电压为3/5电压LCDM=0xC0; //4分时1/3偏压模式)// ............................... 初始化定时器Inter函数.............. 〃void Init_Inter(){ CRC00)=0; //CR000为比较寄存器PRM00=0X04; 〃计数时钟为fprs/2A8 CR000=0X7FFF;//时间间隔为1s TMMK010=1;//TMMK010 中断屏蔽TMMK000=0; //TMMK000 中断允许TMC00=0X0C; //TM00和CR000相等时进入清零&启动模式)void Time(){ second++;)// ............................................................. 按键中断函数............... •//void OnKeyPress(){DI();switch(P4&0x3F) 〃判断哪个按键按下{case 0x3e:key=1; //按键keyl按下break;case 0x3d:key=2; //按键key2按下break;case 0x3b:key=3; //按键key3按下break;case 0x37:key=4; //按键key4按下break;case 0x2f:key=5; //按键key5按下break;case 0x1f:key=7; //按键key6按下break;default:break;)EI();)// ............................................................... I NT按键中断函数............... //void OnKeyOver(){DI();Que = 0; //判断Que是否为0BZOE = 0; 〃蜂鸣器关闭EI();)// ................................................... Led小灯函数............... //void LightOneLed(unsigned char ucNum){switch(ucNum){ 〃检测变量ucNumcase 0:case 1:case 2:case 3:P13 |= (unsigned char) 1 << (ucNum);〃如果为0到3中的一个值则让LED1到LED4中的一个亮break;case 4:case 5:case 6:case 7:P14 |= (unsigned char) 1 << (ucNum - 4);〃如果为4到7中的一个值则让LED5到LED8中的一个亮break;case 8:case 9:case 10:case 11:P15 |= (unsigned char) 1 << (ucNum - 8);〃如果为8至U 11中的一个值则让LED9至U LED12中的一个亮break;default:break;))// ................................................... Led小灯熄灭函数............... 〃void LightOff(){P13 = 0;P14 = 0;P15 = 0;)// ............................................. 时间函数.............. 〃void Time1(){if((second % 5) == 0){ 〃秒大于 5 变为0Scond = second / 5 + 1;LightOff(); 〃调用小灯亮函数LightOneLed(Scond % 12);)if(second>=60){minute++; //秒大于60时分加1second=0;if(minute>=60){minute=0;hour++; //分大于60时时加1if(hour>=24){hour=0;day++; 〃时大于24时天加1temp=Count_Day(month);if(day>=temp){day=1;month++; 〃天大于当前月份的天数时月加1if(month>=13){month=1;year++; //月大于12时年加1))))))// ...................................... 计算当前月的天数.............. •//int Count_Day(int month){int day;if((month==4)||(month==6)||(month==9)||(month==11))//4,6,9,11 月为30 天day=30;else if(month==2){if((year%4==0&&year%100==0)||(year%400==0))day=29; 〃闰年2月29天elseday=28; //平年2月28天)elseday=31; //1,3,5,7,8,10,12 月为31 天return (day);)// ................................ 倒计时函数 ...... //void Show_Time(){ pokew(0xFA40,0x00); pokew(0xFA42,0x00); pokew(0XFA48,buffs[1]); pokew(0XFA4A,buffs[0]); pokew(0XFA44,buffm[1]); pokew(0XFA46,buffm[0]); pokew(0xFA4C,0x00); pokew(0xFA4E,0x00); Delay(100);) // ..................................................................... 日期显示函数 ................. •// void Display_Date(){buffm[0]|=0x0800;pokew(0xFA40,buffyear[3]);〃显示年 pokew(0xFA42,buffyear[2]);pokew(0xFA44,buffyear[1]);pokew(0xFA46,buffyear[0]);pokew(0xFA48,buffmonth[1]);〃显示月 pokew(0xFA4A,buffmonth[0]);pokew(0xFA4C,buffday[1]);〃显示日pokew(0xFA4E,buffday[0]);temp1=0;) // .................................................................... 时间显示函数 .............. •//void Display_Time(){ pokew(0xFA40,0x00);pokew(0xFA42,0x00);pokew(0xFA44,buffh[1]);〃显示时 pokew(0xFA46,buffh[0]);pokew(0xFA48,buffm[1]);〃显示分 pokew(0xFA4A,buffm[0]);pokew(0xFA4C,buffs[1]);〃显示秒 pokew(0xFA4E,buffs[0]);)// ..................................................................... 设定时间函数 .............. •//void Set_D_T(){int lcd_addr;lcd_addr = 0xFA40;switch(i){case 1:pokew(lcd_addr,buffyear[3]);〃时间年 pokew(lcd_addr+2,buffyear[2]);pokew(lcd_addr+4,buffyear[1]);pokew(lcd_addr+6,buffyear[0]);pokew(lcd_addr+8,0x00);pokew(lcd_addr+10,0x00);pokew(lcd_addr+12,0x00);pokew(lcd_addr+14,0x00);break;case 2:pokew(lcd_addr,0x00);pokew(lcd_addr+2,0x00);pokew(lcd_addr+4,0x00);pokew(lcd_addr+6,0x00);pokew(lcd_addr+8,buffmonth[1]);〃时间月 pokew(lcd_addr+10,buffmonth[0]);pokew(lcd_addr+12,0x00);pokew(lcd_addr+14,0x00);break;case 3:pokew(lcd_addr,0x00); //在lcd 右边显示1〃在lcd 右边显示0 〃在lcd 右边显示1 〃在lcd 右边显示0pokew(lcd_addr+2,0x00);pokew(lcd_addr+4,0x00);pokew(lcd_addr+6,0x00);pokew(lcd_addr+8,0x00);pokew(lcd_addr+10,0x00);pokew(lcd_addr+12,buffday[1]); 〃时间日pokew(lcd_addr+14,buffday[0]);break;case 4:pokew(lcd_addr,0x00);pokew(lcd_addr+2,0x00);pokew(lcd_addr+4,buffh[1]); 〃时间时pokew(lcd_addr+6,buffh[0]);pokew(lcd_addr+8,0x00);pokew(lcd_addr+10,0x00);pokew(lcd_addr+12,0x00);pokew(lcd_addr+14,0x00);break;case 5:pokew(0xFA40,0x00);pokew(0xFA42,0x00);pokew(0xFA44,0x00);pokew(0xFA46,0x00);pokew(0xFA48,buffm[1]); 〃时间分pokew(0xFA4A,buffm[0]);pokew(0xFA4C,0x00);pokew(0xFA4E,0x00);break;case 6:pokew(0xFA40,0xd1);pokew(0xFA42,0xd0);pokew(0xFA44,0xd7);pokew(0xFA46,0xd1);pokew(0xFA48,0x50);pokew(0xFA4A,0x56);pokew(0xFA4C,buffch[1]); 〃闹钟时pokew(0xFA4E,buffch[0]);break;case 7:pokew(0xFA40,0xd1);pokew(0xFA42,0xd0);pokew(0xFA44,0xd7);pokew(0xFA46,0xd1);pokew(0xFA48,0x50);pokew(0xFA4A,0x00);pokew(0xFA4C,buffcm[1]); 〃闹钟分pokew(0xFA4E,buffcm[0]);break;default:break;))// ........................................................ 切换时间函数 .............. …// void d_c_inter(){DI(); 〃关中断i++;if(i>7) 〃切换标志>7, i=1,否则i++i=1;EI(); 〃开中断)// ........................................................ 调整时间加函数 .............. •// void UpNum(){ switch(i){ case 1:year++;case 2:month++;if(month > 12){month = 1;)break;case 3:temp = Count_Day(month);day++;if(temp < day)day = 1;break;case 4:hour++;if(hour > 23)hour = 1;break;case 5:minute++;if(minute > 59)minute = 0;break;case 6:c_hour++;if(c_hour > 23)c_hour = 1;break;case 7:c_minute++;if(c_minute > 59)c_minute = 0;break;default:break;))// ........................................................ 调整时间减函数.............. …// void DownNum(){switch(i){case 1:year--;case 2:month--;if(month < 1){month = 12;)break;case 3:temp = Count_Day(month);day--;if(day < 1)day = temp;break;case 4:hour--;if(hour < 1)hour = 23;break;case 5:minute--;if(minute < 0)minute = 59;break;case 6:c_hour--;if(c_hour < 1)c_hour = 23;break;case 7:c_minute--;if(c_minute < 0)c_minute = 59;break;default: break;))// .................................................. 闹铃以及小灯函数.............. •//void noise(){if(c_hour == hour && c_minute == minute && Que == 1){ 〃闹铃的时,分与系统时,分相等,并且闹钟标志开启CKS=0XE0; 〃开启蜂鸣器输出,输出频率为0.98khz的音频Time1(); 〃调用时间函数))// ........................................................ 显示缓存区刷新时间函数.............. •//void Freshddisplaybuffer(){buffs[1]=LCD_num[second/10];/期的显示码放入秒的数码显示缓存区buffs[0]=LCD_num[second%10];buffm[1]=LCD_num[minute/10];//分的显示码放入分的数码显示缓存区buffm[0]=LCD_num[minute%10];buffm[0]|=0x0800; 〃分的后面显示一个"."buffh[1]=LCD_num[hour/10]; 〃时的显示码放入时的数码显示缓存区buffh[0]=LCD_num[hour%10];buffh[0]|=0x0800; 〃时的后面显示一个"."buffday[1]=LCD_num[day/10];//天的显示码放入天的数码显示缓存区buffday[0]=LCD_num[day%10];buffmonth[1]=LCD_num[month/10];//月的显示码放入月的数码显示缓存区buffmonth[0]=LCD_num[month%10];buffmonth[0]|=0x0800; 〃月的后面显示一个"."buffyear[3]=LCD_num[year/100/10];/^的显示码放入年的数码显示缓存区buffyear[2]=LCD_num[(year/100)%10];buffyear[1]=LCD_num[(year%100)/10];buffyear[0]=LCD_num[(year%100)%10];buffyear[0]|=0x0800; 〃年的后面显示一个"."buffmd[3]=LCD_num[month/10];//月,天的显示码放入月,天的数码显示缓存区buffmd[2]=LCD_num[month%10];buffmd[2]|=0x0800; 〃月,天后显示一个"."buffmd[1]=LCD_num[day/10];buffmd[0]=LCD_num[day%10];buffhm[3]=LCD_num[hour/10];//时,分的显示码放入时,分的数码显示缓存区buffhm[2]=LCD_num[hour%10];buffhm[2]|=0x0800; 〃时,分的后显示一个"."buffhm[1]=LCD_num[minute/10];buffhm[0]=LCD_num[minute%10];buffms[3]=LCD_num[minute/10];/^,秒的显示码放入分,秒的数码显示缓存区buffms[2]=LCD_num[minute%10];buffms[2]|=0x0800; 〃分,秒的后显示一个"."buffms[1]=LCD_num[second/10];buffms[0]=LCD_num[second%10];buffch[1]=LCD_num[c_hour/10];//闹钟时的显示码放入闹钟时的数码显示缓存区buffch[0]=LCD_num[c_hour%10];buffcm[1]=LCD_num[c_minute/10];//闹钟分的显示码放入闹钟分的数码显示缓存区buffcm[0]=LCD_num[c_minute%10];)// ................................. 主函数............... 〃void main(){DI(); 〃关中断PM3.4 = 0; //P3.3,P3.4端口设置为输出模式P3.4 = 1; //led灯初始化为点亮状态PM3.3 = 0;P3.3 = 0;BZOE = 0; 〃蜂鸣器初始化为熄灭Init_Lcd(); 〃初始化lcdInit_Led(); 〃初始化ledInitKey_INTKR(); 〃初始化按键EI(); 〃开中断Init_Inter(); //初始化中断while(1){ Time1(); noise(); switch(key){ case 0: Freshddisplaybuffer(); Time1(); Show_Time();Show_Time(); break; case 1:Time1();Freshddisplaybuffer(); Display_Date(); noise();break;case 2:Time1();Freshddisplaybuffer(); Display_Time(); noise();break;case 3:d_c_inter();Freshddisplaybuffer(); Set_D_T();noise();key=7; break;case 4:UpNum();Freshddisplaybuffer(); Set_D_T();noise();key=7; break;case 5:DownNum();Freshddisplaybuffer(); Set_D_T();noise();key=7; break;case 6:key = 0;if(i > 5)Que = 1;1 = 0;noise();case 7:Time1();Freshddisplaybuffer(); Set_D_T(); 〃调用计算时间函数 〃调用闹钟函数 〃没有按键执行 〃调用刷新函数 〃计算时间 〃调用显示时间函数 //按键1执行 〃计算时间 〃调用刷新函数 〃调用显示日期函数 〃调用闹钟函数 //按键2执行 //计算时间 //调用刷新函数 //调用时间显示函数 //调用闹钟函数 //按键3执行 〃调用时间切换函数 //调用刷新函数 〃调用时间设置函数 //调用闹钟函数 //按键4执行 〃调用时间加函数 //调用刷新函数 //调用时间设置函数 //调用闹钟函数 //按键5执行〃调用时间减函数 //调用刷新函数 //调用时间设置函数//调用闹钟函数//按键6执行〃判断是否确认 //调用闹钟函数〃虚拟按键7 //调用刷新函数//调用时间设置函数〃调用闹钟函数noise();break;。

日了实时时钟设计

日了实时时钟设计

一、设计目的、意义、内容及要求1.1设计目的多功能波形发生器是科学实验研究中常用的电子仪器之一。

本实验通过设计一个由微机控制的多功能波形信号发生器,旨在使学生能够做到以下几点。

1.熟悉几种典型波形产生的原理。

2.进一步掌握A/D转换电路在智能化仪表装置中的应用。

3.了解由微机控制的多功能波形发生器的设计思路与实现方法。

1.2设计意义本课程涉及到的基础理论知识较广,应用范围广,在国内外同类课程中占有十分重要的地位。

二十世纪八十年代,微机技术日臻成熟,日趋完善,在国内外许多企业的微机应用中发挥着重要作用,占主导地位。

随着机电一体化水平的不断提高,微机的应用越来越广泛,微机技术在我国应用范围逐步扩大,而且用人单位急需微机应用方面的人才,所以该课程具有一定的领先性和代表性。

本课程在将以上内容有机地联系在一起的基础上,遵循“重原理轻细节、重系统轻局部”的原则,结合微机技术的发展,不断地对课程结构和教学内容进行优化和更新。

以提高学生能力与素质为重点,对教学思想、教学内容,教学手段与方法进行了系统改革,将理论教学、实验与多媒体课内外实践相结合,提高学生的素质与能力。

通过本课程的教学试验,使学生能够掌握微型计算机的基本知识、基本组成、体系结构和工作模式,从而很清楚的了解微机的结构和工作流程,建立起系统的概念。

1.3设计内容及要求本实验设计一个由微机控制的多功能波形发生器。

具体设计要求如下。

1.使用DAC0832和CPU相连,用软件延时编制程序产生三角波、锯齿波、方波、正弦波,在DAC0832和OUT端用示波器观察波形。

2.波形频率在1KHZ~10KHZ间可调。

3.设计人机接口,实现波形与频率的选择。

具体设计内容如下:1.设计DAC0832的接线,用键盘输入要求的波形与频率。

2.至少产生三种波形。

3.键盘与显示处理程序分为两种:1)使用LED显示;2) 使用实验箱键盘。

二、总体设计方案2.1设计思想本实验通过开关程序来控制波形之间的切换,当某个开关打开对应的某个波形就出现在示波器上,开关用外围芯片8255A来实现。

stm32数字时钟课程设计

stm32数字时钟课程设计

stm32 数字时钟课程设计一、课程目标知识目标:1. 学生能理解STM32的基本结构和工作原理,掌握其编程方法。

2. 学生能掌握数字时钟的基本原理,包括时钟源、分频器、计数器等组成部分。

3. 学生能了解实时时钟(RTC)的功能及其在STM32中的应用。

技能目标:1. 学生能运用C语言编写程序,实现STM32控制数字时钟的功能。

2. 学生能通过调试工具,对程序进行调试和优化,确保数字时钟的准确性。

3. 学生能运用所学知识,设计具有实用价值的数字时钟产品。

情感态度价值观目标:1. 培养学生对电子技术和编程的兴趣,激发其探究精神。

2. 培养学生团队合作意识,使其在项目实施过程中学会相互沟通、协作。

3. 培养学生严谨、细致、负责的工作态度,提高其解决实际问题的能力。

课程性质:本课程为实践性较强的课程,结合STM32和数字时钟知识,培养学生的动手能力和实际操作技能。

学生特点:学生具备一定的电子技术基础和C语言编程能力,对实际操作感兴趣,但可能缺乏项目实践经验。

教学要求:注重理论与实践相结合,引导学生主动探索,提高其分析问题、解决问题的能力。

在教学过程中,关注学生的个体差异,因材施教,使每位学生都能在原有基础上得到提高。

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

二、教学内容本课程教学内容主要包括以下几部分:1. STM32基本原理与编程基础:介绍STM32的内部结构、工作原理,C语言编程基础及其在STM32中的应用。

- 教材章节:第一章至第三章- 内容:微控制器基础、STM32硬件结构、C语言编程基础、STM32编程环境搭建。

2. 数字时钟原理与设计:讲解数字时钟的基本原理、组成部分以及设计方法。

- 教材章节:第四章至第五章- 内容:时钟源、分频器、计数器、实时时钟(RTC)、数字时钟设计方法。

3. STM32实现数字时钟功能:结合STM32和数字时钟知识,指导学生动手实践,实现数字时钟功能。

linux实时时间显示课程设计

linux实时时间显示课程设计

linux实时时间显示课程设计一、教学目标本课程的教学目标是让学生掌握Linux系统中实时时间显示的原理和方法。

具体包括:1.知识目标:–了解Linux操作系统的基本结构;–掌握Linux系统中的时间管理机制;–理解实时时间显示的原理和方法。

2.技能目标:–能够配置Linux系统的时钟;–能够使用命令行工具获取实时时间;–能够编写简单的脚本实现实时时间显示。

3.情感态度价值观目标:–培养学生的动手实践能力,提高他们对计算机科学的兴趣;–培养学生团队合作精神,提高他们的问题解决能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.Linux操作系统基本结构:介绍Linux操作系统的内核、文件系统、进程管理等基本组成部分;2.时间管理机制:讲解Linux系统中的时间管理机制,包括时钟、时间源、时间同步等;3.实时时间显示原理:介绍实时时间显示的原理,包括硬件时钟、软件时钟、NTP协议等;4.实时时间显示方法:讲解如何在Linux系统中实现实时时间显示,包括命令行工具的使用、脚本的编写等。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:用于讲解Linux操作系统基本结构、时间管理机制等理论知识;2.讨论法:通过小组讨论,让学生深入理解实时时间显示的原理和方法;3.案例分析法:分析实际案例,让学生掌握命令行工具和脚本的使用;4.实验法:让学生动手实践,配置Linux系统的时钟,编写实时时间显示的脚本。

四、教学资源本课程所需的教学资源包括:1.教材:《Linux操作系统原理与应用》;2.参考书:《Linux系统编程》;3.多媒体资料:PPT课件、实验指导视频等;4.实验设备:计算机、网络设备等。

以上教学资源将有助于实现本课程的教学目标,提高学生的学习效果。

五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和理解程度;2.作业:布置相关的编程练习和理论作业,评估学生对知识的掌握和应用能力;3.实验报告:评估学生在实验过程中的操作技能和对实时时间显示原理的理解;4.期末考试:采用闭卷考试的方式,全面测试学生的理论知识和实践能力。

实时钟的设计

实时钟的设计

课程设计任务书班级:姓名:指导教师:时间:2011年6月教研室主任签字:年月日目录实时钟的设计 (3)1 引言 (3)2系统设计 (4)2.1电路组成及工作原理 (4)2.2总体设计框图 (5)3系统硬件电路的设计 (5)3.1单片机系统 (5)3.2调时及功能电路 (7)3.3 上点复位电路 (9)3.4显示电路 (10)3.5键盘工作模块 (11)3.6闹钟电路 (12)3.7 直流稳压电源部分 (12)3.8电压检测电路 (12)3.9备用电池功耗问题 (13)3.10 滤波电路 (13)3.11 电源变压器 (13)3.12稳压电路 (14)4. 软件设计 (14)4.1时钟主程序流程图 (14)4.2显示子程序 (15)4.3定时器T0中断服务程序流程图 (15)4.4定时器T1中断服务程序流程图 (16)4.5调时功能程序 (17)4.6秒表功能程序 (17)4.7闹钟时间设定功能程序 (18)5 调试及性能分析 (18)5.1 硬件调试 (18)5.2软件调试 (18)5.3性能分析 (18)5.4时钟计时检测 (18)6单片机C源程序 (19)7总结与体会 (19)8.参考文献 (19)附录:总电路图 (20)实时钟的设计1 引言单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。

单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。

由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。

这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由直流电源供电,通过数码管能够准确显数字时钟是现代社会应用广泛的计时工具,在航天、电子等科研单位,工厂、医院、学校等企事业单位,各种体育赛事及至我们每个人的日常生活中都发挥着重要的作用。

实时时钟课程设计

实时时钟课程设计

实时时钟课程设计一、课程目标知识目标:1. 学生能理解实时时钟的基本概念,掌握时钟的组成部分及运行原理。

2. 学生能够运用所学知识,分析并描述实时时钟的显示格式和功能。

3. 学生了解实时时钟在日常生活和科技领域中的应用。

技能目标:1. 学生能够运用所学知识,设计并制作一个简单的实时时钟电路。

2. 学生通过实际操作,提高动手实践能力和问题解决能力。

3. 学生能够运用实时时钟知识,解决实际问题,培养创新思维。

情感态度价值观目标:1. 学生对实时时钟产生兴趣,培养主动学习和探究的精神。

2. 学生在团队协作中,学会相互尊重、沟通和协作,培养集体荣誉感。

3. 学生认识到实时时钟在科技发展中的重要性,增强对科技进步的热爱和责任感。

本课程针对五年级学生,结合学生好奇心强、动手能力逐渐提高的特点,以实用性为导向,旨在帮助学生掌握实时时钟相关知识,提高实践操作能力,培养科学素养和团队协作精神。

课程目标具体、可衡量,便于教学设计和评估。

二、教学内容本章节教学内容主要包括以下三个方面:1. 实时时钟基础知识:- 时钟的组成部分:时钟芯片、晶体振荡器、计数器、显示装置等。

- 时钟运行原理:振荡器产生稳定的时钟信号,计数器对时钟信号进行计数,显示装置显示时间。

2. 实时时钟的应用与设计:- 显示格式:12小时制和24小时制,了解其转换方法。

- 功能介绍:闹钟、定时器、日期显示等。

- 设计实时时钟电路:使用时钟芯片,结合晶体振荡器、计数器等组件,设计并制作一个简单的实时时钟。

3. 实时时钟在实际应用中的案例:- 日常生活:电子时钟、手机、电脑等设备中的应用。

- 科技领域:物联网、智能设备、嵌入式系统等领域的应用。

教学大纲安排如下:1. 第一周:实时时钟基础知识学习,了解时钟的组成部分和运行原理。

2. 第二周:学习实时时钟的显示格式和应用功能,进行实际操作。

3. 第三周:设计实时时钟电路,分组进行实践操作,培养团队协作能力。

实时时钟设计报告

实时时钟设计报告

单片机系统设计》(课程设计)实验报告题目:实时时钟组号:任课教师:组长:成员:联系方式:年月日目录一、实施方案11.1设计要求 11.2实现功能 11.3设计方案 1二、原理简述 22.1主控模块 22.2时钟电路 32.3显示电路 52.4键盘输入电路72.5蜂鸣器电路8三、调试过程93.1 硬件调试93.2软件调试9四、主要程序10五、心得体会12实施方案1.设计要求通过对DS1302 编程,实现实时时钟功能,用数码管显示时、分,用小数点作秒闪。

可用键盘设置时间。

2.实现功能本组的课程设计成果最终将实现如下功能:(1)实现实时时钟功能,四位数码管前两位显示时、后两位显示分,小数点作秒闪;(2)按下S8键,可实现对小时的加1 设置;(3)按下S7键,可实现对分钟的加1 设置;(4)按下S1 键,可实现小时的单独显示;(5)实现整点蜂鸣器报时功能。

3.设计方案根据系统设计的功能的要求,初步确定设计系统由主控模块、时钟电路、显示电路、键盘输入电路及蜂鸣器电路组成。

电路系统框图如图1 所示。

图1 系统设计框图其中,主控芯片使用51 系列AT89C52单片机,时钟芯片使用DS1302,晶振为11.0592MHz,显示电路由四位共阳LED 数码管完成,键盘采用线性连接,使用查询法实现调整功能,蜂鸣器电路由有源蜂鸣器完成。

二、原理简述1. 主控模块图2 AT89C52 管脚图AT89C52是低功耗、高性能的CMOS8位单片机。

片内带有8KB 的Flash 存储器,且允许在系统内改写或用编程器编程。

另外,AT89C52 的指令系统和引脚与80C52 完全兼容。

管脚功能如下:VCC:供电电压;GND:接地;P0口:P0口为一个8 位漏级开路双向I/O 口,每脚可吸收8TTL 门电流。

;P1 口:P1口是一个内部提供上拉电阻的8位双向I/O 口,P1口缓冲器能接收输出4TTL 门电流;P2口:P2口为一个内部上拉电阻的8位双向I/O 口,P2口缓冲器可接收,输出4个TTL 门电流,当P2 口被写“ 1”时,其管脚被内部上拉电阻拉高,且作为输入。

c课程设计实时钟表

c课程设计实时钟表

c课程设计实时钟表一、课程目标知识目标:1. 学生能够理解实时钟表的基本概念,掌握时、分、秒的相互关系及其在钟表上的表示方法。

2. 学生能够运用所学知识,识别并准确读取各种类型的实时钟表时间。

3. 学生了解钟表的历史发展及其在日常生活和科技领域中的应用。

技能目标:1. 学生能够通过观察、分析,正确设置和调整钟表时间,培养实际操作能力。

2. 学生能够运用所学知识解决与实时钟表相关的问题,提高问题解决能力。

3. 学生能够运用信息技术手段,设计并制作简单的实时钟表模型。

情感态度价值观目标:1. 学生培养对时间观念的尊重,养成守时、珍惜时间的良好习惯。

2. 学生在小组合作中,培养团队协作精神,学会分享和交流。

3. 学生通过学习实时钟表,认识到科技与生活的紧密联系,增强对科学技术的兴趣和探索精神。

课程性质:本课程为小学四年级信息技术课程,旨在通过实时钟表的学习,让学生掌握时间的基本概念,提高观察、操作和问题解决能力。

学生特点:四年级学生对新鲜事物充满好奇,动手操作能力强,但注意力容易分散,需要结合实际操作和趣味性教学。

教学要求:教师应注重理论与实践相结合,运用生动、形象的教学方法,激发学生兴趣,引导学生在实践中掌握知识,培养技能和情感态度价值观。

通过分解课程目标为具体学习成果,为后续教学设计和评估提供依据。

二、教学内容1. 实时钟表的基本概念:时、分、秒的定义及其关系,钟表的构造及其工作原理。

2. 钟表时间的读取与设置:各类钟表(电子钟、指针钟、数字钟)的读取方法,如何调整和设置时间。

3. 钟表的应用与制作:- 钟表在日常生活和时间管理中的应用;- 设计并制作简易实时钟表模型,运用信息技术手段实现基本功能。

4. 钟表与科技发展:介绍钟表的历史演变,探讨钟表在科技领域的应用。

教学大纲安排:第一课时:实时钟表的基本概念及构造,了解时、分、秒的关系。

第二课时:学习读取和设置各类钟表时间,培养实际操作能力。

第三课时:探索钟表在日常生活和时间管理中的应用,培养时间管理意识。

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

单片机原理课程设计报告题目:实时时钟院(系)专业年级姓名学号指导教师设计时间2013.11.25-2013.12.6电子信息工程专业10级学生单片机原理课程设计任务书课程设计题目二、实时时钟指导教师职称高级工程师设计任务和要求:1.基本要求(1)采用DS1302作为实时时钟芯片进行计时(2)读出DS1302中的时间数据(3)能显示时间数据,包括年月日,时分秒(4)显示方式不限2. 设计步骤(1) 使用Proteus按设计要求绘制电路图。

(2) 按要求编写相应程序。

(3) 使用Proteus仿真程序,对程序进行调试。

(4) 撰写课程设计报告3.撰写课程设计报告课程设计报告内容包括题目、摘要、目录、正文、结论、致谢、参考文献等。

学生在完成上述全部工作之后,应将全部内容以先后顺序写成设计报告一份,阐述整个设计内容,要求重点突出、特色鲜明、语言简练、文字通畅,字迹工整。

报告书以A4纸打印,装订成册(文字不少于3000 字)。

目录1. 设计要求与方法论证 (3)1.1 设计要求 (3)1.2 系统基本方案选择和论证 (3)1.2.1 单片机芯片的选择方案和论证 (3)1.2.2 显示模块选择方案和论证 (4)1.3 电路设计最终方案决定 (4)2. 系统的硬件设计与实现 (4)2.1 电路设计框图 (4)2.2 系统硬件概述 (5)2.3 系统硬件模块 (5)2.3.1 AT89C51 (5)2.3.2 DS1302 (6)2.3.3点阵式LCD (7)3.系统的软件设计 (7)4. 硬件电路调试 (7)5. 结论 (9)6. 致谢 (9)参考文献 (10)附录 (11)实时时钟摘要:二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。

实时时钟的开发与研究在信息化时代的今天亦是当务之急,因为它有极广阔的应用市场,可以说遍及人们生活的每一个角落。

本文设计的实时时钟属于小型智能家用电子产品。

利用单片机进行控制,实时时钟芯片DS1302时钟芯片进行记时,本文设计的实时时钟具有读数方便,操作简单,适用范围宽等特点。

关键字:实时时钟,Proteus,51单片机,DS13021.设计要求与方案论证1.1设计要求(1)采用DS1302作为实时时钟芯片进行计时(2)读出DS1302中的时间数据(3)能显示时间数据,包括年月日,时分秒(4)显示方式不限1.2系统基本方案选择和论证1.2.1 单片机芯片的选择方案和论证方案一:用中小规模集成电路74/54系列和CC4000系列及555集成电路构建秒脉冲源,再利用分频器、计数器、缓存器等得到分、时、日、月、年的计时信号,最后用译码器驱动数码管显示,得到时钟功能。

方案二:采用AT89C51单片机,完全兼容MCS-51系列单片机的所有功能,并且本身带有2K的内存储器,可以在编程器上实现闪烁式的电擦写达几万次以上,比以往惯用的8031CPU外加EPROM为核心的单片机系统在硬件上具有更加简单方便等优点,具体如下:1)AT89C51单片机是最早期也最典型的产品,低功耗、高性能、采用CHMOS 工艺的8位单片机。

2)它在硬件资源和功能、软件指令及编程上与Intel 80C3X单片机完全相同。

在应用中可直接替换。

3)在AT89C51内部有FLASH程序存储器,既可用常规的编程器编程,也可用在线使之处于编程状态对其编程。

编程速度很快,擦除时也无需紫外线,非常方便。

4)AT89C5X系列可认为是Intel 80C3X的内核与Atmel FLASH技术的结合体。

它为许多嵌入式控制系统提供了灵活、低成本的解决方案。

方案比较:由两种方案可以看出,用方案一实现设计要求需要使用大量的集成电路,系统结构复杂,电路连接困难。

单个芯片的质量对系统的稳定性影响甚大,逻辑功能出现错误不易定位,整体调试费时费力。

扩展系统功能工作量极大,甚至有可能要将整个设计方案推倒重来。

方案二利用单片机作为控制核心,硬件按照技术手册要求连接后基本不需要调试,相关的逻辑功能全部由软件实现,修改方便。

功能扩展只需要在现有程序的基础上增加函数即可实现,无需对已实现功能的程序进行改动,调试方便,问题定位快捷、准确。

综上所述,我们采用方案二实现系统总体要求。

1.2.2 显示模块选择方案和论证方案一:采用LED数码管动态扫描, LED数码价格适中,对于显示数字最合适,而且采用动态扫描方法与单片机连接时,占用的单片机口线少,驱动电路简单,且LED在亮度、功耗、可视角度和刷新速率等方面,都更具很大的优势。

但所需数码管太多焊接困难极易出错,所以不采用LED数码管作为显示。

方案二:采用点阵式LCD显示,LCD1602是字符型液晶,显示字母和数字比较方便,控制简单,功耗低,体积小,显示内容丰富,超薄轻巧,可以用电池供电,便于携带,成本较低。

在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。

本设计需要显示较多的数字和字符,因此,采用点阵式LCD显示。

1.3 电路设计最终方案决定综上各方案所述,对此次作品的方案选定:采用AT89C51作为主控制系统;点阵式LCD作为显示;DS1302提供时钟。

2.系统的硬件设计与实现2.1 电路设计框图0123456776543210XTAL218XTAL119ALE 30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51C S 11C S 22G ND 3V C C 4V 05R S 6R /W 7E 8D B 09D B 110D B 211D B 312D B 413D B 514D B 615D B 716R S T 17-V o u t 18LCD1AMPIRE128X64X1CRYSTALC133pC233pR110k R210k R310k R410k R510k R610k R710k R810k50%RV11kRST 5SCLK 7I/O6X12X23VCC18VCC21U2DS1302BAT13VX232.768MHzC31pFC410pFC510pFR101k C610uR910k2.2 系统硬件概述本电路是由AT89C51单片机为控制核心,具有在线编程功能,低功耗,能在4.5V 超低压工作;显示部分用LCD1602实现,能够同时显示16x02即32个字符;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM 的实时时钟电路,可以对年、月、日、星期、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V.采用三线接口与单片机进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM 数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM 寄存器。

可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能,本设计中为DS1302增加了备用电池,当主电源掉电时,备用电池自动为其供电。

2.3 系统硬件模块2.3.1 AT89C51 各引脚的功能为:VCC :供电电压。

GND :接地。

P0口:P0口为一个8位双向I/O 口。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O 口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,P3.0 RXD(串行输入口),P3.1 TXD(串行输出口),P3.2 /INT0(外部中断0),P3.3 /INT1(外部中断1),P3.4 T0(记时器0外部输入),P3.5 T1(记时器1外部输入)。

2.3.2 DS1302各引脚的功能为:1:Vcc2:5V电源。

当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电;2、3:X1、X2 是外接晶振脚(32.768KHZ的晶振);4:地(GND);5:CE/RST:复位脚;6:I/O:数据输入输出口(双向);7:SCLK:串行时钟,输入;8:Vcc1:备用电池端。

2.3.3 点阵式LCD3. 系统的软件设计4. 硬件电路调试76543210C S 11C S 22G N D 3V C C 4V 05R S 6R /W 7E 8D B 09D B 110D B 211D B 312D B 413D B 514D B 615D B 716R S T 17-V o u t 18LCD1AMPIRE128X6450%RV11k当连接完电路、编写完程序以后,需要进行对各个器件进行检测,特别注意DS1302芯片。

进行仿真时如果LCD不显示数据应该检测编写的程序是否正确。

DS1302存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。

DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。

这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。

传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。

但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。

相关文档
最新文档