单片机课程设计报告模板.doc_第1页
单片机课程设计报告模板.doc_第2页
单片机课程设计报告模板.doc_第3页
单片机课程设计报告模板.doc_第4页
单片机课程设计报告模板.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计成果说明书题 目: 低频信号发生器 学生姓名: 蔡超 学 号: 111311106 学 院: 东海科学技术学院 班 级: c11电信 指导教师: 东海科学技术学院教务处2014年1月7日第1章 系统总体方案选择与说明1.1总体设计方案因输出信号的频率较低,可使用单片机作为信号数据产生源,中断查表法完成波形数据的输出,再用DA转换器输出规定的波形信号。另外也可利用多余的端口经DA转换输出0度360度的移相波形,同时也可输出一路方波信号。系统实现的结构框图1.2设计要求及意义1低频信号发生器要求输出0.1 50Hz的正弦波、三角波信号,其中正弦波和三角波信号可以用按键选择输出,输出信号的频率可以在0.1 50Hz的范围内调整。2.原理图设计:根据所确定的设计电路,利用Proteus软件绘制电路原理图。3.软件设计:根据电路工作过程,画出软件流程图,根据流程图编写相应的程序。利用Proteus与Kiel Vision4联调,直到实验现象正确为止。第2章 系统硬件与工作原理2.1 系统硬件概述低频信号发生器要求能输出0.150HZ的正弦波、三角波信号,其中正弦波和三角波信号可以用按键选择输出,输出信号的频率可以在0.150HZ的范围内调整。控制部分控制芯片选择89C52系列单片机。P3.3P3.5口接3个按键,其中P3.3口按键为频率增加键,P3.4口按键为频率 减小键为正弦波与三角波选择键。P1口输出正弦波或三角波数据,P2口输出移相波数据,P3.2输出方波。数模(D/A)转换部分DAC0832是CMOS工艺制造的8位D/A转换器,属于8位电流输出型D/A转换器,转换时间1us,片内带输入数字锁存器。DAC0832与单片机接成数据直接写入方式,当单片机吧一个数据写入DAC寄存器时,DAC0832的输出模拟电压信号随之相应变化。利用D/A转换器可以产生各种波形,如方波、三角波、锯齿波等以及它们组合产生的复合波形和不规则波形。这些复合波形。这些复合波形标准的测试设备室很难产生的。2.2 主要单元电路设计第3章 软件程序与说明3.1 程序设计1. 初始化程序 初始化程序的主要工作是设置定时器的工作模式、初值预置、开中断、打开定时器等。在这里定时器T0工作于16位定时模式,单片机按定时时间重复地把波形数据送到DAC0832的寄存器。初始化流程图:2键扫描程序键扫描程序的任务是检查3个按键是否被按下,如有按下则执行相 正弦波和相应的功能。这里3个按键分别于频率增加、频率减小和正弦波与三角波的选择功能。其程序流程图:3. 波形数据产生程序波形数据产生程序是定时器T0的中断程序,当定时器计数溢出时发生一次中断,当发生中断时,单片机将按次序将波形数据表中的波形数据一一送入DAC0832,DAC0832根据输入的数据大小的数据输出相应的电压,波形数据产生程序流程图。第4章 调试结果与必要的调试说明4.1软件调试本设计主要是用 proteus 软件绘图以及kell-c软件进行编程仿真的。调试步骤由两个部分组成:首先,确定程序中错误的确切性质和位置;然后,对程序代码进行分析,确定问题的原因,并设法改正这个错误。具体地说,由以下步骤组成:1.从错误的外部表现入手,确定程序中出错的位置;2.分析有关程序代码,找出错误的内在原因; 修改程序代码,排除这个错误;重复进行暴露了这个错误的原始测试以及某些回归测试,以确保该错误确实被排除且没有引入新的错误。用proteus软件仿真时,注意连线清晰,便于后期检查线路,不要漏连、错连,元器件须做到布局合理,不拖沓凌乱。最后将程序载入进行仿真,注意观察仿真结果,确定整个程序是否正确。4.2调试说明依据调试后得出的结果来看,本设计能够完成基本要求,电路需要键盘输入数字判断是否与初始化的密码相符,密码输入时,数码管显示“-”,防止密码泄露,系统支持输入错误之后的回退,也支持密码错误之后的声音报警,还能够在输入密码正确的情况下修改用户密码,基本功能都实现了。第5章 系统使用说明该系统只需接上5V的直流电即可正常工作。通电后,数码管显示时间,按相应的输入密码键可以输入密码,初始密码为“123456”。密码输入完毕之后,按确认键确定,系统显示PASS。5左右回到时间界面。如果密码错误则显示NO,当错误次数超过三次,蜂鸣器将报警。确认输入完之后,如果密码正确,则启动相应功能,在本系统中是启动红色LED,若输入错误密码,则蜂鸣器报名提示。输入正确密码后可以对时间及密码重新设定。第6章 总结随着科学技术的迅猛发展,单片机被广泛应用于人们生活的各个领域,社会需要大量掌握单片机技术的人才,单片机的使用方法应该是我们熟练掌握的内容,密码锁应用于现代种种方面,人们为了守住秘密,就离不开它。课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。本次设计的作品基本上实现了基本功能,达到了作品的设计要求,能够应用到实际生活中。在整个作品的制作中,比较困难的就是调试代码与电路的连接,从一开始调试连接就遭到失败,电路出现的种种的问题,但是我还是不怕失败,到最后终于把电路调试成功了,虽说电路小,但它也是我们本次作品的重要电路之一,要是调试不出来也就不、无法检测到密码是否正确虽然在作品制作过程中也出现了很多难解决的问题,但我们还是坚持到最后了,积极的去想方案解决,在解决问题的过程中,得到了很多锻炼,学会发挥我们的主观能动性,通过寻求不同的渠道去弄懂和了解一些原理和电路。在作品制作的过程中,遇到了很多我不懂的知识点,但经过互联网和图书馆查阅资料,也懂得了很多新的知识点,学到了很多知识。参考文献1、 教材单片微型计算机技术 刘国荣 编 机械工业出版社2、 片微型计算机原理、应用及接口技术 张迎新 编 国防工业出版社3、 单片机实用系统设计技术房小翠 编 国防工业出版社4、 单片机应用系统设计 何立民 编 北航出版社5、单片机原理及接口技术 曹琳琳 编 国防科技大学出版社附录1 程序主程序#include#include#includetop.h#includekeyscan.h#includeleddisp.h#includedydisp.h#includetest.h/uchar temp18,temp28;void main () num=16; su=1; start:hel();loop: cddisp(4); dydisp(); if(esc=1) esc=0;count=0;goto start; num1=next(); while(num1) if(esc=1) esc=0;count=0;goto start; j=chang(); if(j=1) ok=0; su=0;delay(500);su=1; ok=1;break; while(!num1) if(esc=1) if(num2=2) while(1) disp(CLOSED,6); er=1; esc=0; num2+; break; goto loop;Top.h#ifndef _top_H_#define _top_H_#include#include#define uint unsigned int#define uchar unsigned charsbit ok=P33;sbit er=P35;sbit su=P34;uchar code CODE8=0x3f,0x38,0x5e,0x40,0x39,0x3f,0x5e,0x79 ;uchar code HELLO=21,21,17,14,18,18,0,21;uchar code OPENED=0,19,14,20,14,13;uchar code CLOSED=12,18,0,5,14,13;uchar code ERROR=14,10,10,0,10;uchar min8=1,2,3,4,5,6,7,8;uchar fill8=0,0,0,0,0,0,0,0;uchar temp18,temp28,temp38;uchar num,temp,num1,num2,i,j,count,keyflag;uchar esc,alter,save,del,ent,open;uchar code leddisp=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x37,0x76,0xb8,0x73,0x37,0x00; void delay(uint z)/延时程序/uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);uchar keyscan();#endifkeyscan.h#ifndef _keyscan_H_#define _keyscan_H_uchar keyscan() /键盘扫描 P1=0xfe;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delay(20);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp) case 0xee:num=7;su=0;break;case 0xde:num=8;su=0;break;case 0xbe:num=9;su=0;break;case 0x7e:num=15;su=0;esc=1;break; default : break; while(temp!=0xf0) temp=P1; temp=temp&0xf0; P1=0xfd;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delay(20);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp) case 0xed:num=4;su=0;break; case 0xdd:num=5;su=0;break; case 0xbd:num=6;su=0;break; case 0x7d:num=14;su=0;alter=1;break; default : break; while(temp!=0xf0) temp=P1; temp=temp&0xf0; P1=0xfb;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delay(20);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp) case 0xeb:num=1;su=0;break; case 0xdb:num=2;su=0;break; case 0xbb:num=3;su=0;break; case 0x7b:num=12;su=0;save=1;break; default : break; while(temp!=0xf0) temp=P1; temp=temp&0xf0; P1=0xf7;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delay(20);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case 0xe7:num=0;su=0;break;case 0xd7:num=10;su=0;del=1;break;case 0xb7:num=11;su=0;ent=1;break;case 0x77:num=12;su=0;open=1;break; default : break;while(temp!=0xf0) temp=P1; temp=temp&0xf0; su=1;return num;#endifleddisp.h#ifndef _leddisp_H_#define _leddisp_H_void disp(uchar *wd,int z) int k,n=0x01; for(k=0;kz;k+) P2=n; P0=leddispwdk; delay(5); n=n1; void hel() /欢迎界面/ er=1;ok=1; while(1) disp(HELLO,8);num=keyscan(); if(open=1) open=0; break; void cddisp(uchar z) /密码输入界面/ while(1) P2=0xfe; for(i=z;i8;i+) P0=CODEi; delay(5); P2=_crol_(P2,1); num=keyscan(); if(num=0)|esc=1) break; #endifncludedydisp.h#ifndef _dydisp_H_#define _dydisp_H_void move(uchar wd) uchar k; for(k=7;k0;k-) wdk=wdk-1; void mov(uchar wd,uchar pw) uchar k; for(k=0;k8;k+) wdk=pwk; uchar scdisp() esc=0;alter=0;save=0; num=keyscan(); if(num0) count-; for(k=0;kcount;k+) temp1k=temp1k+1; if(count=0) P0=leddisp16; P2=0x80; temp2count=0; if(count=0) temp20=0;temp10=0; /*-密码输入动态显示-*/void dydisp() ok=1;er=1; mov(temp2,fill);while(1) int k;int n=0x80; count=scdisp(); delete();for(k=0;k1; num=keyscan(); if(ent=1|esc=1)ent=0;count=0; break; #endifincludetest.h#ifndef _test_H_#define _test_H_/*-密码检测-*/uchar test() uchar flag; for (i=0;i8;i+) if (mini=temp2i) flag = 1; ok=0; er=1; else flag = 0; i = 8; ok=1; er=0; su=0; return(flag);uchar next() uchar flag1; num1=test(); if(num1=1) su=0;delay(500); su=1;delay(500); su=0;delay(500); su=1; while(1) disp(OPENED,6); flag1=1; num=keyscan(); if(alter=1|esc=1) alter=0;break; else mov(temp2,fill); while(!esc) su=0; disp(ERROR,6); P2=0x80;flag1=0; keyscan(); return flag1;/*-密码修改-*/uchar chang() uchar k,flag2=0; ok=1;loop0: cddisp(0); dydisp(); j=test(); if(j=1) mov(temp2,fill);loop1: cddisp(3); ok=1; dydisp(); mov(temp3,temp2); cddisp(3); dydisp(); for(k=0;k8;k+) if(temp2k=temp3k) flag2=1; else k=8; mov(temp2,fill); flag2=0; goto loop1; mov(min,temp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论