版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 信息与电气工程学院课程设计说明书(2011/2012学年第 二学期)课程名称 : 单片机课程设计 题 目 : 简易计算器的设计 专业班级 : 学生姓名 : 学 号: 指导教师 : 设计周数 : 2周 设计成绩 : 2012年 6 月 21 日目 录一、课程设计目的3二、课程设计正文3 2.1、设计所需器材3 2.2、设计任务和要求3 2.3、设计方案42.3.1、硬件设计41.STC90C52AD说明42.数码管说明5 3.晶体振荡电路设计6 4.数码管和位选设计6 5. 复位设计 7 6.蜂鸣器电路设计 8 7.矩阵键盘的设计82.3.2、软件设计9 2.4、软硬件调试19三、课程设计总结
2、19四、参考文献20附录一、系统原理图21附录二、PCB图22课程设计评语及成绩23一、课程设计目的1熟悉和掌握单片机的结构及工作原理。2掌握单片机的接口技术及相关外围芯片的外特性及控制方法。3通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。4通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。5通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。二、课程设计正文2.1 设计所需器材电阻: 1K (8个) 0.330k(8个) 10k(1个) 按键开关:17个极性电容(1个 10uf)非极
3、性电容:30pf(5个)晶振:6MHZ(1个)三极管:PNP(1个) NPN(2个)共阴极数码管:2个蜂鸣器:1个底座:DIP40(1个)DIP16(1个)万能电路板:1个芯片:STC90C52AD(1片) MAX232(1片) ,74HC573(片) 发光二极管:3个接线端子:1个2.2 设计任务和要求课程设计任务要求做一个简易数字计算器。设计的主要内容是采用STC90C51AD作为控制单元,实现简易计算器功能。原始数据及主要任务:设计一个以MCS-51单片机为核心的简易计算器系统。能够进行5以内的数字简单的加,减,乘,除运算,用2个数码管显示运算结果。若进行除法运算,则小数点保留1位显示。
4、如果除数为0,则清0显示,且蜂鸣器响,当按下任意键后,蜂鸣器停止。主要任务:(1)确定总体设计方案;(2)2位数码管显示电路设计,4*4按键电路设计,报警电路设计;(3)设计硬件电路原理图和PCB图,绘制软件程序流程图,编写程序;(4)软硬件联机调试。技术要求:以MCS-51单片机为核心,主机用P1口接4*4矩阵按键;P0口用作数码管段码接口,P2端口用作数码管位码选通接口和蜂鸣器电路接口。2.3设计方案简易数字计算器设计,主要的部分是STC90C52AD,编写程序,实现软硬结合,能够进行5以内的数字简单的加,减,乘,除运算,且具备清零功能。6个数字键,6个功能键。进行除法运算时,小数点保留1
5、位显示。如果除数为0,则清0显示,蜂鸣器响,当按下任意键后,蜂鸣器停止。可扩展计算连续功能,数据溢出清0显示,蜂鸣器响,按下任意键后,蜂鸣器停止。2.3.1硬件设计1.STC90C52AD说明AT89C51的引说明和功能说明如下:XTAL1 :接外部晶振的一个引脚。在单片机内部,它是一反相放大器输入端,这个放大器构成了片内振荡器。它采用外部振荡器时,些引脚应接地。 XTAL2 :接外部晶振的一个引脚。在片内接至振荡器的反相放大器输出端和内部时钟发生器输入端。当采用外部振荡器时,则此引脚接外部振荡信号的输入。 RST :STC90C52AD的复位信号输入引脚,高电位工作,当要对芯片又时,只要将此
6、引脚电位提升到高电位,并持续两个机器周期以上的时间,AT89C51便能完成系统复位的各项工作,使得内部特殊功能寄存器的内容均被设成已知状态。 P0口(P0.0P0.7)是一个8位漏极开路双向输入输出端口,当访问外部数据时,它是地址总线(低8位)和数据总线复用。外部不扩展而单片应用时,则作一般双向IO口用。P0口每一个引脚可以推动8个LSTTL负载。 P2口(P2.0P2.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),当访问外部程序存储器时,它是高8位地址。外部不扩展而单片应用时,则作一般双向IO口用。每一个引脚可以推动4个LSTL负载。 P1口(P1.0P1.7)口是具有内部
7、提升电路的双向I/0端口(准双向并行I/O口),其输出可以推动4个LSTTL负载。仅供用户作为输入输出用的端口。 P3口(P3.0P3.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),它还提供特殊功能,包括串行通信、外部中断控制、计时计数控制及外部随机存储器内容的读取或写入控制等功能。2. 数码管LED显示器由8段发光二极管组成,排列成8字形状,称为8段LED显示器,器件内部接线图如图所示:为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字09的共阴极字形代码如下表
8、:显示字符012345+-*/段码3FH06H5BH4FH66H6DH70H40H76H49H3. 晶体振荡电路设计图2.3-2 晶体振荡电路采用12MHZ的晶振,接在芯片的18,19引脚上。在复位端口加低电平。4. 数码管和位选设计图2.3-3 数码管和位选电路需要显示时间选用共阴极的数码管是三极管驱动,接有1000欧姆的保护电阻而成的两个数码管在显示时需要选通,采用STC90C52AD的P0口作为位选信号的输出端,高电平有效。由于P0口有8个输出端,当端口为高电平使对应的数码管选通。共阴极的数码管是低电平有效,所以采用NPN的三极管。5. 复位设计复位键直接加在单片机的复位端,当按键S1被
9、按下时,系统复位。图2.3-4 复位电路6.蜂鸣器电路设计 图2.3-5 蜂鸣器电路蜂鸣器接在P3.5口上,当触发时P3.5产生低电平使其导通,蜂鸣器响,报警。7.矩阵键盘的设计图2.3-6 矩阵键盘开关接在P1口上,P1.0P1.7,按键按下后相应的按键由高电平变为低电平,P1.0P1.3为行。2.3.2软件设计 系统程序:# include<stdio.h> # include<reg52.h> # include<absacc.h> # include<intrins.h># include<math.h>#define uin
10、t long#define uchar unsigned char/ '0' '1' '2' '3' '4' '5''6' '7' '8' '9''-'uchar zixing11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf;uchar zixing110=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;
11、 /float num,a_chufa;uint op=0; /用来存储加、减、乘、除、清零,操作符uint preop=20; /操作符记忆,记忆一次按下的操作符uint first=0; /前一个数值uint second=0; /按键输入数值uint result=0; /执行运算后的结果uint key=12; /读取的键值float disp=0; /显示的数值sbit s0=P22; /蜂鸣器接P口sbit s1=P07; /小数点亮灭控制P口void display(); /显示子程序uchar kbscan(void); /键盘扫描子程序void yunsuan(void);
12、/运算子程序void d1ms(int n); /延时子程序void sound(void); /*-主程序-*/ void main(void)uchar i,j=0;P0=0xc0; /数码管显示数值清零while(1) /主循环display(); /读取键值d1ms(1); /延时1msif(key>=0&&key<=5) / 按键为05,读取数值并显示secondsecond=key;disp=second; display();key=12;if(preop=55)/等号结束后,输入新数字。清零各项preop=20;d1ms(1);else if(key
13、>=6&&key<=9) /按键为69,调用四则运算 op=key;if( (key=6)|(key=7) )key=12;/ + -elsekey=13;yunsuan();display();else if(key=10) /键值为10时为C/ON键disp=0;display();first=0; / 清零,恢复初始状态second=0;op=0;result=0;preop=20;key=12;else if(key=11) /键值为11时,为等号op=key;yunsuan();d1ms(1);display();second=0;op=0;preop=5
14、5; /表示清除操作符记忆key=12;for(i=0;i<200;i+);/*-四则运算子程序-*/ /*改过 再看一遍*/void yunsuan(void)if(op!=0)switch(preop)case 6: /加法result=first+second;first=result;disp=result; preop=op;op=0;second=0;break;case 7: /减法result=first-second;first=result;disp=result;preop=op;op=0;second=0;break;case 8: /乘法result=first
15、*second; / 0first=result;/ 0disp=result;/ 0preop=op;/ 8op=0;if(key=12)/ + - second=0;elsesecond=1; break;case 9: /除法if(second=0)/除数为零,清零,蜂鸣器响disp=100;sound();elsea_chufa=(first*10*0.1)/second; first=a_chufa;disp=a_chufa;preop=op;op=0;if(key=12)/ + - second=0;elsesecond=1; break;case 20:/初次运行执行这里,没有操
16、作符记忆时(什么叫初次运行)preop=op;first=second;if(key=12)/ + - second=0;elsesecond=1;op=0;break;default:/其他,请按键输入数字preop=op;second=0;op=0;break; /*-显示子程序-*/void display()uint buf1,buf2,a,b;float k=0.0;key=kbscan();k=disp;if(k<0&&k>-10)k=-k;P2=0xfe;P0=zixing10;d1ms(1);P2=0xff;P2=0xfd;P0=zixing(int
17、)k;d1ms(1);P2=0xff; else if(k>=0&&k<10)/有小数时a=(int)(k*100)%10;/第二位小数数值b=(int)(k*10)%10; /第一位小数数值buf1=(int)k;if(a>=5)buf2=b+1;else buf2=b;if(a!=0|b!=0)P2=0xfe;P0=zixing1buf1;d1ms(1);P2=0xfd;P0=zixingbuf2;d1ms(1);else P2=0xfd;P0=zixingbuf1;d1ms(1);else if(k>=10&&k<=99)/两
18、位数时buf1=(int)k/10;buf2=(int)k%10;P2=0xfe;P0=zixingbuf1;d1ms(1);P2=0xfd;P0=zixingbuf2;d1ms(1);else if(k>=100|k<=-10) /超出显示范围报错P2=0xfd;P0=0x86;sound();/void d1ms(int n)int i;for(;n>0;n-)for(i=0;i<250;i+);/uchar kbscan(void)uchar value=12,temp;P1=0xfe;/扫描第一行temp=P1;temp=temp&0xf0;if(tem
19、p!=0xf0)d1ms(5);if(temp!=0xf0)switch(temp)case 0xe0: value=3;break;case 0xd0: value=2;break;case 0xb0: value=1;break;case 0x70: value=0;P1=0xfd;/扫描第二行temp=P1;temp=temp&0xf0;if(temp!=0xf0) d1ms(5);if(temp!=0xf0) switch(temp)case 0xe0: value=7;break;case 0xd0: value=6;break;case 0xb0: value=5;brea
20、k;case 0x70: value=4;break; P1=0xfb;/扫描第三行temp=P1;temp=temp&0xf0;if(temp!=0xf0) d1ms(5);if(temp!=0xf0) switch(temp)case 0xe0: value=11;break;case 0xd0: value=10;break;case 0xb0: value=9;break;case 0x70: value=8;break; return value;/*-发声子程序-*/void sound(void)s0=0;while(!s0)key=kbscan();d1ms(1);if
21、(key<14)s0=1; 2.4、软硬件调试系统调试:根据系统设计方案,本系统的调试共分为两大部分:硬件调试,软件调试。(1)硬件调试 对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。首先用数字万用表对实物板上的各元器件进行测试,在测试过程中,检验出一些错误,如数码管的引脚接错了,导致数码管无法显示,将数码管各引脚正确焊接后,数码管正常工作。(2)软件调试软件调试采用单片机仿真器keil uVision及protus,将编好的程序进行调试,主要是检查语法错误。再进行仿真,检验各个子程序是否正确执行,和硬件模块的协调性。由于能力有限,程序中仍然存在如下BUG,不能进行连续除法,尚未实现加减法和乘除法之间的混合运算,错误报警后按运算符号键结束警报三、课程设计总结为之两周的单片机课程设计即将结束,在这两周的时间我学会很多东西,明白了很多道理。一开始的自认为课设题目很简单,到动手时的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 硅芯制备工安全宣贯测试考核试卷含答案
- 栲胶蒸发工岗前实操知识技能考核试卷含答案
- 油母页岩供料工岗前创新思维考核试卷含答案
- 2022-2023学年吉林省白山市普通高校对口单招综合素质自考真题(含答案及部分解析)
- 2025年本地网传输系统合作协议书
- 2025年原油加工量合作协议书
- 2025年LED超大屏幕显示器项目发展计划
- 三级安全教育考试卷(附答案)
- 医院检验科年度工作总结及计划
- 2026营养师基础知识试题及答案
- 中华医学会麻醉学分会困难气道管理指南
- 医务部会议管理制度范本
- 绘本制作培训课件
- 客户分配管理办法管理
- 燃气入户安检培训
- 高中地理思政融合课《全球气候变暖》
- 《山东省市政工程消耗量定额》2016版交底培训资料
- 《中医六经辨证》课件
- 挂名合同协议书
- 苏教版高中化学必修二知识点
- 2024年国家公务员考试国考中国人民银行结构化面试真题试题试卷及答案解析
评论
0/150
提交评论