资源描述:
《单片机计算器程序设计报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、长沙民政职业技术学院课程设计报告课题名称:51单片机的计算器设计课程:单片机技术及应用专业:应用电子技术学生姓名周扬孔计张娇陈实学号17151419班级0733073307330733指导老师方跃春老师应用电子技术教研室2009年9月2日一、课题任务及要求要求:1、掌握数码管移位动态扫描显示的编程方法2、掌握矩阵扫描的编程方法3、掌握数据在内部运算的编程方法任务:1、实现最大6位正整数加、减、乘、除2、具备清零、等于功能3、16个按键功能依次为:数字0、数字1、数字2、数字3、数字4、数字5、数字6、
2、数字7、数字8、数字9、清零、等于、加、减、乘、除二、硬件设计1.原理图2.原理分析该设计通过89C51芯片控制6个一位数码管显示,并实时检测按键按下情况来实现计算器功能,16个按键有10个为数字按键其他6个分别为加、减、乘、除、复位、等于电路接上电源后数码管显示个位显示数字0,芯片对按键进行实时扫描,通过矩阵键盘进行计算,特别注意的是,当结果为负数时,数码管显现EORR。(一)、硬件部分1、数码管为一位共阴数码管,共6个;故在段码输出口外加NPN型三极管作驱动2、51芯片P1口接键盘端(矩阵按键)、
3、P3口接段码、P2口的P2_0—P2_5接位码3、按键为四乘四矩阵,共16个键(二)、软件部分1、数码管移位显示的实现是通过标志位wei2的数值变化控制dispiay函数显示位来实现的2、程序的重要算法是通过类型为unsignedint的数temp和数组str[]实现整体加减乘除、各位显示的只要弄懂这一算法,此程序就可轻易掌握1.PCB图略。2.元件清单及造价预算按键20个单价0.2元总计4元万用板2块单价4元总计8元一位共阴数码管6个单价2元总计2元三极管7个单价0.2元总计1.4元1K电阻20个单
4、价0.01元总计2毛排插及排线5对单价1元总计5元电容3个单价0.2元总计6毛晶振1个单价1元总计1元8051芯片1个单价6元总计6元费用总计26.2元5.实物照片三、程序设计头程序str[6]=str[5]=str[4]=str[3]=str[2]=str[1]=10;str1[6]=str1[5]=str1[4]=str1[3]=str1[2]=str#include//51单片机基本定义头文件#include//循环位移头文件#defineucharuns
5、ignedchar//宏定义#defineuintunsignedintsbitP1_4=P1^4;//IO端口定义(矩阵扫描后4位端口)sbitP1_5=P1^5;sbitP1_6=P1^6;sbitP1_7=P1^7;uchari,num,s;//全局变量定义ucharwei,wei2,ss,ss1,ss2,str1[]={0,0,0,0,0,0,0};longtemp,temp1,str[]={10,10,10,10,10,10,10};ucharcodedutable[]={//段位编码0xc
6、0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharcodewetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};voidinit();//函数声明voidpanduan();voiddisplay();voiddelay(uintz);voidshaomiao();voidmain()//主函数{init();//调用变量初始化函数while(1)//大循环
7、{shaomiao();//调用矩阵扫描加处理函数display();//调用显示函数}}voidinit()//变量初始化函数{ss2=0;wei2=1;temp1=0;ss=0;ss1=0;temp=0;wei=0;num=0;}voiddelay(uintz)//延时函数(单位ms){uchari;uintj;for(j=z;j>0;j--)for(i=114;i>0;i--);}voidshaomiao()//扫描加处理函数{for(i=0,s=0xfe;i<4;i++)//低四位端口依次赋值
8、1{P1=s;//对P1口赋值panduan();//调用判断处理函数s=_crol_(s,1);//s循环位左移s=s
9、0xf0;//进行位或运算}(使高4位复原)}voidpanduan(){ucharn;if(P1_4==0
10、
11、P1_5==0
12、
13、P1_6==0
14、
15、P1_7==0){delay(10);P1=s
16、0xf0;if(P1_4==0
17、
18、P1_5==0
19、
20、P1_6==0
21、
22、P1_7==0){if(P1_4==0){n=1;num=i*4+n-