欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    硬件课程设计报告.doc

    • 资源ID:2883599       资源大小:201.50KB        全文页数:18页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    硬件课程设计报告.doc

    硬件课程设计报告摘 要单片机是指一个集成在一块芯片上的完整计算机系统。尽管它的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。本设计通过将矩阵键盘、数码管、蜂鸣器及单片机结合起来,构成一个简单的计算器。此计算器可进行1万以内的加减乘除运算,并通过数码管显示。当运算结果溢出时,蜂鸣器会发出报警,同时数码管显示E(error)。按键的同时蜂鸣器会发生,表示按键已按下。复位电路可实现单片机的复位。通过本次课程设计,初步了解单片机的基本使用及程序的编写,为以后的继续学习打下基础。关键词:单片机;4*4矩阵键盘;数码管;蜂鸣器;复位电路目 录1 设计任务与要求5 1.1课程介绍5 1.2计算器的设计与要求52 总体方案5 2.1硬件部分5 2.2软件部分53硬件方案6 3.1硬件组成63.2各模块功能介绍 7 3.2.1 4*4矩阵键盘7 3.2.2 4位数码管显示电路7 3.2.1 单片机介绍84软件方案10 4.1程序组成104.2程序流程图104.3程序清单125系统设计过程中的问题及解决方案12 5.1问题1及解决方案125.2问题2及解决方案125.2问题3及解决方案126实验总结与体会12附录131 设计任务与要求1.1 课程介绍硬件课程设计是继微机原理与接口技术课程教学后的一个重要的综合实践教学环节,它能起到巩固课堂和书本上所学知识,加强综合能力,提高系统设计水平,启发创新思想的效果。课程设计的目地是综合这些基础知识,就具体问题让学生做出软、硬件解决方案并付诸实施,以培养解决实际问题的能力。要求每个学生都能自己动手独立设计完成一个典型的微机应用小系统。1.2 计算器的设计与要求通过4*4键盘获得按键信息,蜂鸣器随着按键发声。单片机处理按键信息,计算后以4位数码管显示。若计算结果溢出,则蜂鸣器长响提示。按下复位键,则可以实现单片机的复位。要求:具有计算器的基本按键(09数字键、加减乘除键、清零键、等于键)。可以进行1万以内的加减乘除运算,正确显示结果。通过数码管正确显示运算结果。以蜂鸣器表示按键正确按下,并可以溢出报警。2 总体方案2.1 硬件部分在此设计中主要用到的部件有:4*4键盘电路、4位数码管显示电路、单片机最小系统、复位电路、蜂鸣器电路。利用分步操作,先实现各部分的子功能,再将这些子功能有机地结合到一起,实现系统的整体设计要求。各模块功能如下:1) 4*4键盘电路:通过键盘扫描程序,获得按键信息。2) 4位数码管显示电路:显示输入信息及运算结果。3) 复位电路:实现单片机的复位操作。4) 蜂鸣器电路:表示按键已按下,并可以溢出报警。2.2 软件部分相应的程序清单中分为键盘扫描子程序、显示子程序、计算子程序及初始化子程序。在主程序中分别调用各子程序,实现计算器的功能。3 硬件方案3.1 硬件组成硬件部分由4*4键盘电路、4位数码管显示电路、单片机最小系统、复位电路、蜂鸣器电路组成。各部分的连接关系如下:单片机4*4矩阵键盘4位数码管蜂鸣器复位电路3.2各功能模块介绍3.2.1 4*4矩阵键盘矩阵式键盘的结构与工作原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。键盘扫描程序一般应包括以下内容:1) 判别有无键按下。2) 键盘扫描取得闭合键的行、列值。3) 用计算法或查表法得到键值。4) 判断闭合键是否释放,如没释放则继续等待。5) 将闭合键号保存,同时转去执行该闭合键的功能。3.2.2 4位数码管显示电路数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点,而每个LED的阴极分别为a、b、c、d、e、f、g及 dp(小数点);共阴极则是把所有LED的阴极连接到共同接点,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点)。8个LED分别与上面那个图中的adp各段相对应,通过控制各个LED的亮灭来显示数字。还有一种比较常用的是四位数码管,内部的4个数码管共用adp这8根数据线,为人们的使用提供了方便,因为里面有4个数码管,所以它有4个公共端,加上 adp,共有12个引脚。引脚排列依然是从左下角的那个脚(1脚)开始,以逆时针方向依 次为112脚,下图中的数字与之一一对应。动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。3.2.3 单片机介绍1主要特性:·4K字节可编程闪烁存储器 ·全静态工作:0Hz-24Hz·三级程序存储器锁定·128*8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源 ·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路 2管脚说明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。  P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。3振荡器特性:  XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。4芯片擦除:  整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。4 软件方案4.1 程序组成软件部分由主函数、初始化子函数、延时子函数、键盘扫描子函数、计算子函数组成及显示子函数。1) 主函数:负责调用各子程序,实现计算器的整体功能。2) 初始化子函数:将各变量进行初始化。3) 键盘扫描子函数:实现键盘扫描功能,获得按键值。4) 计算子函数:根据按键所得的运算符号,进行加减乘除运算。5) 显示子函数:显示按键信息及运算结果。4.2 程序流程图流程图如下:开始键盘扫描程序,获得按键信息判断按键值执行初始化函数调用运算子函数存储标志信息将按键组装成一个完整的数值显示正确数值显示溢出并以蜂鸣器报警判断数值是否溢出等于键清零键09数字键运算键没有溢出溢出4.3 程序清单程序清单见附录5 系统设计过程中的问题及解决方案5.1 问题1及解决方案数码管显示混乱。程序中的变量使用的是unsigned char型,输入或计算所得的数据超过范围,因此造成显示混乱。只需将变量的类型改为unsigned int型即可。5.2 问题2及解决方案键盘按下时没有效果。矩阵键盘的扫描原理是逐行扫描,并回读行列信息,与设定的值进行比较以确定是哪一个键按下。由于硬件电路中行列均焊接了电阻,使得电压信号比较微弱,因此单片机回读到错误的信息。解决方法是拆掉所焊接的电阻。5.3 问题3及解决方案程序中所计算的结果有误。这是因为当没有键按下时,程序反复进入上一次进入的子程序,造成计算结果错误及显示错误。因此,要在程序中设定一个标志符号,保证只有在有键按下的情况下才进入相应的子程序。5.4 问题4及解决方案关于蜂鸣器的各种问题。蜂鸣器的高电平断应接到电源开关的后面,若直接接到电源正极,当单片机还没上电时蜂鸣器便一直响。经过反复试验,控制蜂鸣器的程序段应放到键盘扫描子程序的末端,这样每当有键按下时蜂鸣器便会随之响一下。至于蜂鸣器发声的持续时间也要经过反复试验,才能得到合适的效果。6 实验总结与体会通过此次硬件课程设计,了解了单片机的基本使用及功能,并初步掌握了单片机C语言程序的编写。在程序编写过程中,学会了程序逐步改进的方法,对照硬件的仿真软件,逐步改善程序的功能。在搭建硬件电路时,要做到耐心仔细。因为硬件焊接错误会直接导致设计的失败。当发现硬件有错误时,要认真检查所焊接的每一条电路,对照所设计的电路图查处错误。在焊接时,为避免线路过于混乱,可设计适当的插针,这样可以简化电路的焊接以及电路的排错。此外,在此次设计过程中,深刻体会到应该加强专业知识的学习,不管是在硬件还是在软件方面。同时,要加强动手实践的能力,将课本所学知识运用到实践中去,这样才能真正掌握所学的知识。附录程序清单如下:#include<reg51.h>#define uint unsigned int/宏定义#define uchar unsigned charuchar code table=/数码管显示表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uint num,num1,temp,ge,shi,bai,qian;/程序中用到的变量unit flag,flag2,previous,current,sign;sbit speaker=P00;/用P00控制蜂鸣器void delay(uint z);void ini();/子函数声明void store(uint num2);void calculate(uint sign1);uint keyscan();void display(uint aa);/*在主函数中分别调用各子函数,实现计算器的整体功能。首先进行初始化,然后根据所按下的数值调用相应的子函数。*/void main()/主函数ini();while(1)num1=keyscan();/调用键盘扫描子函数if(num1<10)/若按键小于10,则调用子函数store(num);flag2=0;if(num1=10)/若按键为10,则调用初始化子函数ini();flag2=0;if(num1=11)/若按键为11,则调用计算子函数calculate(sign);flag2=0;current=0; if(num1>11 && num1<16)/否则调用显示子函数并保存标志display(previous);flag=1;sign=num1;flag2=0;void ini()/初始化子函数speaker=1;/初始化各种标志sign=0;flag=0;previous=0;current=0;qian=0;bai=0;shi=0;ge=0;P1=0xfe;/计算器初始时显示数字0P3=table0;delay(1);void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void store(uint num2)/此函数用于组装数字if(flag=0)if(flag2=1)previous=previous*10+num2;/前一位乘10便得到当前的数值else previous=previous;display(previous);if(flag=1)if(flag2=1)current=current*10+num2;else current=current;display(current);/*计算子函数是根据标志进行相应的计算,当计算结果发生溢出时显示E(error),并使蜂鸣器长响报警。*/void calculate(uint sign1)if(flag2=1)switch(sign1)case 15:previous=previous+current;break;/根据标志进行相应计算case 14:previous=previous-current;break;case 13:previous=previous*current;break;case 12:previous=previous/current;break;if(flag2=0)previous=previous;if(previous<0 | previous>9999 )/溢出处理,若发生溢出则蜂鸣器 /报警并显示字母E(error) speaker=0;delay(10); P1=0xfe; P3=table14; delay(1); elsedisplay(previous);/*显示子函数主要是将当前数值的各位进行分离,分别显示各位。*/void display(uint num3)/显示子函数uint i;i=0;qian=num3/1000;/分离该数字的各位bai=num3%1000/100;shi=num3%100/10;ge=num3%10; while(num3!=0)num3=num3/10;i=i+1;P1=0xfe;/通过位选信号依次显示该数字的各位 P3=tablege;/P3口用于输出段选信号 delay(1);if(i>1)P1=0xfd; P3=tableshi; delay(1);if(i>2)P1=0xfb;P3=tablebai;delay(1);if(i>3)P1=0xf7;P3=tableqian;delay(1);/*键盘扫描子函数采用逐行扫描的方法,依次扫描4*4键盘的各行。扫描的步骤包括消抖、判断是哪行哪列的键被按下以及松手检测。将4*4键盘编号,这样可以将所按下键对应的编号返回主函数,便实现矩阵键盘的扫描。*/uint keyscan()/键盘扫描子函数P2=0xfe;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xee:num=10;flag2=1;break;case 0xde:num=0;flag2=1;break;case 0xbe:num=11;flag2=1;break;case 0x7e:num=12;flag2=1;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;P2=0xfd;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xed:num=1;flag2=1;break;case 0xdd:num=2;flag2=1;break;case 0xbd:num=3;flag2=1;break;case 0x7d:num=13;flag2=1;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;P2=0xfb;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xeb:num=4;flag2=1;break;case 0xdb:num=5;flag2=1;break;case 0xbb:num=6;flag2=1;break;case 0x7b:num=14;flag2=1;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;P2=0xf7;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xe7:num=7;flag2=1;break;case 0xd7:num=8;flag2=1;break;case 0xb7:num=9;flag2=1;break;case 0x77:num=15;flag2=1;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;if(flag2=1)speaker=0;delay(100);speaker=1;return num;

    注意事项

    本文(硬件课程设计报告.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开