




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录一 设计概述 -3二 硬件电路图 -3三 软件流程图 -4四 结论 -11五 参考文献-13一、1.1设计概述计算器通过编译,能实现简单的四位数加减及两位数的乘除,输入的数通过键盘给出,要求显示要操作的数,并显示结果 ,编译十进制跟十六进制之间转换的程序,实现十进制转十六进制,显示结果。1.2功能说明简单的运算功能:当通过输入键盘数字时,能够在显示器上显示输出的数值,并且通过想实现的简单运算功能,实现计算器的加、减、乘、除,并将结果显示出来。进制转换的功能:通过输入的十进制数,经过计算器的功能将其转换为十六进制数,并将结果显示出来。二、硬件电路图初始化是否为数值显示数值或错误扫描键盘显示结果运算显示16进制是否按下10转16进制三、软件流程图 N Y N Y 主要程序流程说明:主程序首先进行初始化, 设定一些变量及其意义,扫描键盘,当输入有09数字时,通过键盘的扫描程序, 将数值赋给second并在显示器上来,当输入的是加减符号的时候,通过键盘的扫面程序,赋予OP相应值,并跳到运算部分,通过判断preop的值,执行相应的运算部分,将OP的值赋给preop并把second的值赋给first。再一次通过输入09的数字,再一次经过键盘的扫描程序,输出second的值,最后通过输入键盘上的等号,右键盘扫描得出相应的OP,跳到运算部分,根据程序的流程,将第一个数的跟第二个数进行简单的加、减、乘、除运算,并将结果通过显示器输出。同理,当需要进行进制之间的转换时,输入相应的数字,通过键盘的扫描不显示在显示器上,再通过控制,进制转换开关,如果进制转换开关置0 按下,就实现了进制之间的相互转换。程序代码如下: #include #define uint long#define uchar longint zixing16=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; uint op=0;/用来存储+、-、*、/操作符 uint preop=20; uint first=0;/第一次键入的数值 uint second=0;/第二次键入的数值 uint result=0;/最终运算结果 uchar key=16; uchar kbscan(void); /声明键盘扫描程序void display(uint temp); /声明显示程序void sljzxs(uint temp); /十六进制显示程void yunsuan(void); /声明运算程序void dlms(void); /声明延时程序 /主程序/void main(void) uchar i,j=0; P0=0x01; /进制转换开关置1 P1=0X00; P2=0X00; while(1) key=kbscan(); if(P0=0x00) /如果进制转换开关置按下 sljzxs(second);/显示进制数 second=0;/传送值清 if(key=10&key=0&key=9) /如果KEY在到之间,证明键盘按下的是数值 if(op=0) if(second) second=second*10+key; display(second); key=16; dlms(); if(key=14) /如果KEY位时,证明键盘按下的是C/ON键 display(0); P2=0x20; P1=0x3f; first=0; /清,回复初始状态 second=0; op=0; result=0; preop=20; key=16; if(key=15) /如果KEY位为时,证明键盘按下的是=键 op=key; yunsuan(); dlms(); second=0; op=0; preop=55; key=16; for(i=0;i0)/直到k=0停止循环 n=k%16;/取最低位 P1=zixingn;/显示低位 k=k/16;/去掉最低位 r=P2=(r1);/左移一位 P1=0x00;/移位后会再送数,所以要置 while(P0=0x00);/等待按键放开 /四则运算/void yunsuan(void) if(op!=0) switch(preop) case 10: result=first+second; first=result; display(result); preop=op; op=0; second=0; break; case 11: result=first-second; first=result; display(result); preop=op; op=0; second=0; break; case 12: result=first*second; first=result; display(result); preop=op; op=0; second=0; break; case 13: result=first/second; first=result; display(result); preop=op; op=0; second=0; break; case 20: preop=op; first=second; second=0; op=0; break; default: preop=op; second=0; op=0; break; /延时程序/void dlms(void) uchar i; for(i=0;i250;i+)/键盘扫描程序/uchar kbscan(void) uchar p,a,n;/无符号数 P3=0xf0;/高位置高,低位置低 if(P3&0xf0)!=0xf0) /有按键则高位不全为 dlms();/延时以防干扰 if(P3&0xf0)!=0xf0)/确实有按键 p=0xfe; / p= 1111 1110从第行开始扫描 while(p&0x10)!=0)/当第位为时停止循环扫描,此时已扫描行 P3=p; /装入行扫描值 if(P3&0xf0)!=0xf0)/如果此行有按键,接下去获取键值 a=P3; /P口值送置a /键码对应的数值 if(a=0xde)n=8;/1行列为 if(a=0xed)n=4;/2行列为 if(a=0xdd)n=5;/2行列为 if(a=0xbd)n=6;/2行列为 if(a=0xeb)n=1;/3行列为 if(a=0xdb)n=2;/3行列为 if(a=0xbb)n=3;/3行列为 if(a=0xe7)n=14;/4行列为on if(a=0xd7)n=0;/4行列为 if(a=0xb7)n=15;/4行列为= if(a=0x7e)n=13; if(a=0x7d)n=12; if(a=0x7b)n=11;/3行列为- if(a=0x77)n=10;/4行列为+ if(a=0xee)n=7;/1行列为 if(a=0xbe)n=9;/1行列为 while(P3&0xf0)!=0xf0);/等待按键放开 return(n);/返回键值 else /不在第行,左移继续扫描 p=(p=10|k-99999) /最高位大于,显示错误 P2=0x01; r=0x01; P1=0x79; r=(r1); P2=r; P1=0X3f; r=(r1); P2=r; P1=0X3f; r=(r1); P2=r; P1=0X3f; r=(r1); P2=r; P1=0x06; else if(k=-99999) P1=0x00; P2=0xff; P2=0x01; P1=0x40; P2=0x20; k=-k; while(k0) buf2=k%10; P1=zixingbuf2; for(i=0;i1); P2=r; P1=0x00; else P1=0x00; P2=0xff; P2=0x20; while(k0) /由个位开始显示数值 buf2=k%10; P1=zixingbuf2; for(i=0;i1); P2=r; P1=0x00;/移位后会再送数,所以要置 四 结论1通过显示器的显示,.该计算器能够简单的四位数加减两位数乘除,输入的数通过键盘给出,能完好的显示要操作的数,并显示结果. 2.该计算器能实现十进制转十六进制,并能很好的显示出结果.本人设计部分负责十进制的显示1、 程序/显示程序/void display(uint temp) uint buf1,buf2,r,k,i; k=temp; r=0x20; P2=0x20; buf1=k/; if(buf1=10|k-99999) /最高位大于,显示错误 P2=0x01; r=0x01; P1=0x79; r=(r1); P2=r; P1=0X3f; r=(r1); P2=r; P1=0X3f; r=(r1); P2=r; P1=0X3f; r=(r1); P2=r; P1=0x06; else if(k=-99999) /显示负数 P1=0x00; P2=0xff; P2=0x01; P1=0x40; P2=0x20; k=-k; while(k0) buf2=k%10; P1=zixingbuf2; for(i=0;i1); P2=r; P1=0x00; else P1=0x00; P2=0xff; P2=0x20;while(k0) /由个位开始显示数值 buf2=k%10; P1=zixingbuf2; for(i=0;i1); P2=r; P1=0x00;/移位后会再送数,所以要置 k赋值要显示的数2、程序流程图判断是否超出显示范围 N判断是否为负数 Y显示错误 Y N从低位开始显示显示负号,并对k取反从低位开始显示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 众数教学课件
- 感谢孩子活动方案
- 开工红包福利活动方案
- 情侣促进感情活动方案
- 房地产诗词活动方案
- 长春科技学院《金属工艺学》2023-2024学年第一学期期末试卷
- 四川工商学院《环境微生物工程》2023-2024学年第一学期期末试卷
- 枣庄科技职业学院《电影布光技巧》2023-2024学年第一学期期末试卷
- 广东肇庆航空职业学院《植物生物学综合实验技术》2023-2024学年第一学期期末试卷
- 四川省成都市青羊区部分学校2024-2025学年数学七上期末学业质量监测模拟试题含解析
- 2025年新疆维吾尔自治区中考历史真题(解析版)
- 2025至2030中国新能源行业市场发展分析及前景趋势与对策战略报告
- 空压机考试题及答案
- 中国再生水行业发展分析与发展趋势预测研究报告2025-2028版
- 荆州中学2024-2025学年高二下学期6月月考历史试卷
- 2025-2030年中国婚庆产业行业市场现状供需分析及投资评估规划分析研究报告
- 2025至2030年中国直驱电机行业发展策略分析及投资前景研究报告
- 2024-2025学年苏教版四年级下学期期末测试数学试卷(含答案)
- 2025年新高考2卷(新课标Ⅱ卷)英语试卷
- 2025年中考化学必考要点知识归纳
- 2024年湖北省初中学业水平考试地理试卷含答案
评论
0/150
提交评论