基于单片机简易计算器的设计(编辑修改稿)内容摘要:

占用大量的 I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。 矩阵键盘采用四条 I/O 线作为行线,四条 I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。 这样键盘上按键的个数就为 4 4个。 这种行列式键盘结构能有效地提高单片机系统中 I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图 2所示:一般有 16个键组成,在单片机中正好可以用一个 P口实现 16个按键功能,这种形式在单片机系统中也最常用。 图 矩阵键盘内部电路图 第三章 主程序设计 Keil C51 是美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比, C 语言在功能上、结构性、可读性、可维护性上有明显 10 的优势,因而易学易用。 用过汇编语言后再使用 C 来开发,体会更加深刻。 Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows 界面。 另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到 Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 在开发大型软件时更能体现高级语言的优势。 下面详细介绍 Keil C51 开发系统各部分功能和使用。 Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,如图 所示,其中 uVision与 Ishell分别是 C51 for Windows和 for DOS的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。 开发人员可用 IDE 本身或其它编辑器编辑 C 或汇编源文件。 然后分别由 C51及 A51编译器编译生成目标文件 (.OBJ)。 目标文件可由 LIB51创建生成库文件,也可以与库文件一起经 L51连接定位生成绝对目标文件 (.ABS)。 ABS文件由 OH51转换成标准的Hex文件,以供调试器 dScope51或 tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如 EPROM 中。 普通计算器课程序设计 : //****************************************// //通用计算器的编写,能够实现两位的加减计算 +, , *, / //设计人:周运鸿。 指导人:皮大能 //202066 include include include include include define uchar unsigned char define uint unsigned int double num[2]。 uchar sign[2]。 uchar numble1[10]。 uchar numble2[10]。 void main() {int i=0,j=0,k=0,flag=0,a=0,b,c=0,e=0,opNum=0。 long int sum1,sum0。 double sum2。 init()。 write_(0x80)。 while(!mark) {matrixkeyscan()。 } mark=0。 11 while(expression[j]!=39。 =39。 ) { if(!In(expression[j],OP)) //如否不是运算符就入操作数栈 { if(opNum == 0) {opNum =expression[j] 48。 ++j。 if(In(expression[j],OP)) flag = 1。 } else { opNum = opNum * 10 + (expression[j] 48)。 ++j。 if(In(expression[j],OP)) flag = 1。 } if(flag == 1) { num[i]=opNum。 opNum=0。 i++。 flag=0。 } } else { sign[k]=expression[j]。 ++j。 k++。 } } sum1=Operator( num[0],sign[0], num[1])。 sum2=Operator( num[0],sign[0], num[1])。 sum0=sum1。 while(sum1!=0) { numble1[a]=sum1%10+48。 sum1=sum1/10。 a++。 } b=strlen(numble1)。 write_(0x80+0x40)。 for(c=b1。 c=0。 c) {write_data(numble1[c])。 delayms(10)。 } 12 write_data(39。 .39。 )。 sum2=sum2*1000。 sum0=sum2sum0*1000。 numble2[0]=sum0/100+48。 numble2[2]=sum0%10+48。 numble2[1]=(sum0/10)%10+48。 if(numble2[2]=(5+48)) numble2[1]=numble2[1]+1。 write_data(numble2[0])。 delayms(5)。 write_data(numble2[1])。 delayms(5)。 while(1)。 } //************************** //键盘扫描程序驱动 //文件名: //****************。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。