单片机课程设计报告-简易计算器_第1页
单片机课程设计报告-简易计算器_第2页
单片机课程设计报告-简易计算器_第3页
单片机课程设计报告-简易计算器_第4页
单片机课程设计报告-简易计算器_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

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 芯片引脚图 .192一、概述单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。单片机课程设计内容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51 编程调试,并使用 STC ISP 调试工具采用串口下载方式联调制作的单片机最小系统。单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机内部资源及外部 IO 口的功能扩展,使制作的单片机系统具有一定的功能。二、实验内容自制一个单片机最小系统,包括串口下载、复位电路,采用外部小键盘输入数据,能够实现加法、乘法及一个科学计算,计算结果显示在四位一体的数码管上。3三、硬件设计1 设计总体框图2 实际电路4(1)复位电路在单片机系统中,复位电路是非常关键的,当程序跑飞(运行不正常)或死机(停止运行)时,就需要进行复位。MCS-5l 系列单片机的复位引脚 RST( 第 9 管脚) 出现 2 个机器周期以上的高电平时,单片机就执行复位操作。如果 RST 持续为高电平,单片机就处于循环复位状态。复位操作通常有两种基本形式:上电自动复位和开关复位。上电瞬间,电容两端电压不能突变,此时电容的负极和 RESET 相连,电压全部加在了电阻上,RESET 的输入为高,芯片被复位。随之+5V 电源给电容充电,电阻上的电压逐渐减小,最后约等于 0,芯片正常工作。并联在电容的两端为复位按键,当复位按键没有被按下的时候电路实现上电复位,在芯片正常工作后,通过按下按键使RST 管脚出现高电平达到手动复位的效果。一般来说,只要 RST 管脚上保持 10ms 以上的高电平,就能使单片机有效的复位。本次课程设计选用开关复位电路,设计如下:5(2)时钟电路XTAL1(19 脚) :芯片内部振荡电路输入端。XTAL2 (18 脚) :芯片内部振荡电路输出端。XTAL1 和 XTAL2 是独立的输入和输出反相放大器,它们可以被配置为使用石英晶振的片内振荡器,或者是器件直接由外部时钟驱动。本次课程设计采用的是内时钟模式,即采用利用芯片内部的振荡电路,在 XTAL1、XTAL2 的引脚上外接定时元件(一个石英晶体和两个电容) ,内部振荡器便能产生自激振荡。一般来说晶振可以在 1.2 12MHz 之间任选,甚至可以达到 24MHz 或者更高,但是频率越高功耗也就越大。在本次课程设计采用的 11.0592M 的石英晶振。和晶振并联的两个电容的大小对振荡频率有微小影响,可以起到频率微调作用。当采用石英晶振时,电容可以在 20 40pF 之间选择(本实验套件使用 30pF) ;当采用陶瓷谐振器件时,电容要适当地增大一些,在 30 50pF 之间。通常选取 33pF 的陶瓷电容就可以了。具体电路如下:6(3)EA/VPP (31 脚)的功能和接法51 单片机的 EA/VPP(31 脚) 是内部和外部程序存储器的选择管脚。当 EA 保持高电平时,单片机访问内部程序存储器;当EA 保持低电平时,则不管是否有内部程序存储器,只访问外部存储器。对于现今的绝大部分单片机来说,其内部的程序存储器(一般为 flash)容量都很大,因此基本上不需要外接程序存储器,而是直接使用内部的存储器。在本实验套件中,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)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极8为低电平时,相应字段就不亮。本次课程设计采用共阴数码管作为显示设备,驱动芯片采用 3态 8 位缓冲器芯片,具体型号为 SN74LS244N,位选采用 4 个 NPN三极管驱动,具体型号为 S9013,具体电路如下:9四、软件设计1 程序内容本次课程设计的程序包括:主程序(实现乘法,加法,科学计算等) ,延时子程序,键盘扫描子程序,数码管显示子程序。2 C 语言程序见附录五、Protues 仿真具体仿真图如下:10需要说明的是,本次仿真主要检验程序是否正确,所以省去了复位电路,晶振电路,电源电路等。因为在仿真中这些电路没有不会影响程序的运行。这样可以节省时间,避免做些无用功,同时电路看起来更简洁,更易理解,把最关键的与程序有关的电路连接凸显出来。六、设计总结在本次课程设计中我体会最深刻的就是“理想是丰满的,现实是残酷的” 。平常在学习中,我们只学习了书本上理论的知识,知道原理。具体做起实物来问题百出!11在这次实验中,困扰我很深的是数码管的显示问题,一直想用三极管来进行位选,实现动态显示,但是电路连接好后三极管基极只要给一点电压(大约超过 0.7V 左右) ,集电极和发射极就导通,从而导致数码管一直导通,显示出数字 8,不受程序控制。刚出现这个问题的时候,我一直没找出是软件还是硬件问题。直到用万用表测出基极电压才找出问题。但是我换了基极电阻的大小,最后还是没有没有解决问题。最后我改变了硬件电路连接,决定直接把位选接到 P2 口,这样虽然亮度没有原来的强,但是由于有驱动芯片,亮度还是比较满意,可以满足要求。这样就解决了之前的问题。在整个课程设计过程中,还遇到了其他的小问题,在这里不一一赘述了。这次课程设计题目看起来简单,但还是从中学到了些有用的东西。尤其要感谢老师的严格要求,这样加强了我把这次课程设计做好的动力。七、附录1 C 语言程序:#include /52 系列单片机头文件#include#include #define uchar unsigned char#define uint unsigned int#define cheng 0#define jia 112#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;uchar 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=1P3=0xfB;delayms(2);P3=0xfF;delayms(3);15if(a=100)P1=tablebai;P3=0xfD;delayms(2);P3=0xff;delayms(3);if(a=1000)P1=tableqian;P3=0xfE;delayms(2);P3=0xfF;delayms(3);/*不完善的显示判断程序,不如上面的好if(a=1000)P3=0xf0;P1=tableqian;/ wei1=1;P3=0xf8;delayms(5);P3=0xf0;P1=tablebai;/wei2=1;P3=0xf4;delayms(5);P3=0xf0;P1=tableshi;/wei3=1;P3=0xf2;delayms(5);P3=0xf0;P1=tablege;/wei4=1;16P3=0XF1;delayms(5);else if(a=100)wei1=0;P1=tablebai;wei2=1;delayms(5);wei2=0;P1=tableshi;wei3=1;delayms(5);wei3=0;P1=tablege;wei4=1;delayms(5);else if(a=10)wei2=0;P1=tableshi;wei3=1;delayms(5);wei3=0;P1=tablege;wei4=1;delayms(5);else wei3=0;P1=tablege;wei4=1;delayms(5);*/矩阵键盘.无按键动作时其返回值 num_key=0,否则返回按键号 num_key*检测高四位 unsigned char keyboard() 17/ unsigned char num_key=0;/按键号 unsigned char temp=0;/读取 P2 口线数据 static unsigned char temp_code=0;/用于保存按键值 static unsigned char temp_circle=0xFE;/保存 P2 线上的循环扫描值 static unsigned char num_check=0;/低电平计数 static unsigned char key_flag=0;/按键有效标识 P2=temp_circle;/0xFX temp=P2;/读取 P2 口线数据if(temp!=temp_circle)/有按键动作 num_check+;/低电平计数|逢低电平加 1 if(num_check=5)/连续 10 次(10ms)低电平有效 key_flag=1;/按键有效标识置 1 temp_code=temp;/保存按键值 else/松手 OR 无按键动作,此时应该改变扫描线 num_check=0; if(key_flag=1)/按键有效判断 key_flag=0; count+;key_ok=1;switch(temp_code)/读取按键号 /P20 线 case 0xEE: num_key=4; break; case 0xDE: num_key=3; break; case 0xBE: num_key=2; break; case 0x7E: num_key=1; break; /P21 线 case 0xED: num_key=8; break; case 0xDD: num_key=7; break; case 0xBD: num_key=6; break; 18case 0x7D: num_key=5; break; /P22 线 case 0xEB: num_key=12; break; case 0xDB: num_key=11; break; case 0xBB: num_key=0; break; case 0x7B: num_key=9; break; /P23 线 case 0xE7: num_k

温馨提示

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

评论

0/150

提交评论