单片机C语言简易计算器.doc

单片机C语言简易计算器.doc

ID:55128429

大小:71.50 KB

页数:14页

时间:2020-04-28

单片机C语言简易计算器.doc_第1页
单片机C语言简易计算器.doc_第2页
单片机C语言简易计算器.doc_第3页
单片机C语言简易计算器.doc_第4页
单片机C语言简易计算器.doc_第5页
资源描述:

《单片机C语言简易计算器.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、课程设计报告课程名称单片机原理及应用设计题目简易计算器设计专业班级姓名学号1.项目概述中国古代最早采用的一种计算工具叫算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可以随身携带。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘除,乘方,开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为

2、现代社会应用广泛的计算工具。2.项目要求基于AT89C51单片机的简易计算器,设计要求如下:(1)计算器至少能正常显示8位数。(2)开机时,显示“0”(3)计算器能对整数进行简单的加减乘除四则运算,在做除法时能自动舍去小数部分(4)运算结果超过可显示的位数时能进行出错提示。3.小组人员组成及分工项目组成员完成课程设计的内容主函数设计利用中断持续间时显示按键扫描录入函数计算器加减乘除四则运算4.系统设计八位七段数码管1.框图设计显示AT89C51按键录入模块(0-9+-*/=c)录入5.硬件设计(

3、1)电路原理图:(2)元件清单:元件名称型号数量用途单片机AT89C511控制核心电阻10kΩ4按键电路数码管8位共阳极1显示电路按键16按键电路6.软件设计(1)算法流程图:开始主函数结束调用运算程序录入数值判断符号录入数值中断结束定时器赋初值送显示数据关中断中断开始显示函数按键函数运算查值赋值给变量列扫描行扫描(2)程序清单:#include/***按键程序***/charkeyscan();/***显示程序***/voiddisplay();chardsp[9]={0,0

4、,12,12,12,12,12,12,12};//初始化显示数组/***计算程序***/voidcalculate(chark,charc1[8],charc2[8]);/***片选***/unsignedcharcodeSelect[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};/***码选***/unsignedcharcodeLED_CODES[]={0xC0,0xF9,0xA4,0xB0,0x99,//0-40x92,0x82,0xF8,0x80

5、,0x90,//5-90x86,0xAF,0xFF,0x7F,0xBF,};//E,r,空格,.,-/***main函数***/voidmain(void){chari,j,k,c;chara[8],b[8];/***定时1ms***/TMOD=0;//TL0=-(1000/256);//TH0=-(1000%256);EA=1;//总中断开关ET0=1;//开中断TR0=1;//启用计数器0LR:do{for(i=1;i<9;i++)//数字录入循环{dsp[0]=keyscan();if(c

6、==2&&dsp[0]<10)//此段代码验证是否有旧的计算结果在显示,且不再参与新计算{dsp[1]=dsp[0];for(j=2;j<9;j++)dsp[j]=12;c=0;}elseif(c==2&&dsp[0]>9)//旧的计算结果将参与新的计算,作为第一个数{c=0;}if(dsp[0]==0&&dsp[1]==0&&dsp[2]==12)//个位为0且十位为空时按下0,按键无效,跳回LR等待正确输入{/***goto跳转标志***/gotoLR;}elseif(dsp[0]>9)br

7、eak;//有操作符按下,跳出数字录入循环else{for(j=i;j>0;j--)dsp[j]=dsp[j-1];//移位,以正确显示数字}}if(i==9)//判断是否输入8个有效数字,是则等待操作符,否则直接判断操作符{do//使用dowhile无论是否第一个数都取一次操作符{dsp[0]=keyscan();//获取操作符号if(dsp[0]==14

8、

9、dsp[0]<10)//按下C或者第9位数字清零{dsp[1]=0;for(i=2;i<9;i++)dsp[i]=12;c=0;}}wh

10、ile((dsp[0]==15)&&(c==0));//等号被按下,等待新的操作符(仅对第一个数字有效)}elseif(dsp[0]==14)//按下C清零{dsp[1]=0;for(i=2;i<9;i++)dsp[i]=12;c=0;}while(dsp[0]==15&&c==0)//未输满8位且是第一个数字即按下等号,等待非等号操作符{dsp[0]=keyscan();//获取操作符号if(dsp[0]==14

11、

12、dsp[0]<10)//按下C或者数字都进行清零,重新输入a{dsp[0]=1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。