还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
华北水利水电学院课程设计报告课程名称:简易计算器姓名:学号:班级:专业:电子信息工程日期:2010年1月21日目录
1.前言············································
32.课程设计目的和要求······························
33.总体设计········································
34.硬件设计········································
45.软件设计········································
56.操作说明········································
97.设计感想········································
98.____········································10一.前言单片机课程设计是单片机原理课程的实践性环节是在我们学习了《单片机原理》等课程的基础上进行的综合性训练,我们组这次训练的课题是基于单片机简易计算器此次课程设计的课题是针对我们学习《单片机原理》这门课程的基础上,并在其辅助下完成的此次进行的综合性训练,不仅培养了我如何合理运用课本中所学到的理论知识与实践紧密结合,__解决实际问题的能力二.课程设计的目的和要求
1.课程设计的目的首先,综合运用单片机原理与接口技术课程中所学到的理论知识来__完成此次设计课题,培养我们查阅手册和文献资料的良好习惯,以及培养我们__分析和解决实际问题的能力其次,在学习了理论知识的基础上进一步熟悉常用电子器件的类型和特征,并掌握合理选用的原则再次,就是学会电子电路的__与调试技能,以及与同组的组员的团结合作的精神
2.课程设计要求利用__c51作为主控器组成一个四则运算的计算器三.总体设计
1.基本工作原理本设计利用AT__C51单片机来控制液晶显示器和矩阵式键盘,实现了简易的计算器功能通过键盘输入需要计算的计算式子,该式子会显示在液晶的第一行,当键入等于号后,计算结果会显示在液晶的第二行本设计中液晶选用1602字符型液晶显示器,显示参与运算的数字以及最终的运算结果,键盘采用4*4矩阵式键盘
2.系统组成单元__处理单元CPU选用AT89C—51对整个系统进行控制它将数据输出到显示屏,实现键入、输出的显示;根据键盘输入调用相应键处理子程序,实现数据的计算;单片机的管脚如下所述AT89C51的管脚分布如下 VCC供电电压 GND接地P0口P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流 P1口P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流P2口P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流P3口P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流 RST复位输入当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间 ALE/PROG当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节 /PSEN外部程序存储器的选通__在由外部程序存储器取指期间,每个机器周期两次/PSEN有效但在访问外部数据存储器时,这两次有效的/PSEN__将不出现/EA/VPP当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器XTAL1反向振荡放大器的输入及内部时钟工作电路的输入 XTAL2来自反向振荡器的输出电源电路部分在各种电子设备中,直流稳压电源是必不可少的组成部分,它是电子设备唯一能量来源,它的设计思路是根据我们以前学过的模电电子技术,要想得到我们所要的+6V输出电压,就需将交流220V的电压经过变压器、整流电路、滤波电路和稳压电路四个部分LCD输出显示部分1602采用标准的16脚接口,其管脚功能介绍如下 1VSS为电源地 2VDD接5V电源正极3V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高 4RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器 5RW为读写__线,高电平1时进行读操作,低电平0时进行写操作 6E或EN端为使能enable端 7~14D0~D7为8位双向数据端 15~16空脚或背灯电源15脚背光正极,16脚背光负极四.硬件设计键盘输入部分矩阵式键盘由行线和列线组成,按键位于行和列的交叉点上,很明显,在所需按键数量较多时能节省很多的I/O口如图所示为简易计算器的电路原理图简易计算器电路原理图系统选用的主要元器件有单片机AT__C51LCD显示器1602,按钮开关SW-PB排阻(9管脚,1k)电阻、电容、晶振、发光二极管等若干五.软件设计该计算器系统的软件设计分为以下几个模块1主程序模块,2键盘扫描及识别子程序,3显示子程序,4计算程序主程序流程图如下总程序框图如下总程序如下can//键盘扫描程序{P3=0xfe;ifP3!=0xfe{delay20;延迟20msifP3!=0xfe {temp=P30xf0; switchtemp {case0xe0:num=0;break; case0xd0:num=1;break; case0xb0:num=2;break; case0x70:num=3;break; } } whileP3!=0xfe; ifnum==0||num==1||num==2//如果按下的是78或9 {ifj!=0 {write_com0x01;j=0; } ifflag==0//没有按过符号键 {a=a*10+table[num]; } else//如果按过符号键 {b=b*10+table[num]; } }else//如果按下的是/ {flag=1;fuhao=4;//4表示除号已按 } i=table1[num];write_date0x30+i;}P3=0xfd;ifP3!=0xfd{delay5;ifP3!=0xfd {temp=P30xf0;switchtemp {case0xe0:num=4;break; case0xd0:num=5;break; case0xb0:num=6;break; case0x70:num=7; break; } } whileP3!=0xfd; ifnum==4||num==5||num==6num!=7//如果按下的是45或6 {ifj!=0 {write_com0x01;j=0; }ifflag==0//没有按过符号键 {a=a*10+table[num]; } else//如果按过符号键 {b=b*10+table[num]; } } else//如果按下的是/ {flag=1;fuhao=3;//3表示乘号已按 } i=table1[num];write_date0x30+i;}P3=0xfb;ifP3!=0xfb{delay5; ifP3!=0xfb {temp=P30xf0;switchtemp {case0xe0:num=8;break; case0xd0:num=9;break; case0xb0:num=10; break; case0x70:num=11;break; } } whileP3!=0xfb; ifnum==8||num==9||num==10//如果按下的是12或3 {ifj!=0 {write_com0x01;j=0; } ifflag==0//没有按过符号键 {a=a*10+table[num]; } else//如果按过符号键 {b=b*10+table[num]; } } elseifnum==11//如果按下的是- {flag=1;fuhao=2;//2表示减号已按 } i=table1[num];write_date0x30+i;}P3=0xf7;ifP3!=0xf7{ delay5;ifP3!=0xf7 {temp=P30xf0; switchtemp {case0xe0:num=12;break; case0xd0:num=13;break; case0xb0:num=14;break; case0x70:num=15;break; } } whileP3!=0xf7;switchnum {case12:{write_com0x01;a=0;b=0;flag=0;fuhao=0;}//按下的是清零 break;case13:{ //按下的是0 ifflag==0//没有按过符号键 {a=a*10;write_date0x30;P1=0; } elseifflag==1//如果按过符号键 {b=b*10;write_date0x30; } }break; case14:{j=1; iffuhao==1{write_com0x80+0x4f;//按下等于键,光标前进至第二行最后一个显示处 write_com0x04; //设置从后住前写数据,每写完一个数据,光标后退一格 c=a+b; whilec!=0 {write_date0x30+c%10;c=c/10; } write_date0x3d; //再写= a=0;b=0;flag=0;fuhao=0; } elseiffuhao==2{write_com0x80+0x4f;//光标前进至第二行最后一个显示处 write_com0x04; //设置从后住前写数据,每写完一个数据,光标后退一格这个照理说顺序不对,可显示和上段一样 ifa-b0c=a-b;else c=b-a; whilec!=0 {write_date0x30+c%10;c=c/10; } ifa-b0 write_date0x2d; write_date0x3d; //再写= a=0;b=0;flag=0;fuhao=0; } elseiffuhao==3{write_com0x80+0x4f; write_com0x04;c=a*b; whilec!=0 {write_date0x30+c%10;c=c/10; } write_date0x3d; a=0;b=0;flag=0;fuhao=0; } elseiffuhao==4{write_com0x80+0x4f; write_com0x04;i=0; c=longfloata/b*1000; whilec!=0 {write_date0x30+c%10; c=c/10;i++; ifi==3write_date0x2e; } ifa/b=0write_date0x30; write_date0x3d; a=0;b=0;flag=0;fuhao=0; } } break; case15:{write_date0x30+table1[num];flag=1;fuhao=1;}break; }}}__in{init;while1{keyscan;}}六.操作说明用软件对程序进行编译,当出现下图所示情况时,说明编译成功,然后将程序直接下进单片机内,设计完成七.设计感想我们在该设计还有待改进的地方,输出显示的位数确定不变,对某些运算可能带来一定的误差,由于程序原因没有设置括号和小数点等,运算起来受到限制!还有很大的空间去提升课程设计中所涉及的知识点比较多,程序编写比较困难,花了大量的时间但通过小组成员的共同努力,成功的实现了该课题的制作,从中也受益匪浅,体会到了程序编写的基本流程和规范问题,要有一个好的编程习惯另外程序的编写是一个不断调试的过程,掌握任何一种调试技巧非常重要,包括伟福、KEIL或者仿真器,可以非常直观的帮助调试程序八.____【1】__刚单片机原理及应用高等教育出版社【2】__刚MCS-51单片机应用设计哈张尔滨工业大学出版社【3】__单片机器件应用手册人民邮电出版社。