单片机C语言简易计算器

上传人:fe****16 文档编号:131862965 上传时间:2020-05-10 格式:DOC 页数:14 大小:72KB
返回 下载 相关 举报
单片机C语言简易计算器_第1页
第1页 / 共14页
单片机C语言简易计算器_第2页
第2页 / 共14页
单片机C语言简易计算器_第3页
第3页 / 共14页
单片机C语言简易计算器_第4页
第4页 / 共14页
单片机C语言简易计算器_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《单片机C语言简易计算器》由会员分享,可在线阅读,更多相关《单片机C语言简易计算器(14页珍藏版)》请在金锄头文库上搜索。

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

2、要求如下:(1) 计算器至少能正常显示8位数。(2) 开机时,显示“0”(3) 计算器能对整数进行简单的加减乘除四则运算,在做除法时能自动舍去小数部分(4) 运算结果超过可显示的位数时能进行出错提示。3.小组人员组成及分工项目组成员完成课程设计的内容主函数设计 利用中断持续间时显示按键扫描录入函数计算器加减乘除四则运算4.系统设计八位七段数码管1.框图设计 显示AT89C51按键录入模块(0-9 +-*/=c) 录入5.硬件设计(1)电路原理图:(2)元件清单:元件名称型号数量用途单片机AT89C511控制核心电阻10k4按键电路数码管8位共阳极1显示电路按键16按键电路6.软件设计(1)算法

3、流程图:开始主函数结束调用运算程序录入数值判断符号录入数值中断结束定时器赋初值送显示数据关中断中断开始显示函数 按键函数运算查值赋值给变量列扫描行扫描(2)程序清单:#include/*按键程序*/char keyscan();/*显示程序*/ void display();char dsp9=0,0,12,12,12,12,12,12,12; /初始化显示数组/*计算程序*/ void calculate(char k,char c18,char c28);/*片选*/unsigned char code Select=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0

4、x80;/*码选*/ unsigned char code LED_CODES=0xC0,0xF9,0xA4,0xB0,0x99, /0-40x92,0x82,0xF8,0x80,0x90, /5-90x86,0xAF,0xFF,0x7F,0xBF,; /E,r,空格,.,-/*main函数*/void main(void)char i,j,k,c;char a8,b8;/*定时1ms*/TMOD=0;/TL0=-(1000/256);/TH0=-(1000%256);EA = 1; /总中断开关ET0 = 1; /开中断TR0 = 1; /启用计数器0LR:dofor(i=1;i9;i+)

5、/数字录入循环dsp0=keyscan();if(c=2&dsp010) /此段代码验证是否有旧的计算结果在显示,且不再参与新计算dsp1=dsp0;for(j=2;j9) /旧的计算结果将参与新的计算,作为第一个数c=0;if(dsp0=0&dsp1=0&dsp2=12) /个位为0且十位为空时按下0,按键无效,跳回LR等待正确输入/*goto跳转标志*/ goto LR;else if(dsp09) break; /有操作符按下,跳出数字录入循环 elsefor(j=i;j0;j-)dspj=dspj-1; /移位,以正确显示数字 if(i=9) /判断是否输入8个有效数字,是则等待操作符

6、,否则直接判断操作符do /使用do while无论是否第一个数都取一次操作符dsp0=keyscan(); /获取操作符号if(dsp0=14|dsp010) /按下C或者第9位数字清零dsp1=0;for(i=2;i9;i+)dspi=12;c=0;while(dsp0=15)&(c=0); /等号被按下,等待新的操作符(仅对第一个数字有效)else if(dsp0=14) /按下C清零dsp1=0;for(i=2;i9;i+)dspi=12;c=0;while(dsp0=15&c=0) /未输满8位且是第一个数字即按下等号,等待非等号操作符dsp0=keyscan(); /获取操作符号i

7、f(dsp0=14|dsp010) /按下C或者数字都进行清零,重新输入adsp0=14; /将dsp0置为14,防止因数字清零未能拦截dsp1=0;for(i=2;i9;i+)dspi=12;c=0; while(dsp0=14); /数字输入未完成即按下C,重新等待输入doif(c=0) /没有数字输入 k=dsp0; /存计算符(循环内已排除C、数字)for(i=0;i8;i+) /将第一个数存入a8ai=dspi+1;dsp1=0; /清零for(i=2;i9;i+)dspi=12;c=1; /已输入a/*goto跳转标志*/goto LR;else if(c=1) for(i=0;i

8、8;i+) /将第二个数存入b8bi=dspi+1;c=2; /已输入bif(dsp0!=15) /b输完后操作符不是等号calculate(k,a,b);for(i=0;i8;i+) /将计算结果存入a8,a值更新ai=dspi+1;k=dsp0; /更新计算符c=1;/*goto跳转标志*/goto LR;while(dsp0=15)&(c2); /直到ab输入完成且按下等号calculate(k,a,b); /进行最后计算/*goto跳转标志*/goto LR; /跳回LR,等待新一轮计算while(1); /防止程序跑飞char keyscan()char KeyL;char KeyR;char j;dodoP3=0xF0;P3=P3|0xF0;/行扫描11110000 if(P3!=0xF0)KeyL=P3;P3=0x0F;P3=P3|0x0F;/列扫描00001111KeyR=P3;while(KeyL=0xF0|KeyR=0x0F);for(j=0;j0;j-) /扫描8次for(i=7;i=0;i-) /从高位到低位扫描显示P2=0;P1=LED_CODESdsp8-i;P2=Selecti;for(h=0;h8;h+);TL0=-(1000/256);TH0=-(1000%256);ET0=1; voi

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号