科学计算器设计报告(51单片机)
单片机课程设计报告(多功能计算器)
班 级: 姓 名: 学 号: 指导老师:
一、内容摘要
利用89c51作为主控器设计一个四则运算的计算器。 首先通过在图书馆和网上查找有关设计计算器的资料,大概了解设计计算器需要哪几个模块,熟悉Keil和Proteus两个软件的用法,以及它们的联调,完成计算器的程序设计和仿真,然后就是进实验室进行计算器电路板的焊接,最后就是将程序下载到单片机芯片中,系统联调,直到得出结果。 二、设计内容及要求
用单片机设计计算器,要求可以进行加、减、乘、除运算。 三、系统方案设计,画出系统框图
系统原理框图
四、画出完整的电路图,并说明电路的工作原理
电路图说明:
(1)键盘的列扫描接单片机P2口的低4位,行扫描接单片机P1口的低4位;
(2)数码管的段选通过单片机的P0口接74LS244来驱动,数码管的位选接单片机的P2口;
(3)发光二极管电路用来说明电路是否上电; (4)晶振电路为单片机提供时钟频率; (5)复位电路为单片机提供复位信号。 计算器的功能实现:
(1)此计算器适应于不大于八位整数的四则混合运算,若单个数大于八位或者结果大于八位(溢出)则显示“Chu cuo”。
(2)如果在还没有按数字之前按了一个符号键或者等号则显示“Chu cuo”。 (3)若接连按了几个运算符键,实际上进行的运算是最后一次按的运算键。 (4)可以显示负数、小数。
(5)此计算器不可实现连乘、连加、连减、连除。 四、软件仿真,根据系统硬件图编写系统程序并调试
#include <reg52.h>
#include <intrins.h>//循环左右移要用该头文件(-cror-(),-crol-()) #define uchar unsigned char #define ulong unsigned long
uchar array[8]={0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10}; uchar array1[8]={0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10}; uchar a;
ulong num1=0,num2=0; sbit P10=P1^0; sbit P11=P1^1; sbit P12=P1^2; sbit P13=P1^3;
sbit F1=PSW^1;//定义一个标志位,F0在头文件里已定义 void displayljy(void);//声明"显示"子函数
void inkeylove(void);//声明"判断按下的是什么键"子函数 void iskeyyou(void);//声明"判断是否有键按下"子函数
void bian1(void);//声明"将uchar型变量转化为ulong型变量"子函数 void bian2(void);//声明"将ulong型变量转化为uchar型变量"子函数 void jia(void);//声明"加运算"子函数 void jian(void);//声明"减运算"子函数 void cheng(void);//声明"乘运算"子函数 void chu(void);//声明"除运算"子函数 void error(void);//声明"出错显示"子函数 void main() {uchar r7=0x00,i; while(1) {displayljy(); inkeylove();
if(a!=0xff)//如果有键输入,继续往下执行,否则从新开始
{if(a==0x0f) //如果输入的是"清除"键,将显示器清屏,同时清存放运算符号的单元 {r7=0x00; for(i=0;i<8;i++) {array[i]=0x10; array1[i]=0x10; }
}
else if(a==0x0e)//如果输入的是"=",继续往下执行,否则从新开始 {if(r7==0x0d)//如果r7中存放的是"+",则执行加运算 {bian1(); jia(); bian2();
}
else if(r7==0x0c)//如果r7中存放的是"-",则执行减运算 {bian1(); jian(); }
else if(r7==0x0b)//如果r7中存放的是"*",则执行乘运算
{bian1(); cheng(); bian2(); }
else if(r7==0x0a)//如果r7中存放的是"÷",则执行除运算
{bian1(); chu(); } else
error();//如果r7没有存进运算符,则转出错处理
}
else
{if(r7!=0x00)//如果已按过运算键,往下执行,否则转else {if(a>0x09&&a<0x0e)//如果还按下运算键,则后按的取代前面按的 r7=a;
else if(array1[0]==0x10)//判断是不是输入加数(减数...)的第一个数 {for(i=0;i<8;i++)//是的话,将被加数(被减数...)存入array1中 array1[i]=array[i]; for(i=0;i<8;i++) array[i]=0x10;
for(i=7;i>0;i--)//array中存入加数(减数...)
array[i]=array[i-1];
array[0]=a; } else
//不是输入加数(减数...)的第一个数
{if(array[7]!=0x10)//如果加数(减数...)已是八位整数,则转出错处理 error(); else
{for(i=7;i>0;i--)//否则将加数左移 array[i]=array[i-1]; array[0]=a; }
}
}
else//之前还没有运算键按下 {if(a>0x09)//有运算键按下
{if(array[0]==0x10)//但是在运算键按下之前没有输入被加数,则转出错 error();
else
r7=a;//否则将运算键输入r7中保存 }
else if(array[7]!=0x10)//如果被加数已是八位整数,则转出错 error(); else
//否则将被加数左移
{for(i=7;i>0;i--) array[i]=array[i-1]; array[0]=a; } } } } }
}
void bian1(void)//"将uchar型变量转化为ulong型变量"子函数 {uchar i; for(i=7;i>0;i--)
{if(array[i]==0x10) array[i]=0x00; if(array1[i]==0x10) array1[i]=0x00; }
num1=(ulong)array1[7]*10000000; num1+=(ulong)array1[6]*1000000; num1+=(ulong)array1[5]*100000; num1+=(ulong)array1[4]*10000; num1+=(ulong)array1[3]*1000; num1+=(ulong)array1[2]*100; num1+=(ulong)array1[1]*10; num1+=(ulong)array1[0]; num2=(ulong)array[7]*10000000; num2+=(ulong)array[6]*1000000; num2+=(ulong)array[5]*100000; num2+=(ulong)array[4]*10000; num2+=(ulong)array[3]*1000; num2+=(ulong)array[2]*100; num2+=(ulong)array[1]*10; num2+=(ulong)array[0]; }
void bian2(void)//声明"将ulong型变量转化为uchar型变量"子函数{uchar i=7,F0=1; if(num1>99999999) error(); else
{array[7]=(uchar)(num1/10000000); array[6]=(uchar)(num1%10000000/1000000); array[5]=(uchar)(num1%1000000/100000); array[4]=(uchar)(num1%100000/10000); array[3]=(uchar)(num1%10000/1000); array[2]=(uchar)(num1%1000/100); array[1]=(uchar)(num1%100/10);
array[0]=(uchar)(num1%10); while(i>0&&F0) {if(array[i]==0x00) {array[i]=0x10; i--;
}
else F0=0; } } }
void jia(void)//"加运算"子函数 {num1+=num2; }
void jian(void)//"减运算"子函数{uchar i; if(num1>num2) {num1-=num2; bian2(); }
else if(num1==num2) {for(i=1;i<8;i++) array[i]=0x10; array[0]=0x00;
}
else
{num1=num2-num1; bian2(); …… 此处隐藏:5065字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




