《微机与单片机综合课程设计说明书》模板蔡才华
- 格式:doc
- 大小:808.00 KB
- 文档页数:22
课程设计成果说明书题目:低频信号发生器学生姓名:蔡超学号:111311106学院:东海科学技术学院班级:c11电信指导教师:东海科学技术学院教务处2014年1月7日第1章系统总体方案选择与说明1.1总体设计方案因输出信号的频率较低,可使用单片机作为信号数据产生源,中断查表法完成波形数据的输出,再用DA转换器输出规定的波形信号。
另外也可利用多余的端口经DA转换输出0度~360度的移相波形,同时也可输出一路方波信号。
系统实现的结构框图1.2设计要求及意义50Hz的正弦波、三角波信号,其中正弦波和1.低频信号发生器要求输出0.1~50Hz的范围内调三角波信号可以用按键选择输出,输出信号的频率可以在0.1~整。
2.原理图设计:根据所确定的设计电路,利用Proteus软件绘制电路原理图。
3.软件设计:根据电路工作过程,画出软件流程图,根据流程图编写相应的程序。
利用Proteus与Kiel μVision4联调,直到实验现象正确为止。
第2章系统硬件与工作原理2.1 系统硬件概述低频信号发生器要求能输出0.1~50HZ的正弦波、三角波信号,其中正弦波和三角波信号可以用按键选择输出,输出信号的频率可以在0.1~50HZ的范围内调整。
控制部分控制芯片选择89C52系列单片机。
P3.3~P3.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转换器可以产生各种波形,如方波、三角波、锯齿波等以及它们组合产生的复合波形和不规则波形。
目录1 绪论 (1)1.1 概述 (1)1.2 设计目的 (1)2 设计任务及内容 (1)2.1 设计任务 (1)2.2 设计内容 (1)3 总体设计及核心器件简介 (2)3.1 总体设计 (2)3.2 硬件设计 (2)3.2.1 硬件系统总体设计 (2)3.2.2 单片机的选择 (3)3.2.3 显示电路的选择与设计 (4)3.2.4 按键电路的选择与设计 (6)3.2.5 时钟电路的选择与设计 (7)3.2.6 复位电路的选择与设计 (8)3.2.7 系统总电路的设计 (10)3.3 软件设计 (11)3.3.1 程序设计思想 (11)3.3.2 系统资源的分配 (11)3.3.3 主程序设计 (11)3.3.4 中断程序设计 (12)4 数字电子秒表的安装与调试 (15)4.1 软件的仿真与调试 (15)4.2 硬件的安装与调试 (15)4.2 汇编程序 (15)5 设计体会与总结 (21)1 绪论1.1 概述单片微型计算机简称单片机,又称微控制器,是微型计算机的一个重要分支。
单片机是20世纪七十年代中期发展起来的一种大规模集成电路芯片,是集CPU、RAM、ROM、I/O接口和终端系统与同一硅片的器件。
20世纪八十年代以来单片机发展迅速各类新产品不断涌现出现许多新产品,出现了许多高性能新型机种现已成为工业控制和各控制领域的支柱产业之一。
由于单片机功能强、体积小、可靠性好、价格便宜等独特优点因而受到人们的高度重视并取到了一系列的科研成果,成为传统工业技术改造和新产品更新换代的理想机种,并具有广阔的发展前景。
本设计运用所学的单片机知识,将单片机与普通秒表相结合设计了电子秒表,具有显示直观、读取方便、精度高等优良特点,在计时中应用广泛。
1.2 设计目的加强对51系列单片机的构造了解及应用,熟悉汇编语言或C语言编程,综合掌握和理解设计各部分的工作原理、设计过程、芯片器件的选择方法、模块化编程等多项知识。
郑州工业应用技术学院课程设计说明书题目:姓名:院(系):专业班级:学号:指导教师:成绩:时间:年月日至年月日郑州工业应用技术学院课程设计任务书题目: 电子秒表设计专业、班级学号姓名主要内容、基本要求、主要参考资料等:主要内容:利用单片机设计一个电子秒表,完成四位显示××.××秒,并具备开始计时、暂停、清零等功能。
基本要求:1.利用单片机设计一个电子秒表,完成四位显示××.××秒,并设定按钮完成开始计时、暂停、清零等功能。
2.利用proteus软件完成设计电路和仿真;3.掌握定时器的使用和数码管显示的方法;4.通过此次设计将单片机软硬件结合起来对程序进行编辑、校验,锻炼实践能力和理论联系实际的能力。
主要参考资料:[1]李全利,单片机原理及接口技术[M],高等教育出版社[2]王文杰,单片机应用技术[M],冶金工业出版社[3]朱清慧,PROTEUS教程——电子线路设计、制版与仿真[M],清华大学出版社[4]单片机实验指导书,天煌教仪[5]彭伟,单片机C语言程序设计实训100例[M],电子工业出版社完成期限:指导教师签名:课程负责人签名:年月日目录1.引言 (1)2.方案设计与论证 (3)2.1 直流调速系统 (3)2.1 检测系统 (4)2.3显示电路 (9)2.4系统原理图 (9)3.硬件设计 (10)3.1 80C51单片机硬件结构 (10)3.2 最小应用系统设计 (11)3.3前向通道设计 (12)3.4后向通道设计 (15)3.5显示电路设计 (17)4.软件设计 (20)4.1主程序设计 (20)4.2显示子程序设计 (24)4.3避障子程序设计 (25)4.4软件抗干扰技术 (26)4.5“看门狗”技术 (28)4.6可编程逻辑器件 (29)5.测试数据、测试结果分析 (30)6.结论 (31)致谢 (31)参考文献 (32)附录A 程序清单 (33)附录B 硬件原理图 (41)1.引言随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。
《微机与单片机综合课程设计》说明书课题名称:基于单片机和DS1302的时钟设计学号:02班级:13 级过程自动化3班姓名:________ 蔡才华成绩:指导教师:________________ 陈裕国课题工作时间:2016-1-4 至2016-1-15武汉工程大学电气信息学院一、课程设计任务和基本要求:(一)设计任务利用单片机和DS1302时钟芯片设计一个简易时钟,完成对时钟芯片的读写编程,将读到的时间在数码管显示出来。
(二)基本要求通过本系统的设计,了解DS1302时钟芯片和数码管显示的工作原理并掌握其编程方法;进一步熟悉单片机系统设计方法二、指定参考书:1. 徐爱钧,徐阳编著。
《单片机原理与应用一基于Proteus虚拟仿真技术(第2版)》,机械工业出版社。
2014年7月2. 赵广元编著。
《proteus辅助的单片机原理实践一基础设计、课程设计、毕业设计》,北京航空航天大学出版社。
2013年9月答辩记录:答辩意见及答辩成绩答辩教师(签字):20 年月日目录1. 系统分析ds1302 芯片 (6)引脚图及寄存器 (6)读写时序说明 (8)内部电路图 (9)数码管显示原理 (10)2. 程序设计总体设计 (11)分块程序设计 (12)ds1302 初始化模块 (13)数码管显示模块 (16)主函数模块 (17)仿真电路图的搭建 (18)元件库的选择 (18)元件的布局 (19)仿真运行 (21)keil 软件的使用 (21)proteus 运行效果图 (23)4. 总结 (24)参考资料 (24)附录一源程序清单 (25)附录二电路原理图 (30)1. 系统分析DS1302时钟芯片DS1302时钟芯片,该芯片是美国DALLAS^司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM采用SPI三线接口与CPU S行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。
《微机与单片机原理》课程设计任务书1.《微机与单片机原理》课程设计性质:《微机与单片机原理》课程设计是毕业设计前的一次预演,也是该课程所学知识的一次综合运用。
2.课程设计题目:一种数字电压表的设计3.设计指标:(1)量程:直流电压0-5V;(2)精度:0.1V。
4.考核方式:(1)每位同学提交一件作品。
学生作品测量基准直流电压的结果与4位半精密数字电压表测量结果对比,并根据学生回答问题情况以及撰写设计说明书的质量确定该门课程的成绩。
(2)于本学期15周前提交作品和设计说明书。
作品于本学期结束前发还学生,设计说明书存档。
5.设计要求:(1)电压测量可以采用单片机内部AD、ADC0809、7135、7109等AD转换芯片;(2)电压显示可以采用LED数码管、LCD1602和128X64图形点阵液晶显示模块;(3)单片机可采用8051、AT89C51、STC12C5A60S2和STC12C5410AD等51内核芯片;(4)编程可以采用C51或汇编语言编程。
6.作品设计说明书:要求撰写设计说明书主要包括一下几个方面:(1)封面:含题目、姓名、班级和学号(座号);(2)中文摘要:300字以上,主要说明:你做了什么?怎么做的?结果如何?(3)目录:(4)正文:第一章:任务书1-5的内容;第二章:数字电压表硬件电路设计,包括单片机最小系统电路、电源电路、测量电路、显示电路等;第三章:数字电压表软件设计,包括测量程序、显示程序、数据处理程序等;第四章:数字电压表调试与误差分析,系统调试方法、调试过程和调试结果,给出一组测量数据并进行误差分析,给出相对误差、绝对误差等数据,并画图显示;第五章:总结:包含摘要中的内容,适当扩充。
(6)参考文献:期刊5篇以上,给出准确的引用格式。
引用文献在正文中用上标标出。
[序号]作者1姓名,作者2姓名.论文名[J].期刊名,年,卷(期):页码.例子:[1]王小增,杨久红. 蓝宝石基GaN薄膜热疲劳分析[J]. 人工晶体学报,2015,41(07):1975-1982.7.问题分析(1)为了提高系统测量精度,软件和硬件应如何考虑?(2)为了提高系统测量速度,软件和硬件应如何考虑?(3)该系统可以扩展哪些功能?如何实现?做法举例:利用单片机内部AD进行电压测量。
单片机课程设计说明书 (word文档+全)单片机课程设计说明书(word文档+全) 盐城工学院课程设计说明书(2015)单片机课程设计说明书用ADC0832设计的两路电压表(用LCD1602显示) 专业新能源科学与工程学生姓名班级学号指导教师完成日期2015年1 月28 日用ADC0832设计的两路电压表(用LCD1602显示) 摘要:本设计是简易两路数字电压表,数字电压表是采用数字化测量设计的电压仪表。
随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也越来越高,而电压的测量甚为突出,因为电压的测量最为普遍。
本设计利用单片机STC89C52借助软件实现数字显示功能、自动校准、LED显示,A/D转换器采用ADC0832构成数模转换电路。
该电压表测量范围在0~5V。
由于采用高性能的单片机芯片为核心,同时利用LED数码管为显示设备,这样就使显示清晰直观、读数准确,减少了因为人为因素所造成的测量误差事件,同时提高了测量的准确度。
根据电压表的主要功能,提出了设计方案并进行了论证。
设计包括硬件设计和软件设计两大部分。
硬件部分包括单片机最小系统、数模转换电路、显示模块四个部分。
首先在Proteus中设计并绘制了电路图,并编写程序使仿真正确。
然后便根据设计的电路在万能板上制作完成了实物并调试成功。
接着在SD301学习板上完成了同样的功能。
接着画了电路原理图,制作了小视频,完成了课程设计。
关键词:单片机,ADC0832,LCD1602,A/D转换,电压表目录 1 概述1 1.1 课程设计研究背景与意义1 1.2 课程设计内容2 2 设计方案论证与方案选择2 2.1 方案论证2 2.2 方案选择2 3 系统硬件电路设计3 3.1 单片机最小系统3 3.2 模数转换电路5 3.3 显示电路7 4 系统软件设计10 4.1 主程序10 4.2 A/D转换程序11 4.3液晶显示子程序11 5 系统调试13 6 结束语15 参考文献16 附录17 附录1 ADC0832设计的两路电压表电路原理图18 附录2 ADC0832设计的两路电压表Proteus仿真电路图19 附录3 ADC0832设计的两路电压表元器件清单20 附录4 ADC0832设计的两路电压表程序清单21 用ADC0832设计的两路电压表(用LCD1602显示) 1 概述1.1 课程设计研究背景与意义近年来计算机技术及微电子器件在工程技术中应用十分广泛。
《微机与单片机综合课程设计》说明书课题名称:基于单片机和DS1302的时钟设计学号: 02班级: 13级过程自动化3班姓名:蔡才华成绩:指导教师:陈裕国课题工作时间: 2016-1-4 至 2016-1-15武汉工程大学电气信息学院目录1.系统分析ds1302芯片 (6)引脚图及寄存器 (6)读写时序说明 (8)内部电路图 (9)数码管显示原理 (10)2.程序设计总体设计 (11)分块程序设计 (12)ds1302初始化模块 (13)数码管显示模块 (16)主函数模块 (17)仿真电路图的搭建 (18)元件库的选择 (18)元件的布局 (19)仿真运行 (21)keil软件的使用 (21)proteus运行效果图 (23)4.总结 (24)参考资料 (24)附录一源程序清单 (25)附录二电路原理图 (30)1.系统分析DS1302时钟芯片DS1302时钟芯片,该芯片是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达~。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。
DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。
引脚图及寄存器内部电路:各引脚的功能为:V cc1:主电源;Vcc2:备份电源。
当V cc2>Vcc1+ 时,由V cc2向DS1302供电,当V cc2< Vcc1时,由V cc1向D S1302供电。
SCLK:串行时钟,输入,控制数据的输入与输出;I/O:三线接口时的双向数据线;CE:输入信号,在读、写数据期间,必须为高。
该引脚有两个功能:第一,CE 开始控制字访问移位寄存器的控制逻辑;其次,CE 提供结束单字节或多字节数据传输的方法;DS1302有下列几组寄存器:①D S1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD 码形式,如图所示。
DS1302有关日历、时间的寄存器小时寄存器(85h、84h)的位7用于定义D S1302是运行于12小时模式还是24小时模式。
当为高时,选择12小时模式。
在12小时模式时,位5是,当为1时,表示PM。
在24小时模式时,位5是第二个10小时位。
秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。
当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。
控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。
在任何的对时钟和R AM 的写操作之前,WP 位必须为0。
当WP 位为1时,写保护位防止对任一寄存器的写操作。
②DS1302有关R AM 的地址DS1302中附加31字节静态R AM 的地址如图所示。
③D S1302的工作模式寄存器所谓突发模式是指一次传送多个字节的时钟信号和R AM 数据。
突发模式寄存器如图所示。
读写时序说明DS1302是S PI 总线驱动方式。
它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。
要想与D S1302通信,首先要先了解DS1302的控制字。
DS1302的控制字如图控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
位6:如果为0,则表示存取日历时钟数据,为1表示存取R AM 数据;位5至位1(A4~A0):指示操作单元的地址;位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。
控制字总是从最低位开始输出。
在控制字指令输入后的下一个SCLK 时钟的上升沿时,数据被写入D S1302,数据输入从最低位(0 位)开始。
同样,在紧跟8位的控制字指令后的下一个S CLK 脉冲的下降沿,读出D S1302的数据,读出的数据也是从最低位到最高位。
数据读写时序如图。
电路原理图:电路原理图如图8,DS1302与单片机的连接也仅需要3条线:CE 引脚、SCLK 串行时钟引脚、I/O 串行数据引脚,Vcc2为备用电源,外接晶振,为芯片提供计时脉冲。
数码管显示原理我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
其原理图如下。
其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。
一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。
显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。
数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。
所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为,即0xc0。
可以看出两个编码的各位正好相反。
如下图。
2 程序设计总体设计在设计程序之前我们已经对ds1302和c51CPU之间的通信原理很清楚了。
我们设计简易时钟时,先把主函数设计好。
那么如何设计主函数主函数是实现该功能的主要部分,主函数实现将ds1302的时钟信号准确无误的传给CPU,在传递过程中要明确地址和数据传送时的区别,时钟信号线I/O是分时复用的。
这里我们写了一个数据读取函数DS1302ReadCmd (),将地址中的数据传递给单片机,因为ds1302和单片机不能直接通信,所以在子程序DS1302ReadCmd ()中还要嵌套一个DS1302写字节函数---DS1302WriteByte(uchar dat),这个写字节函数的主要功能是把,ds1302时分秒寄存器地址告诉1302芯片,ds1302在接受到地址值后自动将该地址下的数据传给CPU,最后加一个数码管显示模块就可以完成上述功能。
具体实现的方法如下所示:分块程序设计为了理解方便,将本课程设计软件部分分为如下模块:Ds1302初始化模块,数码管显示模块,主函数模块。
(模块之间有交叉,分模块是为了说明方便)Ds1302初始化模块:1)写字节函数:将要写入的数据dat赋值给单片机中间变量temp,将temp数据的八位由低到高依次传递到ds1302的I/O口。
其中每传递一位,给SLK端口一个上升沿(这是由ds1302的工作时序决定的)。
徐爱钧,徐阳 编著。
《单片机点击需要标号的引脚,改成对应的编号 再建文件先建工程原理与应用—基于Proteus虚拟仿真技术(第2版)》,机械工业出版社。
2014年7月2. 赵广元编著。
《proteus辅助的单片机原理实践—基础设计、课程设计、毕业设计》,北京航空航天大学出版社。
2013年9月附录一:完整的源程序代码#include<>#define uchar unsigned char#define uint unsigned intUchar codetable[]={0x3F,0X30,0X5b,0X4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00, 0x40};//共阴数码管"0-9","灭","-"编码uchar code Seg[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87};//位选编码uchar data DisplayBuf[]={0,0,11,0,0,11,0,0};//时分秒显示缓冲区uchar data TimeBuf[]={0,0,0};//时分秒值sbit ACC_7 = ACC^7; //位寻址寄存器定义sbit SCLK = P1^1; // DS1302时钟信号 7脚sbit DIO= P1^0; // DS1302数据信号 6脚sbit CE = P1^2; // DS1302片选 5脚// 延时函数void delay(uint i){uint j;for(i; i > 0; i--)for(j = 110; j > 0; j--);}// DS1302写字节函数void DS1302WriteByte(uchar dat){uchar i = 0,temp = 0;CE = 0; //CE引脚为低,数据传送中止SCLK = 0; //清零时钟总线CE = 1; //CE引脚为高,逻辑控制有效for (i=8; i>0; i-- ) //循环8次移位{SCLK = 0;temp = dat;DIO = (bit)(temp&0x01); //每次传输低字节dat >>= 1; //右移一位SCLK = 1;}}// DS1302读字节函数uchar DS1302ReadByte(){uchar i,dat1,dat2;CE = 1;for (i=8; i>0; i--){ACC_7 = DIO;SCLK = 1;ACC >>= 1;SCLK = 0;}CE=0;dat1=ACC;dat2=dat1/16; //数据进制转换,十六进制转换成十进制dat1=dat1%16;dat1=dat2*10+dat1;return dat1;}// 地址、数据发送函数void DS1302WriteCmd (uchar addr,uchar dat){DS1302WriteByte(addr); //发送地址DS1302WriteByte(dat); //发送数据}// 数据读取函数uchar DS1302ReadCmd (uchar addr) //数据读取子程序{DS1302WriteByte(addr); //发送地址return (DS1302ReadByte()); //接收数据}// DS1302初始化函数void DS1302Init(void) //初始化DS1302{DS1302WriteCmd (0x8E,0x00); //禁止写保护DS1302WriteCmd (0x80,0x00); //秒位初始化DS1302WriteCmd (0x82,0x00); //分钟初始化DS1302WriteCmd (0x84,0x20); //小时初始化DS1302WriteCmd (0x86,0x01); //日初始化DS1302WriteCmd (0x88,0x01); //月初始化DS1302WriteCmd (0x8c,0x12); //年初始化DS1302WriteCmd (0x8E,0x80); //允许写保护}// 数码管显示函数void LEDDisplay(){uchar i;DisplayBuf[7] = TimeBuf[2]%10;DisplayBuf[6] = TimeBuf[2]/10;DisplayBuf[4] = TimeBuf[1]%10;DisplayBuf[3] = TimeBuf[1]/10;DisplayBuf[1] = TimeBuf[0]%10;DisplayBuf[0] = TimeBuf[0]/10;for(i = 0 ; i < 8; i++) //数码管动态显示{P3 = Seg[i];P2 = table[DisplayBuf[i]];delay(1); //延时1ms让数码管正常显示出来}}// 主函数void main(){DS1302Init();while(1){TimeBuf[2]=DS1302ReadCmd(0x81); //0x81,0x83,0x85分别为秒,分,时读地址位TimeBuf[1]=DS1302ReadCmd(0x83);TimeBuf[0]=DS1302ReadCmd(0x85);// TimeBuf[2]=DS1302ReadCmd(0x87); //0x87,0x89,0x8b分别为年,月,日读地址位// TimeBuf[1]=DS1302ReadCmd(0x89); // TimeBuf[0]=DS1302ReadCmd(0x8d);LEDDisplay();}}附录二:系统硬件原理图:。