


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大连民族学院2007级电子信息工程专业单片机系统课程设计报告机电信息工程学院单片机系统课程设计报告系:班级:
电子信息工程系电子信息工程072班自动打铃系统设计张锡斌仇龙佳刘忠富于为民完成日期:2010531日大连民族学院2007级电子信息工程专业单片机系统课程设计报告目 录一、设计任务和性能指标 2设计任务 2性能指标 2二、设计方案 2三、系统硬件设置 3、单片机最小系统 3时钟电路DS1302 4、显示电路的设计 5、键盘接口的设计 5打铃电路的设计 6四、系统软件设计 7程序流程图 7主程序设计 10显示子程序的设计 11五、调试及性能分析 12调试步骤 12性能分析 12六、心得体会 12参考文献 13附录1系统硬件电路图 14附录2 程序清单 15大连民族学院2007级电子信息工程专业单片机系统课程设计报告大连民族学院2007级电子信息工程专业单片机系统课程设计报告PAGEPAGE3一、设计任务和性能指标设计任务用单片机器件为主体,设计一台自动打铃系统。(一)基本要求1、基本计时和显示功能(用12小时制显示)。包括上下午标志,时、分的数字显示,秒信号指示。2、能设置当前时间(含上、下午,时,分)。36:0052秒、5525用小喇叭播放,凡是用到铃声功能的均按此处理。(二)发挥部分1、增加整点报时功能,整点时响铃5秒,要求有控制启动和关闭功能。2、增加调整起床铃、熄灯铃时间的功能。347.305秒。4、特色和创新自选。性能指标时钟:上下午(1、时(2(2校对键:确认键/设置键、右移键/灭铃键、加键、减键响铃:蜂鸣器二.设计方案二、设计方案示模块、键扫描接口电路共四个模块组成,电路系统构成框图如图1.1所示通过内部定时产生中断,从而驱动电铃打铃。电路系统构成框图如图1.1所示。主控51AT89C5280C51Flash8COMS微处理芯片,市场应用最多。DALLASRAM的DS1302DS1302作为主要计时芯片、可以做到计时准确。(2.5~5.5V2.5V时300nA)下继续计时,并可编程选择多种充电电流对后备电源进行慢速DS12887DS1302。电源AT89C51CPU电铃1.1硬件电路设计511100ms产生一次中断,利用软100ms101S信号,这时1。同理,对分单元时单元和上下午单元计数,从而产生秒,分,时,LED的显示。键为功能键,另外三个做控制键。按一下1234412键强制灭铃。三、系统硬件设置单片机最小系统单片机最小应用系统的设计电路原理图,如图3.1所示。本次设计我们选用了AT89C52单片机。该单片机要求电源电压为+5V,所以40号引脚接+5V电源,20号脚接地。因为AT89C52单片机的片内ROM为4KB,128位RAM,根据初步分析,本设计程序应该小于4KB,故无须外扩的ROM,所以单片机应直接访问片内程序存储器,单片机的31号脚接高电平。AT89C52单片机是一种时序逻辑电路,必须有脉冲信号才能正常工作,而时钟脉冲是由振荡电路提供的时钟可以由内部方式或外部方式产生内部振荡方式只要接上两个微调电容和一个晶振即可,其中微调电容选用33pF其作用是稳定振荡频率,快速起振。本次毕业设计我们采用内部振荡方式 ,外接晶振为11.0592MHz,振荡周期=1/11.0592μs,时钟周期=2/11.0592μs,机器周期=12/11.0592μs,指令周期=1~4μs。AT89C52CPUMCS-51大连民族学院2007级电子信息工程专业单片机系统课程设计报告10μF8.2K电阻组成,T=RC,T=10μf×8.2k,T=82ms10ms82ms以上的高电平就能使单片机有效复位图3.1单片机最小应用系统DS1302性能特性31*8I/O电压工作范围;2.5VRAM数据读/3DS130231RAM,它经过一个简单的24HAM/PM12HCPU进行同眇通信,并可采RAM数据。DS1302有主电源/后备电源双电源引脚;工作原理DS1302RST8位地址和命令装入移位寄存器,数据在SCLK的上升沿被输入,无论是读周期还8408888248字节数。32RAM004大连民族学院2007级电子信息工程专业单片机系统课程设计报告序电先的8个寄存器。但是当以多个字节写RAM时,为了传送数据不必写所有31字节,不管是否写了全部31字节,所写的每个字节都将传送至RAM。71DS13020时时钟将开始启动。8051DS13023.2,其中,PxI/O口,DS13028051行口不完全一致,因此,需要在TXD的输出端加反相器,另外,接收数据时,行口的接收方式接收,I/O口进行数据接收.DS130232.768KHZ6PFVcc1Vcc28051
PXTXDRXD
DS1302RSTSCLKI/O X2图3.2 DS1302写数据的程序框图显示电路的设计显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路,数码管分别为上下午,十时,时,十分,分显示,显示时采用串行口输出控制数码管,其中P2.2~P2.4口控制数码管的位选,低电平数码管显示,动态扫描显示中单片机P0口输出数码管的段码。键盘接口的设计图3.4 键盘电路5大连民族学院2007级电子信息工程专业单片机系统课程设计报告43.4P1P1.0P1.3P1所以该图中上拉电阻可以省去。四个按键中,S1为数据+1键,S2为数据-1键,S3为数据选择键,S4为强制打铃或者强制关闭键。打铃电路的设计3.5P3.7P3.71KHz的方波,使得蜂PNP三极管作用是电流放大,以保证蜂鸣器能正常发出声音。图3.5 打铃电路6大连民族学院2007级电子信息工程专业单片机系统课程设计报告大连民族学院2007级电子信息工程专业单片机系统课程设计报告PAGEPAGE13四、系统软件设计程序流程图开始开始初始化参数设置调用键盘子程序调用显示子程序调用控制子程序主程序流程图开始开始保护现场1N=0?1N=60?1N=60?1NN退出定时中断程序流程图开始开始向缓冲区放数指向缓冲区首地址关显示AB1ms显示下一位六位显示完返回显示程序流程图voidmain(){ucharNowKey;ucharBeforKey=0xff;ucharKeyCount=0;uchari=0;AlarmSingal=0;RayFlag=1;RayFlag2=1;TMOD=0x10;//设置T1EA=1;ET1=1;TH1=0x3c;TL1=0xb0;TR1=1;while(1){D_Scan(TimeData,0);//动态扫描//按键控制if(KeyCount==2){KeyCount=0;NowKey=GetKey();if(NowKey!=BeforKey){switch(NowKey){case1:case2:default:}}
TimeSet();break;AlarmSingal=0;break;break;BeforKey=NowKey;}elseKeyCount++;}}显示子程序的设计voidD_Scan(uchar*ShowAddress,ucharFlagBit){ucharShowBit;ucharShow;for(ShowBit=0;ShowBit<5;ShowBit++){if(FlagBit!=5){switch(ShowBit){case0:Show=BCD_to_Text((*ShowAddress)%10);break;case1:Show=BCD_to_Text((*ShowAddress)/10);break;case2:Show=BCD_to_Text((*(ShowAddress+1))%10);break;case3:Show=BCD_to_Text((*(ShowAddress+1))/10);break;case4:Show=BCD_to_Text((*(ShowAddress+2))%10);break;}}P2=0xff;switch(FlagBit){case0:P0=Show;break;case1://设分闪动if(RayFlag2&&(ShowBit==0||ShowBit==1))P0=0x40;elseP0=Show;break;case2://设时闪动if(RayFlag2&&(ShowBit==2||ShowBit==3))P0=0x40;elseP0=Show;break;case3://设上下午闪动if(RayFlag2&&ShowBit==4)P0=0x40;elseP0=Show;break;}P2=GetClockBit(ShowBit);Delay(1);}}五、调试及性能分析调试步骤性能分析计时器DS1302使系统更加方便。六、心得体会本系统被子广泛用企事业单位,设计比较简单。经过一学期的学习,使我对单,.我感谢老师,课程设计加深了学生对所学课程理论的理用能力。参考文献〔1〕严仲兴,王熔熔:《单片机原理与应用》,中国计划出版社,2001.7〔2〕江力:《单片机原理与应用技术》,清华大学出版社,2006.5〔3C51windows〔4〔5〕康华光:《电子技术基础:模拟部分》,北京高等教育出版社,1999.6〔6〕江太辉MCS-51刘海宽单片机实验与实践教程东南大学出版社20091杨易德模拟电路重庆大学出版社200610廖先芸电子技术实践与训练高等教育出版社20056郭勇EDA技术基础机械工业出版社20091大连民族学院2007级电子信息工程专业单片机系统课程设计报告附录1系统硬件电路图14大连民族学院2007级电子信息工程专业单片机系统课程设计报告大连民族学院2007级电子信息工程专业单片机系统课程设计报告PAGEPAGE26附录2 程序清单#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharucharTimeData[]={0,0,0};//时钟数据ucharsec;//秒uchari;ucharcounter=0;//时钟变量ucharRayFlag1=0;//sbitRayFlag=P3^3;//秒闪sbitRayFlag2=P3^2;//秒闪标志2sbitAlarmSingal=P3^7;//闹铃信号ucharcodeBellData[]={0,0,0,0,0,0,0,0,0,1};//上下午标志ucharcodeBellDataH[]={6,7,8,8,9,9,10,10,11,10};//时ucharcodeBellDataL[]={0,30,20,30,20,40,30,40,30,30};//分ucharBCD_to_Text(ucharData);ucharGetClockBit(ucharShowBit);voidDelay(uintcount);voidD_Scan(uchar*ShowAddress,ucharFlagBit);ucharGetKey();voidTimeSet();// 主程序 voidmain(){ucharNowKey;ucharBeforKey=0xff;ucharKeyCount=0;uchari=0;AlarmSingal=0;RayFlag=1;RayFlag2=1;TMOD=0x10;//设置EA=1;ET1=1;TH1=0x3c;TL1=0xb0;TR1=1;while(1){D_Scan(TimeData,0);//动态扫描//按键控制if(KeyCount==2){KeyCount=0;NowKey=GetKey();if(NowKey!=BeforKey){switch(NowKey){case1:case2:default:}}
TimeSet();break;AlarmSingal=0;break;break;BeforKey=NowKey;}elseKeyCount++;}}//DS1302#ifndef_DS1302_H_#define_DS1302_H_#defineTime_12_Hour0x00//24时制控制#defineTime_Start0x00//开始走时#defineTime_Stop0x80//停止走时#defineDS1302_SECOND0x80 //DS1302各寄存器操作命令定义#defineDS1302_MINUTE0x82#defineDS1302_HOUR0x84#defineDS1302_WEEK0x8A#defineDS1302_DAY0x86#defineDS1302_MONTH0x88#defineDS1302_YEAR0x8C#defineDS1302_WRITE0x8E#defineDS1302_POWER #defineBCD2DEC(X) (((X&0x70)>>4)*10+(X&0x0F))//BCD进制的宏#defineDEC2BCD(X) ((X/10)<<4|(X%10)) //用于将十进制转成BCD码的宏sbitDS1302_CLK=P1^5;//sbitDS1302_IO=P1^6;//sbitDS1302_RST=P1^4;//sbitACC0=ACC^0;sbitACC7=ACC^7;typedefstruct SYSTEMTIME 制{
//定义的时间类型结构体,全部数为十进unsignedcharSecond;unsignedcharMinute;unsignedcharHour;unsignedcharWeek;unsignedcharDay;unsignedcharMonth;unsignedcharYear;}SYSTEMTIME;//实时时钟写入一字节(内部函数)voidDS1302InputByte(unsignedchard){unsignedchari;ACC=d;for(i=8;i>0;i--){DS1302_IOACC0; //相当于汇编中的DS1302_CLK=1;DS1302_CLK=ACC=ACC>>1;}}//实时时钟读取一字节(内部函数)unsignedcharDS1302OutputByte(void){unsignedchari;for(i=8;i>0;i--){ACC=ACC>>1; //相当于汇编中的ACC7=DS1302_IO;DS1302_CLK=1;DS1302_CLK=0;}return(ACC);}//DS1302,ucAddr:DS1302地址,ucData:要写的数据voidWrite1302(unsignedcharucAddr,unsignedcharucDa){DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr); //地址,命令DS1302InputByte(ucDa); //写1Byte数DS1302_CLK=1;DS1302_RST=0;}//读取DS1302某地址的数据unsignedcharRead1302(unsignedcharucAddr){unsignedcharucData;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr|0x01); //地址,命令ucData=DS1302OutputByte(); //读1Byte数DS1302_CLK=1;DS1302_RST=0;return(ucData);}//读取时间函数voidDS1302_GetTime(SYSTEMTIME*Time){unsignedcharReadValue;ReadValue=Read1302(DS1302_SECOND);Time->Second=BCD2DEC(ReadValue&0x7F);ReadValue=Read1302(DS1302_MINUTE);Time->Minute=BCD2DEC(ReadValue);ReadValue=Read1302(DS1302_HOUR);Time->Hour=BCD2DEC(ReadValue&0x7F);ReadValue=Read1302(DS1302_DAY);Time->Day=BCD2DEC(ReadValue);ReadValue=Read1302(DS1302_WEEK);Time->Week=BCD2DEC(ReadValue);ReadValue=BCD2DEC(DS1302_MONTH);Time->Month=BCD2DEC(ReadValue);ReadValue=Read1302(DS1302_YEAR);Time->Year=BCD2DEC(ReadValue);}//设置时间函数voidDS1302_SetTime(SYSTEMTIME*Time){Write1302(DS1302_WRITE,0x00); //关闭写保护Write1302(DS1302_YEAR,DEC2BCD(Time->Year));Write1302(DS1302_MONTH,DEC2BCD(Time->Month));Write1302(DS1302_WEEK,DEC2BCD(Time->Week));Write1302(DS1302_DAY,DEC2BCD(Time->Day));Write1302(DS1302_HOUR,DEC2BCD(Time->Hour)|Time_12_Hour);Write1302(DS1302_MINUTE,DEC2BCD(Time->Minute));Write1302(DS1302_SECOND,DEC2BCD(Time->Second)|Time_Start);Write1302(DS1302_WRITE,0x80); //打开写保护}//初始化DS1302voidDS1302_Initial(void){Write1302(DS1302_WRITE,0x00); //关闭写保护Write1302(DS1302_SECOND,Time_Stop);//停止计时Write1302(DS1302_HOUR,Time_12_Hour);//24时制Write1302(DS1302_POWER,0xA6); //单二极管,4K电阻充Write1302(DS1302_WRITE,0x80); //打开写保护}#endif//T1中断,产生时钟voidTimer1(void)interrupt3using1{TH1=0x3c;TL1=0xb0;if(counter%10==0){RayFlag2=~RayFlag2;if(RayFlag1)RayFlag=0;elseRayFlag=~RayFlag;}if(counter==20){counter=0;if(sec==59){sec=0;if(TimeData[0]==59){TimeData[0]=0;if(TimeData[1]==11){TimeData[1]=0;if(TimeData[2]==1){TimeData[2]=0;}elseTimeData[2]++;//上下午}elseTimeData[1]++;//时}elseTimeData[0]++;//分}elsesec++;//秒for(i=0;i<10;i++){if((BellData[i]==TimeData[2])&&(BellDataH[i]==TimeData[1]) (BellDataL[i]==TimeData[0])){if(i==0||i==9){if(sec==0){AlarmSingal=0;}if(sec==5){AlarmSingal=1;}if(sec==7){AlarmSingal=0;}if(sec==12){AlarmSingal=1;}}else{AlarmSingal=0;if(sec==5){AlarmSingal=1;}}break;}elseAlarmSingal=1;}}elsecounter++;}//BCD码转换成字形码的程序ucharBCD_to_Text(ucharData){switch(Data){case0:return0xC0;case1:return0xF9;case2:return0xA4;case3:return0xB0;case4:return0x99;case5:return0x92;case6:return0x82;case7:return0xF8;case8:return0x80;case9:return0x90;}}//得到位地址的程序ucharGetClockBit(ucharShowBit){switch(ShowBit){case0:return0xfe;case1:return0xfd;case2:return0xfb;case3:return0xf7;case4:return0xef;}}//延时count个ms的程序voidDelay(uintcount){uinti,j;for(i=count;i>0;i--)for(j=100;j>0;j--);}//动态扫描的程序voidD_Scan(uchar*ShowAddress,ucharFlagBit){ucharShowBit;ucharShow;for(ShowBit=0;ShowBit<5;ShowBit++){if(FlagBit!=5){switch(ShowBit){case0:Show=BCD_to_Text((*ShowAddress)%10);break;case1:Show=BCD_to_Text((*ShowAddress)/10);break;case2:Show=BCD_to_Text((*(ShowAddress+1))%10);break;case3:Show=BCD_to_Text((*(ShowAddress+1))/10);break;case4:Show=BCD_to_Text((*(ShowAddress+2))%10);break;}}P2=0xff;switch(FlagBit){case0:P0=Show;break;case1://设分闪动if(RayFlag2&&(ShowBit==0||ShowBit==1))P0=0x40;elseP0=Show;break;case2://设时闪动if(RayFlag2&&(ShowBit==2||ShowBit==3))P0=0x40;elseP0=Show;break;case3://设上下午闪动if(RayFlag2&&ShowBit==4)P0=0x40;elseP0=Show;break;}P2=GetClockBit(ShowBit);Delay(1);}}//得到键盘值的程序ucharGetKey(){ucharp;p=P1&0x0f;switch(p){case0x0f:return0;case0x0e:return1;case0x0d:return2;case0x0b:return3;case0x07:return4;}}// 时间设置的程序 voidTimeSet(){ucharS_Flag=1;ucharM_Flag=1;ucharH_Flag=1;ucharcount1=0x40;//无操作时的时间控制ucharcount2=0xff;//无操作时的时间控制ucharNowKey=0xff;ucharBeforKey=0xff;ucharKeyCount=0;ucharFlagBit=1;ucharuint a=0;LS_TimeData[2]=TimeData[2];LS_TimeData[1]=Ti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 注册会计师考试历年数据解析与趋势预测试题及答案
- 如何有效支持项目改进与创新实践试题及答案
- 2025年注册会计师考试快速理解试题及答案
- 2025年注会备考的关键时间节点试题及答案
- 细菌抗药性基因的检测方法试题及答案
- 深化认识证券市场规则与2025年考试的价值试题及答案
- 注册会计师考试2025年财务目标设定试题及答案
- 国际金融理财师考试经济影响分析方法试题及答案
- 证券从业资格证的考试范围及重点试题及答案
- 深入研究证券从业资格证试题及答案
- 11力学专题实验-《探究单摆的运动》专项提升(含答案)
- GB/T 45140-2025红树林生态修复监测和效果评估技术指南
- 医疗技术临床应用管理培训
- 节约用水知识竞答考试题库(共400题含答案)
- 旅游行业行程变更及退费免责条款
- 大数据专业学生的实习经历
- 2025年华润电力控股有限公司招聘笔试参考题库含答案解析
- 2023托福听力高分笔记
- 全国班主任比赛一等奖班主任经验交流《春风化为雨润物细无声》精美课件
- 高一年级《沂蒙精神进校园》班会 《沂蒙精神进校园》 课件
- 物业应急演练计划应急预案演练计划
评论
0/150
提交评论