单片机原理及系统课程设计专业:电气工程及其自动化班级:姓名:学号:指导教师:兰州交通大学自动化与电气工程学院2014 年1 月13 日单片机原理及系统课程设计报告基于单片机的作息时间控制器设计1. 课程设计目的(1)进一步熟悉和掌握单片机的最小系统结构及其工作原理。
(2)掌握单片机的接口技术和键盘扫描、数码管显示的原理及拓展使用方法。
(3)通过课程设计,提高综合运用所学知识的能力,掌握单片机程序设计、调试,应用电路设计、分析及调试检测。
2. 设计方案及原理本设计是作息时间控制器,设计其实现的功能主要有:使用4位七段显示器来显示当前的时间,由LED闪动作为秒计数表示,显示格式为“时分”,并可显示日期,显示格式为“月日”,年份单独显示。
由4个按键来作功能设置,可以设置现在的日期、时间及定时设置时间,一旦设置的时间到则作出相应动作:发光二极管闪亮,同时播放音乐。
单数码管显示模块片机最按键控制模块小系闹钟模块统系统方框图图13. 硬件设计3.1单片机AT89C52提供以下标准功能:8K字节FLASH闪存,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。
3.2 按键控制模块按键设定部分比较简单,因为本系统按键少,所以在设计上采用了独立按键方式,程序的编制上也采用了简单的扫描方式。
按键控制模块主要有由四个按键1单片机原理及系统课程设计报告组成:K1、K2、K3、K4、。
其中K1的功能是模式切换键;K2的作用是加一;K3的作用是闹钟使能;K4的作用是减一。
K1KKK按键控制模23.3 数码管显示模块时间显示模块主要由四位七段数码管来显示,配合按键控制模块的校正与设定时间,相应的显示。
时间正常显示时,LED每闪动60次,分钟自动加一;每六十分钟小时自动加一;每24小时天自动加一。
数码管显示模块图33.4 闹钟模块闹钟模块快的主要功能即闹铃。
当设定时间与当前时间一致时,则闹钟自动闹铃进行提示,同时二极管闪亮一分钟后,自动退出响铃状态,若按K3键,闹钟退出响铃状态。
2单片机原理及系统课程设计报告闹钟模块图4软件设计4.当所设置的时间单片机作息时间控制的动作利用时间计时处理来做秒计数,不会因为按键处理而中单片机定时器负责定时的计数,到了,则发出一阵声响。
秒数据是存在变量内并写入七段显示器的缓冲区内,时,分,断时间秒数的增加,而由显示器扫描程序中定时扫描而显示出时间。
4.1 主程序设计若有按键则应做相应的功能在主控程序循环中主要工作为扫描是否有按键,时间计并检查所设置的时间是否到了,处理,同时也扫描显示器显示时间数据,后,则更新时间数据,将最新的时,分,秒的数据转换时处理程序是等过了1S 为数字数据并显示在七段显示器上。
的:设一旧秒数变量,当新旧秒数变量不一1S程序中是这样判断是否过了,要做相关程序时间处理了。
样时,则表示已过了1S3单片机原理及系统课程设计报告开始蜂鸣器初始化定时器初始按键扫显判断标志X=X=X=1,2时间显示X=3,4校正时间示函X=5,6设定闹钟示函X=7日期显示年份显示数主程序流程图图5中断子程序4.2次时,即为一秒,20中断子程序的主要功能:提供时间基准。
当连续中断时,小时当分钟值为60时,分钟加一,同时秒清零此时秒加一;当秒值为60;时,天值加一,同时小时清零;由于每月加一,同时分钟值清零;当小时为24天,当计数到此类月份时,天值为31、12月为、5、78、10、天数不定,1、3天,当计数到此类月份月为30、69、11;32时,月值加一,同时天值为14、天,当29;如果是闰年,则2月为31时,天值为时,月值加一,同时天值为1时,月值加一,同时天值为一;如果不是闰年,计数到此类月份时,天值为30时,月值加一,同时天值为一。
29月为28天,当计数此类月份时,天值为2则时,则年值加一,同时月值为一。
当月值为134单片机原理及系统课程设计报告开始设置定时器初值N返回主程序是否到下一秒秒变量加是否6秒值清零、分值加是否6分值清零、小时加小2是否小时清零、天值加是否到一天值为一、月值加是否为一月值为一、年值加结束6 中断子程序程序流程图图按键扫描子程序4.3按键扫描子程序是程序计中相当重要的一部分。
按键扫描子程序的功能是:扫描是否有按键按下,若有键按下,则执行相应功能。
系统仿真5.5单片机原理及系统课程设计报告6 系统仿真图图6. 总结在设计的过程中发现了自身本次课程设计是对所学知识的一次综合性运用。
并且对我们所学的东西也体会也很深刻,知识的不足。
这次课程设计收获很多,比如一些仿真软件也学会了很多新的东西,产生了浓厚的兴趣。
在设计过程中,软件的联合使用。
KEIL的应用,最典型的就是PROTEUS 软件的应用,以及与我觉得在除此之外,当然最重要的是学到了关于基本电子设计的一些基本方法。
只有虚心请教别人才能有效的解这次设计的过程中,很多自己解决不了的问题,这样不仅能帮助大家很快的解决问题,我觉得人与人之间的相互帮助很有必要,决问题,还能提高我们每个人的实际水平。
给予了我极在本次设计过程中遇到不少问题,老师在我们做设计的过程中,在人生观上也给了我不仅从知识方面引导了我们的设计思路,同时,大的帮助,们不少的启示。
在此,我对老师表示深深的谢意。
参考文献,2012科学出版社年[M].[1] 王思明,张金敏,苟军年等.单片机原理及应用系统设计北京: 年清华大学出版社北京单片机实践与应用吴金[2] .8051[M].:,20026单片机原理及系统课程设计报告[3] 杨子文.单片机原理及应用[M].西安:西安电子科技大学出版社,2006 年附1 源程序代码#include<reg52.h>#define uint unsigned int7单片机原理及系统课程设计报告#define uchar unsigned charuchar code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//******************************************************************** *****************sbit K1=P1^4;sbit K2=P1^5;sbit K3=P1^6;sbit K4=P1^7;sbit sd=P3^6;sbit BEEP=P3^7;uchar m=0,h=0,sec=0,cnt=0,x,y,qian,bai,shi,ge;uchar set_h=0;uchar set_m=0;uchar month=1;uchar day=5;uchar th0_f;uchar tl0_f;uint year=2014;void delay(uchar t);//延时函数void scankey(void); //按键扫描函数void init(void); //初始化函数void display(void);//显示函数void set_time(void);//设定时间显示辅助函数void set_day(void); //设定日期显示辅助函数void m_choose(void); //月份选择函数void bianhuan(void); //年份显示辅助函数void bianhuan1(void);//时间显示辅助函数changedata(uchar *song,uchar *diao,uchar *jie);//音乐符号串解释函数void play(uchar *songdata);//奏乐函数//虫儿飞uchar code chongerfei[]={_3_45|3-2-|11_1_23|3.,7_,7_-,632-,632-,6321_1-uchar code freq[36*2]={0xA9,0xEF,//00220HZ ,1 //00x93,0xF0,//00233HZ ,1#0x73,0xF1,//00247HZ ,20x49,0xF2,//00262HZ ,2#0x07,0xF3,//00277HZ ,30xC8,0xF3,//00294HZ ,40x73,0xF4,//00311HZ ,4#0x1E,0xF5,//00330HZ ,50xB6,0xF5,//00349HZ ,5#8单片机原理及系统课程设计报告0x4C,0xF6,//00370HZ ,60xD7,0xF6,//00392HZ ,6#0x5A,0xF7,//00415HZ ,70xD8,0xF7,//00440HZ 1 //120x4D,0xF8,//00466HZ 1# //130xBD,0xF8,//00494HZ 2 //140x24,0xF9,//00523HZ 2# //150x87,0xF9,//00554HZ 3 //160xE4,0xF9,//00587HZ 4 //170x3D,0xFA,//00622HZ 4# //180x90,0xFA,//00659HZ 5 //190xDE,0xFA,//00698HZ 5# //200x29,0xFB,//00740HZ 6 //210x6F,0xFB,//00784HZ 6# //220xB1,0xFB,//00831HZ 7 //230xEF,0xFB,//00880HZ `10x2A,0xFC,//00932HZ `1#0x62,0xFC,//00988HZ `20x95,0xFC,//01046HZ `2#0xC7,0xFC,//01109HZ `30xF6,0xFC,//01175HZ `40x22,0xFD,//01244HZ `4#0x4B,0xFD,//01318HZ `50x73,0xFD,//01397HZ `5#0x98,0xFD,//01480HZ `60xBB,0xFD,//01568HZ `6#0xDC,0xFD,//01661HZ `7 //35};//******************************//音乐符号串解释函数changedata(uchar *song,uchar *diao,uchar *jie){uchar i,i1,j;char gaodi;uchar banyin;uchar yinchang;uchar code jie7[8]={0,12,14,16,17,19,21,23};*diao=*song;for(i=0,i1=0;;){gaodi=0;banyin=0;yinchang=4;if((*(song+i)=='|') || (*(song+i)==' ')) i++;switch(*(song+i))9单片机原理及系统课程设计报告{case ',': gaodi=-12;i++;break;case '`': gaodi=12;i++;break;}if(*(song+i)==0){*(diao+i1)=0;*(jie+i1)=0;return;}j=*(song+i)-0x30; i++;j=jie7[j]+gaodi;yinc: switch(*(song+i)){case '#':i++;j++;goto yinc;case '-':yinchang+=4;i++;goto yinc;case '_':yinchang/=2;i++;goto yinc;case '.':yinchang=yinchang+yinchang/2;i++;goto yinc;}*(diao+i1)=j;*(jie+i1)=yinchang;i1++;}}//****************************************** 10单片机原理及系统课程设计报告//奏乐函数void play(uchar *songdata){uchar i,c,j=0;uint n;uchar diaodata[40];uchar jiedata[40];changedata(songdata,diaodata,jiedata);TR1=1;for(i=0;diaodata[i]!=0;i++){tl0_f=freq[diaodata[i]*2];th0_f=freq[diaodata[i]*2+1];for(c=0;c<jiedata[i];c++){for(n=0;n<24;n++){scankey();if(y==0){TR1=0;return;}display();}}TR1=0;for(n=0;n<500;n++);TR1=1;}TR1=0;}void time0(void) interrupt 1{TH0=0x3c;TL0=0xb0;cnt++;if(y==1&&(set_h==h&&set_m==m))sd=~sd;else sd=1;if(cnt==20){sec++;cnt=0;if(sec==60){sec=0;11单片机原理及系统课程设计报告m++;if(m==60){m=0;h++;if(h==24){h=0;day++;switch(month){case 1:if(day==32){month++;day=1;}break;case 2:if(year%4==0){if(day==30){month++;day=1;}} else{if(day==29){month++;day=1;}}break;case 3:if(day==32){month++;day=1;}break;case 4:if(day==31){month++;day=1;}break;case 5:if(day==32){month++;day=1;}break;case 6:if(day==31){month++;day=1;}break;case 7:if(day==32){month++;day=1;}break;case 8:if(day==32){month++;day=1;}break;case 9:if(day==31){month++;day=1;}break;case 10:if(day==32){month++;day=1;}break;case 11:if(day==31){month++;day=1;}break;case 12:if(day==32){month++;day=1;}break;}if(month==13){month=1;year++;}}}}if(x==0)bianhuan1();}}timer1() interrupt 3{TL1=tl0_f;TH1=th0_f; //调入预定值BEEP=~BEEP; //取反音乐输出IO}void main(void){12单片机原理及系统课程设计报告init();while(1){display();scankey();if(y==1&&(set_h==h&&set_m==m))play(chongerfei);else BEEP=0;}}void init(void){BEEP=0;TMOD=0x11;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=1;ET1=1;TR1=0;}void display(void){P2=0xfe;P0=a[qian];if(x%2==1&&cnt>=10)P0&=0x00;delay(20);P2=0xfd;P0=a[bai];if(x%2==1&&cnt>=10)P0&=0x00;else if(x==0&&cnt>=10)P0|=0x80;delay(20);P2=0xfb;P0=a[shi];if(((x%2==0&&x!=0)||x==7)&&cnt>=10)P0&=0x00; delay(20);P2=0xf7;P0=a[ge];if(((x%2==0&&x!=0)||x==7)&&cnt>=10)P0&=0x00;delay(20);}13单片机原理及系统课程设计报告void m_choose(void){switch(month){case 1:if(day==32)day=1;else if(day==0)day=31;break;case 2:if(year%4==0){if(day==30)day=1;elseif(day==0)day=29;}else{if(day==29)day=1;elseif(day==0)day=28;}break;case 3:if(day==32)day=1;else if(day==0)day=31;break;case 4:if(day==31)day=1;else if(day==0)day=30;break;case 5:if(day==32)day=1;else if(day==0)day=31;break;case 6:if(day==31)day=1;else if(day==0)day=30;break;case 7:if(day==32)day=1;else if(day==0)day=31;break;case 8:if(day==32)day=1;else if(day==0)day=31;break;case 9:if(day==31)day=1;else if(day==0)day=30;break;case 10:if(day==32)day=1;else if(day==0)day=31;break;case 11:if(day==31)day=1;else if(day==0)day=30;break;case 12:if(day==32)day=1;else if(day==0)day=31;break;}}void set_time(void){qian=set_h/10;bai=set_h_x0010_;shi=set_m/10;ge=set_m_x0010_;}void set_day(void){qian=month/10;bai=month_x0010_;shi=day/10;ge=day_x0010_;}void bianhuan(void){qian=year/1000;bai=year_x0010_00/100;shi=year_x0010_0/10;ge=year_x0010_;}14单片机原理及系统课程设计报告void bianhuan1(void){qian=h/10;bai=h_x0010_;shi=m/10;ge=m_x0010_;}void scankey(void){if(K1==0){delay(20);if(K1==0){while(K1==0);x++;if(x==3)set_time();else if(x==5)set_day();else if(x==7)bianhuan();else if(x==8){x=0;bianhuan1();}}}if(K2==0){delay(20);if(K2==0){while(K2==0);switch(x){case 0:break;case 1:h++;if(h==24)h=0;bianhuan1();break;case 2:m++;if(m==60)m=0;bianhuan1();break;case 3:set_h++;if(set_h==24)set_h=0;set_time();break;case 4:set_m++;if(set_m==60)set_m=0;set_time();break;case 6:day++;m_choose();set_day();break;case 5:month++;if(month==13)month=1;set_day();break;case 7:year++;bianhuan();break;}}}if(K3==0){delay(20);if(K3==0)15单片机原理及系统课程设计报告{while(K3==0);y++;if(y==2)y=0;}}if(K4==0){delay(20);if(K4==0){while(K4==0);switch(x){case 0:break;case 1:h--;if(h==255)h=23;bianhuan1();break;case 2:m--;if(m==255)m=59;bianhuan1();break;case 3:set_h--;if(set_h==255)set_h=23;set_time();break;case 4:set_m--;if(set_m==255)set_m=59;set_time();break;case 6:day--;m_choose();set_day();break;case 5:month--;if(month==0)month=12;set_day();break;case 7:year--;bianhuan();break;}}}}void delay(uchar t) //延时0.1毫秒{uchar i;do{for(i=0;i<23;i++) ;}while(t--);}16。