简易计算器单片机课程设计报告

上传人:m**** 文档编号:491455370 上传时间:2022-09-24 格式:DOCX 页数:31 大小:1.30MB
返回 下载 相关 举报
简易计算器单片机课程设计报告_第1页
第1页 / 共31页
简易计算器单片机课程设计报告_第2页
第2页 / 共31页
简易计算器单片机课程设计报告_第3页
第3页 / 共31页
简易计算器单片机课程设计报告_第4页
第4页 / 共31页
简易计算器单片机课程设计报告_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《简易计算器单片机课程设计报告》由会员分享,可在线阅读,更多相关《简易计算器单片机课程设计报告(31页珍藏版)》请在金锄头文库上搜索。

1、简易计算器单片机课程设计报告目录一、概述2二、实验内容3三、硬件设计31 设计总体框图32 实际电路4(1)复位电路4(2)时钟电路5(3)EA/VPP(31脚)的功能和接法6(4)键盘输入电路6(5)数码管显示电路7四、软件设计91 程序内容92 C语言程序9五、Protues仿真9六、设计总结10七、附录111 C语言程序:112焊接电路板实物图193 芯片引脚图19一、概述单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。单片机课程设计内容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发

2、环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机内部资源及外部IO口的功能扩展,使制作的单片机系统具有一定的功能。二、实验内容自制一个单片机最小系统,包括串口下载、复位电路,采用外部小键盘输入数据,能够实现加法、乘法及一个科学计算,计算结果显示在四位一体的数码管上。三、硬件设计1 设计总体框图2 实际电路(1)复位电路在单片机系统中,复位电路是非常关键的,当程序跑飞(运行不正常)或死机(停止运行)时,就需要进行复位。MCS-5l 系列单片机的复位引脚RS

3、T( 第9 管脚) 出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST 持续为高电平,单片机就处于循环复位状态。复位操作通常有两种基本形式:上电自动复位和开关复位。上电瞬间,电容两端电压不能突变,此时电容的负极和RESET 相连,电压全部加在了电阻上,RESET 的输入为高,芯片被复位。随之+5V电源给电容充电,电阻上的电压逐渐减小,最后约等于0,芯片正常工作。并联在电容的两端为复位按键,当复位按键没有被按下的时候电路实现上电复位,在芯片正常工作后,通过按下按键使RST管脚出现高电平达到手动复位的效果。一般来说,只要RST 管脚上保持10ms 以上的高电平,就能使单片机有效的复位

4、。本次课程设计选用开关复位电路,设计如下:(2)时钟电路XTAL1(19 脚) :芯片内部振荡电路输入端。XTAL2(18 脚) :芯片内部振荡电路输出端。XTAL1 和XTAL2 是独立的输入和输出反相放大器,它们可以被配置为使用石英晶振的片内振荡器,或者是器件直接由外部时钟驱动。本次课程设计采用的是内时钟模式,即采用利用芯片内部的振荡电路,在XTAL1、XTAL2 的引脚上外接定时元件(一个石英晶体和两个电容),内部振荡器便能产生自激振荡。一般来说晶振可以在1.2 12MHz 之间任选,甚至可以达到24MHz 或者更高,但是频率越高功耗也就越大。在本次课程设计采用的11.0592M 的石英

5、晶振。和晶振并联的两个电容的大小对振荡频率有微小影响,可以起到频率微调作用。当采用石英晶振时,电容可以在20 40pF 之间选择(本实验套件使用30pF);当采用陶瓷谐振器件时,电容要适当地增大一些,在30 50pF 之间。通常选取33pF 的陶瓷电容就可以了。具体电路如下:(3)EA/VPP(31脚)的功能和接法51 单片机的EA/VPP(31 脚) 是内部和外部程序存储器的选择管脚。当EA 保持高电平时,单片机访问内部程序存储器;当EA 保持低电平时,则不管是否有内部程序存储器,只访问外部存储器。对于现今的绝大部分单片机来说,其内部的程序存储器(一般为flash)容量都很大,因此基本上不需

6、要外接程序存储器,而是直接使用内部的存储器。 在本实验套件中,EA 管脚接到了VCC 上,只使用内部的程序存储器。(4)键盘输入电路在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。由于本次实验是制作简易计算器,按键需求较多,所

7、以输入设备选择为一个矩阵键盘,具体电路设计如下:(5)数码管显示电路数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、3位、4位、5位、6位、7位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码

8、管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。本次课程设计采用共阴数码管作为显示设备,驱动芯片采用3态8位缓冲器芯片,具体型号为SN74LS244N,位选采用4个NPN三极管驱动,具体型号为S9013,具体电路如下:四、软件设计1 程序内容本次课程设计的程序包括:主程序(实现乘法,加法,科学计算等),延时子程序,键盘扫描子程序,数码管显示子程序。2 C语言程序见附录五、Protues仿真具体仿真图如下:需要说明的是,本次仿真主要检验程序是否正确,所以省去了复位电路,晶振电路,电源电路等。

9、因为在仿真中这些电路没有不会影响程序的运行。这样可以节省时间,避免做些无用功,同时电路看起来更简洁,更易理解,把最关键的与程序有关的电路连接凸显出来。六、设计总结在本次课程设计中我体会最深刻的就是“理想是丰满的,现实是残酷的”。平常在学习中,我们只学习了书本上理论的知识,知道原理。具体做起实物来问题百出!在这次实验中,困扰我很深的是数码管的显示问题,一直想用三极管来进行位选,实现动态显示,但是电路连接好后三极管基极只要给一点电压(大约超过0.7V左右),集电极和发射极就导通,从而导致数码管一直导通,显示出数字8,不受程序控制。刚出现这个问题的时候,我一直没找出是软件还是硬件问题。直到用万用表测

10、出基极电压才找出问题。但是我换了基极电阻的大小,最后还是没有没有解决问题。最后我改变了硬件电路连接,决定直接把位选接到P2口,这样虽然亮度没有原来的强,但是由于有驱动芯片,亮度还是比较满意,可以满足要求。这样就解决了之前的问题。在整个课程设计过程中,还遇到了其他的小问题,在这里不一一赘述了。这次课程设计题目看起来简单,但还是从中学到了些有用的东西。尤其要感谢老师的严格要求,这样加强了我把这次课程设计做好的动力。七、附录1 C语言程序:#include /52系列单片机头文件#include#include #define uchar unsigned char#define uint unsi

11、gned int#define cheng0#define jia1#define kaifang 2sbit wei1=P30; /定义4个位选端口sbit wei2=P31;sbit wei3=P32;sbit wei4=P33; uchar code table= /数码管编码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);void display(uint shi);uchar keyboard();uchar key_ok=0;ucha

12、r num_key=0;/按键号 uchar count=0;/按键有效标识 void main()uint a=0,num1=0,num2=0,num3=0,num_count=1;char fuhao=0;/while(1)display(456);while(1) a=keyboard();if(key_ok=1)key_ok=0;if(count=1&a10)if(num_count=1)num1=a*1;else num2=a*1;if(num_count=3) num_count=1;else if(a10)if(num_count=1) num1=num1*10+a;else n

13、um2=num2*10+a;if(a=11)count=0;fuhao=cheng;if(num_count=3)num1=num3;num_count=2;else if(a=12)count=0;fuhao=jia;if(num_count=3)num1=num3;num_count=2;else if(a=13)count=0;fuhao=kaifang;if(num_count=3)num1=num3; if(fuhao=kaifang)num3=sqrt(num1);num1=0;num2=0;num_count=3;else if(a=16)count=0;if(fuhao=cheng)num3=num1*num2;else if(fuhao=jia)num3=num1+num2;num1=0;num2=0;num_count=3; if(num_count=1) display(num1);else if(num_count=2)display(num2);else if(num_count=3)display(num3); void delayms(int t)int x,y;for(x=0;xt;x+)for

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号