基于51单片机的数码管简易计算器.doc_第1页
基于51单片机的数码管简易计算器.doc_第2页
基于51单片机的数码管简易计算器.doc_第3页
基于51单片机的数码管简易计算器.doc_第4页
基于51单片机的数码管简易计算器.doc_第5页
免费预览已结束,剩余4页可下载查看

下载本文档

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

文档简介

基于51/52单片机的简易计算器制作11级自动化2班王栎斐 宋为为 闫巨东一、题目 利用单片机芯片STC89C52、四位八段共阳数码管及已制作好的电路板等器件设计制作一个计算器。 二、任务与要求 要求计算器能实现加减乘除四种运算具体如下 1. 加法:四位整数加法计算结果若超过八位则显示计算错误 2. 减法:四位整数减法计算结果若超过八位则显示计算错误 3. 乘法:多位整数乘法计算结果若超过四位则显示计算错误 4. 除法:整数除法 5. 有清除功能 三、课程设计简述总体设计思路简述 1.按照系统设计的功能的要求初步确定设计系统由主控模块、显示模块、键扫描接口电路共三个模块组成。主控芯片使用STC89C52单片机。 2.键盘电路采用4*4矩阵键盘电路。 3.显示模块采用共阳极数码管构成。四、硬件电路五、软件编程部份#include#define uchar unsigned char#define uint unsigned int/uchar code num=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;/共阴极 / 0 1 2 3 4 5 6 7 8 9 熄灭 -/uchar code loc=0xff,0xfe,0xfd,0xfb,0xf7;/uchar code ero=0x79,0x50,0x5c;uchar code num=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x40; /共阳极uchar code loc=0x00,0x80,0x40,0x20,0x10;uchar code ero=0x79,0x50,0x5c;uint n=0,n1=0,n2=0; /赋初值 uchar flag=0; /计算类型选择关键字void delay(int t);void display(int n);void error();main()while(1)uchar temp; /第一行检测 P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0)delay(10);temp=P3;temp=temp&0xfe;if(temp!=0xfe)temp=P3;switch(temp)case 0xee:n1=0;n2=0;n=0;flag=0;break; /清零case 0xde:n1=10*n1+0;n=n1;break; /0case 0xbe: if(flag=1)n=n2+n1; /= if(flag=2)n=n2-n1; if(flag=3)n=n2*n1; if(flag=4)n=n2/n1; n1=0; break;case 0x7e: / + n2=n1;n1=0; flag=1;break; while(temp!=0xf0)temp=P3;temp=temp&0xf0; /扫描第二行P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0)delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0)temp=P3;switch(temp)case 0xed:n1=10*n1+1;n=n1;break;/4case 0xdd:n1=10*n1+2;n=n1;break; /5case 0xbd:n1=10*n1+3;n=n1;break;/6case 0x7d:/ - n2=n1;n1=0; flag=2;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;/扫描第三行 P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0)delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0)temp=P3;switch(temp)case 0xeb:n1=10*n1+4;n=n1;break;case 0xdb:n1=10*n1+5;n=n1;break;case 0xbb:n1=10*n1+6;n=n1;break;case 0x7b: / * n2=n1;n1=0; flag=3;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;/扫描第四行 P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0)delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0)temp=P3;switch(temp)case 0xe7:n1=10*n1+7;n=n1;break; /7case 0xd7:n1=10*n1+8;n=n1;break; /8case 0xb7:n1=10*n1+9;n=n1;break; /9 case 0x77: / / n2=n1;n1=0; flag=4;break; while(temp!=0xf0)temp=P3;temp=temp&0xf0; display(n); /延时函数void delay(int t)int x,y;for(x=0;xt;x+)for(y=0;y9999)|(n=0)&(n=10)P0=nums;P2=loc3;delay(2);P2=loc0;delay(3);if(n=100)P0=numb; P2=loc2;delay(2);P2=loc0;delay(3);if(n=1000)P0=numq;P2=loc1;delay(2);P2=loc0;delay(3);/负数if(n=-999)abs=-n;g=abs%10;s=abs/10%10;b=abs/100%10;q=abs/1000%10;P0=numg;P2=loc4;delay(2);P2=loc0;delay(2);if(abs/10%100)|(abs/100%100)P0=nums;P2=loc3;delay(2);P2=loc0;delay(2);if(abs/100%100)P0=numb; P2=loc2;delay(2);P2=loc0;delay(2);if(abs/1000%100)P0=numq;P2=loc1;delay(2);P2=loc0;delay(2);else P0=num11;P2=loc1;delay(2);P2=loc0;delay(2); else P0=num11;P2=loc2;delay(2);P2=loc0;delay(2); else P0=num11;P2=loc3;delay(2);P2=loc0;delay(2);/溢出显示void error()P2=loc1;P0=ero0;de

温馨提示

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

评论

0/150

提交评论