微机原理课程设计论文.doc_第1页
微机原理课程设计论文.doc_第2页
微机原理课程设计论文.doc_第3页
微机原理课程设计论文.doc_第4页
微机原理课程设计论文.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

微机原理与汇编语言课程设计报告微机原理及汇编语言课程设计报告36目 录第一章 微机应用系统课程设计的目的及意义31.1 课程设计的要求及目的31.2 课程设计的内容31.3 课程在教学计划中的地位和作用3第二章 总体设计方案52.1 设计思想5第三章 硬件设计63.1 硬件设计概要63.2 芯片及其功能说明63.2.1 单片机及其功能说明63.2.2 MAX7219及其功能说明93.3 硬件电路设计系统原理图及其说明11第四章 软件设计134.1 流程图134.2 软件系统的使用说明144.2.1 MAX7219驱动154.2.2 时钟进位运行规则164.2.3 时间调整部分164.2.4 键盘去抖174.3源程序及注释17第五章 心得与体会33参考文献35第一章 微机应用系统课程设计的目的及意义1.1 课程设计的要求及目的以单片机为控制核心的智能电子钟以时间准、功能强、外形美而越来越受到人们的青睐。本实验通过设计一个智能电子钟,旨在使学生能够做到以下几点。l了解智能电子钟的功能特点与工作原理。 2掌握以单片机为核心实现电子钟功能的思路和方法。3进一步掌握多位数码管显示的原理和接口方法。1.2 课程设计的内容(1)编程语言为C语言;(2)基于单片机的硬件电路设计与调试;(3)从键盘上输入当前时间,格式为“XX(小时):XX(分):XX(秒),以此为起点,每秒刷新一次,1秒钟延迟方式采用软件方式并用子程序编写或者定时器实现,主程序用于显示时间结果和调用子程序,由于软件延迟产生的误差每小时调整一次,保证每小时误差不超过0.1秒。1.3 课程在教学计划中的地位和作用微机应用系统设计与综合实验课程是测控技术专业本科生必修的一门技术基础课程。通过该课程的学习使学生对微机系统有一个全面的了解、掌握常规芯片的使用方法、掌握简单微型计算机应用系统软硬的设计方法。为了使我们微机应用课程设计目标更明确,要求更具体,学生收获更大,我们特编写课程设计任务书,学生可根据本人的爱好任选其中一个课题,要求独立完成课题,写出课程设计说明书,设计出电路原理图,说明工作原理,画出电路板图,编写程序及程序流程图。希望同学认真阅读本任务书,认真查阅资料与上机调试,圆满完成课程设计。通过课程设计进一步锻炼同学们在微型计算机应用方面的实际工作能力。计算机科学在应用上得到飞速发展,因此,学习这方面的知识必须紧密联系实际:掌握这方面的知识更要强调解决实际问题的能力。同学们要着重学会面对一个实际问题,如何去自己收集资料,如何自己去学习新的知识,如何自己去制定解决问题的方案并通过实践不断地去分析和解决前进道路上的一切问题,最终到达胜利的彼岸。第二章 总体设计方案2.1 设计思想要完成本实验任务要求的功能,可以将系统分为以下几个部分来设计:定时器/计数器电路、时间及功能设置电路、时间显示电路等。其中,定时器/计数器电路是整个电子钟设计的基础。一般都是用定时/计数器来产生定时中断信号(例如定时时间间隔为1/100s),然后通过软件计数器来相继获得实时时钟的秒、分、时等时间值。实现智能化电子钟的软件主要由主程序和中断服务程序两模块组成。 在主程序中,除了完成对系统的初始化和中断向量的设置外,需要对各种软件时间计数器进行查询、比较和判断,并根据判断结果发出各种控制信号,以完成时钟的显示操作。 在定时中断服务程序中,需要设计1/100s计数器,秒个位、秒十位计数器,分个位、分十位计数器,时个位、时十位计数器以及由键盘设置的各定时时间计数器和各作息时间计数器等等,并对各计数器酌情作加1计数。然后,由主程序来完成对各种计数器内容的查询。 注意事项:向定时器通道写计数初值时,无论以二进制还是十进制形式写入,如果其值超过255,需分两次分别写入计数器的高、低字节,否则只需写一次。究竟写一次还是两次,要在写初值之前通过写控制字来设置。第三章 硬件设计3.1 硬件设计概要 这次做的是单片机时钟程序设计,顾名思义,首先应该用到的是单片机。我们用单片机来驱动程序,完成程序的运行。由于我们以前没有学过单片机这方面的知识,我们运用起来比较陌生,只能是一边学一边用,所以做的设计比较简单,只有最基本的时钟功能和校准功能。当然既然是时钟,就少不了数码管,这还要用到一片7219芯片来驱动数码管,使它显示相应的时间。 这次我们的课程设计,主要目的在于熟悉单片机的原理和应用。由于时钟设计,所以相对的硬件设计较少且连线比较简单,这里不再详细介绍。3.2 所用到的芯片及其各自功能说明3.2.1单片机及其功能说明这次课程设计的主要目的就是熟悉单片机,下面我们先就单片机的一些功能加以介绍。首先我们来连接一下单片机的引脚图,如果,具体功能在下面都有介绍。 单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。 电源: VCC - 芯片电源,接+5V; VSS - 接地端; 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 控制线:控制线共有4根, ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址 PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 PSEN:外ROM读选通信号。 RST/VPD:复位/备用电源。 RST(Reset)功能:复位信号输入端。 VPD功能:在Vcc掉电情况下,接备用电源。 EA/Vpp:内外ROM选择/片内EPROM编程电源。 EA功能:内外ROM选择端。 Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。 I/O线80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。51单片机引脚图及引脚功能 拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。1、 电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40管脚,负极(地)接20管脚。 2、 振蒎电路:单片机是一种时序电路,必须供给脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶体震荡器,电容,连上就能了,按图1接上即可。 3、 复位管脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。 4、 EA管脚:EA管脚接到正电源端。 至此,一个单片机就接好,通上电,单片机就开始工作了。 我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个管脚相连,不然单片机就没法控制它了,那么和哪个管脚相连呢?单片机上除了刚才用掉的5个管脚,还有35个,我们将这个LED和1脚相连。(见图1,其中R1是限流电阻) 按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1管脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不能由我们来更改。3.2.2 MAX7219及其功能说明设计题目做的是数字时钟,首先应该有数码管来显示相应的时间,这要用到一片7219芯片来驱动所用到的数码管。下面我们就7219的功能做一些简单的介绍。MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。该芯片具有10MHz传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置所有LED的段电流。它的操作很简单,MCU只需通过模拟SPI三线接口就可以将相关的指令写入MAX7219的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。MAX7219的外部引脚分配如图1所示及内部结构如图2所示。MAX7219的外部引脚分配各引脚的功能为:DIN:串行数据输入端DOUT:串行数据输出端,用于级连扩展LOAD:装载数据输入CLK:串行时钟输入DIG0DIG7:8位LED位选线,从共阴极LED中吸入电流SEG ASEG G DP7段驱动和小数点驱动ISET:通过一个10k电阻和Vcc相连,设置段电流MAX7219有下列几组寄存器:(如图3)MAX7219内部的寄存器如下图,主要有:译码控制寄存器、亮度控制寄存器、扫描界限寄存器、关断模式寄存器、测试控制寄存器。编程时只有正确操作这些寄存器,MAX7219才可工作。MAX7219内部的相关寄存器3.3硬件电路设计系统原理图及其说明由于第一次使用单片机,所做的课程设计相对比较简单,只用到以上两片芯片,其具体硬件电路设计系统原理图如下图所示:电脑编程DBAB控制按键单片机系统显示电路数码管基于硬件的设计相对比较简单,因为我们做的都是最简单的功能,没有什么多余的附加功能,所以不管是从编程还是软件设计方面都相对比较简单。只需要在电脑用C语言完成相应的功能,把程序下载到单片机,用单片机来实现相应的功能。用单片机的程序来驱动7219,使数码管显示相应的时间。硬件连线的时候要注意单片机应与试验箱共地,否则数码管不会显示时间。第四章 软件设计4.1 流程图及其说明软件编程我们可以分为几个模块来编程,这样可以是整个程序显得更清晰、容易理解。我们程序出现错误的时候也方便我们调试。具体整个程序的流程图如下所示:主程序各种芯片初始化有键按下循环调整时间关中段?向下调整向上调整显示调整后的时间显示、初始化时间是否4.2软件系统的使用说明我们可以把整个软件系统分成几个部分:7219驱动;时钟进位部分;调整时间部分;延时函数及去抖部分。下面我们对各个部分分别加以说明。4.2.1 MAX7219驱动对于时钟电路的设计我们首先做的是数码管驱动芯片7219。通过7219的驱动,是数码管能显示通过软件设置的时间。电路原理图如下图,MAX7219与单片机的连接只需要3条线:LOAD(CS)片选引脚、CLK串行时钟引脚、DIN串行数据引脚。其中C1 为电源滤波电容,R1用来设置段电流。电路原理图通过上面的原理和相应的程序使数码管完成显示功能,具体程序将在下面的章节分析。4.2.2时钟运行进位规则这一部分是我们设计的主要部分,主要完成时钟的进位和正常的时间显示问题。我们定义了一个长度为六的数组,分别用来表示时钟的时、分、秒的个位和十位。这当中主要考虑的就是时间的进位问题以及十、分、秒十位和各位的进制问题。其中时、分、秒的个位都是十进制。而十位是六进制。当分、秒的十位为六而个位为零的时候要同时清零,已达到时、分整体六十进制。这对于软件编程来说还是比较简单的,只需要用if语句就可以完成。这主要需要注意的就是时分秒的同时清零问题,让它完成时钟的具体功能。具体的程序后面源程序清单中会有介绍。4.2.3时间调整部分这部分主要做的是时间的初始化问题以及时间的调整问题。由于用的是51单片机,没有办法连接电脑的键盘,所以时间键盘的初始化只能用按钮来代替。由于他和时间的调整问题属于一个功能,所以放在了一起进行编程,这样可以简化程序,变得更加容易理解同时便于调试。在这一个功能我们设置了四个功能键。一个用来管理中断,用来关和开中断,方便我们对时间进行调整。一个用来循环调整的哪一位,当处于调整的位是,数码管所对应的时间位的下面会出现一个亮点进行提示。另外两个就是负责对时间进行调整,一个是加位调整,一个是减位调整。具体的实现问题用了两个switch语句,来确认有键按下了时候就进行加一和减一的调整。具体的程序后面源程序清单中会有介绍。4.2.4键盘去抖这个部分相对比较简单,延时函数主要是确定时间的精度问题。而调整时间是按键的去抖问题主要就是利用延时函数。这里不在详细介绍,后面的源程序中会有详细的讲解。4.3源程序及注释#include #define DECODE_MODE 0x09 /译码控制寄存器#define INTENSITY 0x0A /亮度控制寄存器#define SCAN_LIMIT 0x0B /扫描界限寄存器#define SHUT_DOWN 0x0C /关断模式寄存器#define DISPLAY_TEST 0x0F /测试控制寄存器#define uchar unsigned char#define uint unsigned intsbit LOAD=P10; /MAX7219片选 12脚sbit DIN=P11; /MAX7219串行数据1脚sbit CLK=P12; /MAX7219串行时钟13脚sbit key1=P30; sbit key2=P31;sbit key3=P32;sbit key4=P33; /*sbit KEY1=P13; /暂停或运行sbit KEY2=P14;/位选择sbit KEY3=P15;/增加sbit KEY4=P16;/减少*/uchar sj7=0;uint time=0,flash=0;uchar k=0,i=0;/*函数声明*/void Write7219(unsigned char address,unsigned char dat);void Initial(void);void Init(void);/*地址、数据发送子程序*/void Write7219(unsigned char address,unsigned char dat)uchar i;LOAD=0; /拉低片选线,选中器件 for (i=0;i8;i+) /发送地址 CLK=0; /清零时钟总线 DIN=(bit)(address&0x80); /每次取高字节 address=1; /左移一位 CLK=1; /时钟上升沿,发送地址 for (i=0;i8;i+) /发送数据 CLK=0; DIN=(bit)(dat&0x80); dat=1; CLK=1; /时钟上升沿,发送数据 LOAD=1; /发送结束,上升沿锁存数据 /*MAX7219初始化,设置MAX7219内部的控制寄存器*/void Initial(void) uint i=0;Write7219(SHUT_DOWN,0x01); /开启正常工作模式(0xX1)Write7219(DISPLAY_TEST,0x00); /选择工作模式(0xX0)Write7219(DECODE_MODE,0xff); /选用全译码模式Write7219(SCAN_LIMIT,0x05); /8只LED全用Write7219(INTENSITY,0x08); /设置初始亮度for(i=1;i0;i-) for(j=110;j0;j-); /* tiaoshi */void keyscan() uchar i; if(key4=0) delayms(100); if(key4=0) /* while(!key4); TR0=0; /关定时器0 Write7219(1,0); Write7219(2,0); Write7219(3,0); Write7219(4,0); Write7219(5,0); Write7219(6,0); */ for(i=1;i7;i+)Write7219(i,sji);/数码管显示 i=0; TR0=1; if(key1=0) delayms(100); if(key1=0) while(!key1); TR0=0; /关定时器0 i+; if(i=7) i=1; /* TH0=0x4B; /初始化定时器0 TL0=0xFF; time=0; TR0=1;*/ if(i!=0) for(flash=0;flash3;flash+) Write7219(i,-1); delayms(20000);Write7219(i,sji);delayms(20000); if(key2=0) /增加键 delayms(100); if(key2=0) while(!key2);/ 确认释放 switch(i)case 1:/秒个位加一 sj1+; if(sj1=10) sj1=0; break; case 2:/秒十位加一 sj2+; if(sj2=6) sj2=0; break;case 3:/分个位加一 sj3+; if(sj3=10) sj3=0; break;case 4:/分十位加一 sj4+; if(sj4=6) sj4=0; break;case 5:/十个位加一 sj5+; if(sj5=10) sj5=0; break;case 6:/时十位加一 sj6+; if(sj6=3) sj6=0; break; if(key3=0) delayms(100); if(key3=0) while(!key3); switch(i)case 1:/秒个位减一 sj1-; if(sj1=-1) sj1=9; break; case 2:/秒十位减一 sj2-; if(sj2=-1) sj2=5; break;case 3:/分个位减一 sj3-; if(sj3=-1) sj3=9; break;case 4:/分十位减一 sj4-; if(sj4=-1) sj4=5; break;case 5:/时个位减一 sj5-; if(sj5=-1) sj5=9; break;case 6:/是十位减一 sj6-; if(sj6=-1) sj6=2; break; void main(void) uchar i,k=0; Initial();Init(); /MAX7219初始化 while(1) keyscan();/时间显示和进位 if(sj1=10) sj1=0; sj2+; if(sj2=6) sj2=0; sj3+; if(sj3=10) sj3=0; sj4+; if(sj4=6) sj4=0; sj5+; if(sj5=10) sj5=0; sj6+; if(sj6=2&sj5=4) sj6=0; sj5=0; for(i=1;i7;i+)Write7219(i,sji);/数码管显示 void time0() interrupt 1 TH0=0x4B; TL0=0xFF; time+; if(time=20) time=0; sj1+; 第五章 心得与体会做了两周的单片机课程设想,我有了很多的领会和感想。由于我们这学期学习的是微机原理,没有学习单片机。所以这次这次课程设计对我们来说还是有一定的难度的。特别是在我们调试时,中间出现了一个问题我们怎么找都找不到。由于我们在宿舍编好程序,到实验室只需要粘贴上去就行了,当我们编译运行的时候总是出现有不可编译的字符的错误提示。我们不管怎么找都没有办法解决这个问题。这个困扰了我们很长时间,最后实在想不出解决的办法就请教直到我们试验的学长。原来使我们复制粘贴的时候把一个注释的汉字一起粘贴到里面,而在程序里他却被隐藏了。就这样一个的小小的错误却花费了我们那么久的时间,这也说明了编程的需要的细心和耐心。不能丝毫的粗心大意和懈怠。还有一个就是我们再往单片机里下程序的问题总是出现无法加载的信息,不管怎么样,程序总是下不到单片机里面去,对于这一点我们没有很好的办法解决,有时候只能通过更换单片机来解决这个问题。也许这对于我们以后对单片机的学习有了一个提示,要通过以后的学习解决这个问题。通过这次的课程设计作品的制作让我对单片机的理论有了更加深入的了解,同

温馨提示

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

评论

0/150

提交评论