嵌入式实验报告简易计算器

上传人:碎****木 文档编号:229367578 上传时间:2021-12-25 格式:DOCX 页数:16 大小:653.79KB
返回 下载 相关 举报
嵌入式实验报告简易计算器_第1页
第1页 / 共16页
嵌入式实验报告简易计算器_第2页
第2页 / 共16页
嵌入式实验报告简易计算器_第3页
第3页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《嵌入式实验报告简易计算器》由会员分享,可在线阅读,更多相关《嵌入式实验报告简易计算器(16页珍藏版)》请在金锄头文库上搜索。

1、 目的及要求1 实验目的依照计算器的原理设计一个拥有加减乘除功能的简单计算器。2 实验要求(1) )数字和结果用数码管显示。(2) )数字、 */ 、 C 用 4X4 键盘实现。(3) )计算结果正确,有出错提示。二 实验原理框图输入数据分别进行四则运算选择输出N有符号键 ?显示输入数据Y显示输出运算值 9999999?NY报警信号显示输出为 -1 / 14基本工作原理:本设计利用数码管和 4*4 矩阵式键盘实现了简单计算器的功能。接通电源,数码管显示全 0。计算时,经过键盘输入需要计算的数字,该数字显示在数码管上,当键入等号时,计算结果显示在数码管上。进行第二次运算时,按 C 键除去键盘结果

2、。当计算出现错误时, LED 灯亮报警。当计算结果高出数码管显示出现溢出时,报警电路也会报警。报警输出为- 。四 系统软件设计1. 数据输入模块原理:经过 4*4 矩阵模块输入数字,在数码管上显示出来。2. 运算模块原理:四种运算同步运行,经过按键加、减、乘、除选择输出对应的计算结果,当按键等号时,将所得结果反响给运算模块输入端。3. 输出模块原理:经过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果, 否则显示当前输入的数据。 当输出结果溢出是 LED 亮四次,同时数码管显示都为 - 。五 实验调试第一按清零键清零。尔后进行调试。输入数据 2,再按乘法键,输入第二个数字 6

3、,按等号键,数码管显示 12 ;再按除法键,输入第二个数据 3,按等号键,数码管显示 4;再按加法键,输入第三个数据 7,依次按等号键,数码管显示 11 ;按减法键,输入第四个数据 99 ,依次按等号键,数码管显示 -88 。若输入高出显示管的最大值也许高出数码管的位数, 结果溢出,LED 亮报警,同时数码管显示都为 - 。如 输入 999999加上 2 ,结果就溢出, LED 灯亮四次报警。六 程序#include LPC2468.h/* LPC24xx definitions */#include type.h #include irq.h #include target.h #inclu

4、de timer.h#include fio.h12 / 14#include keyboard.h #include SPI.hextern BYTE seg_buf50;/ LPC2468开发板使用此数组的 05 显示六个数码管; LPC2478 板使用 16 BYTE seg_copy17;BYTE seg_copy27;unsigned long Num1 =0;/*第一个输入的数字 */unsigned long Num2 =0;/* unsigned long Num3 =0;/*第二个输入的数字 */第二个输入的数字 */extern BYTE KEY;/ LPC2468 LPC

5、2478 板使用 16enum Add =1, Dec, Mut, Div, nofuntionfuntion;开发板使用此数组的05 显示六个数码管;/* Main Function main()*/ int main (void)unsigned char counter = 0;/*计算输入的数字的个数,高出6 个则报警,运算结果高出 6 位数也报警 */unsigned char cal_allow = 1; /*赞同输入数字标志 */ unsigned char input_allow = 1;/*赞同输入数字标志 */ unsigned char funtion_type = 0;

6、/*运算功能 */unsigned char Ne_num = 0;/* DWORD value=0,i=0; TargetResetInit(); enable_timer(1); SPI_Init(8);/Seg_Init();/LedsInit(); for(i=0;i0 & value11)if(counter 6&input_allow=1)if(counter = 0) seg_buf1 = value-1; elsefor(i=0;icounter;i+)seg_bufcounter+1-i = seg_bufcounter-i;seg_buf1 = value-1;counte

7、r+;if(counter = 6)input_allow = 0; LedOn(1);LedOn(2);LedOn(3);LedOn(4);/*若是是“ C”键,则除去显示,除去计算标志 */if(value = 11)for(i=0;i7;i+)seg_copy1i=0; seg_copy2i=0; seg_bufi=0;counter = 0;Num1 = 0;Num2 = 0;Num3 = 0;cal_allow= 1;input_allow = 1;Ne_num = 0;/*负数标志 */funtion_type = nofuntion;/*若是是“ +”键,则显示结果 */ if(

8、value = 13 )if(cal_allow = 1)for(i=0;i7;i+)字 */seg_copy1i = seg_bufi;/*备份第一次输入的数字 */seg_bufi=0;/*显示清零以准备第二次输入数funtion_type = Add; counter = 0;/*计数器清零赞同第二次计数 */cal_allow =1;/*input_allow = 1;/*再等号按下前不能够再按第二 */次赞同第二次输入数据 */elseinput_allow = 0;/*禁止按下 2 次功能键时候输入数据 */*若是是“ - ”键,则显示结果 */if(value = 14& cal

9、_allow = 1)if(cal_allow = 1)for(i=0;i7;i+)字 */seg_copy1i = seg_bufi;/*备份第一次输入的数字 */seg_bufi=0;/*显示清零以准备第二次输入数funtion_type = Dec; counter = 0;/*计数器清零赞同第二次计数 */cal_allow =1;/*input_allow = 1;/*再等号按下前不能够再按第二 */次赞同第二次输入数据 */elseinput_allow = 0;/*禁止按下 2 次功能键时候输入数据 */*若是是“ X”键,则显示结果 */ if(value = 15 & cal

10、_allow = 1)if(cal_allow = 1)for(i=0;i7;i+)字 */seg_copy1i = seg_bufi;/*备份第一次输入的数字 */seg_bufi=0;/*显示清零以准备第二次输入数funtion_type = Mut; counter = 0;/*计数器清零赞同第二次计数 */cal_allow =1;/*input_allow = 1;/*再等号按下前不能够再按第二 */次赞同第二次输入数据 */elseinput_allow = 0;/*禁止按下 2 次功能键时候输入数据 */*若是是“ / ”键,则显示结果 */ if(value = 16 & ca

11、l_allow = 1)if(cal_allow = 1)for(i=0;i7;i+)字 */seg_copy1i = seg_bufi;/*备份第一次输入的数字 */seg_bufi=0;/*显示清零以准备第二次输入数funtion_type = Div; counter = 0;/*计数器清零赞同第二次计数 */cal_allow =1;/*再等号按下前不能够再按第二 */次input_allow = 1;/*赞同第二次输入数据 */elseinput_allow = 0;/*禁止按下 2 次功能键时候输入数据 */*若是是“ =”键,则除去显示,除去计算标志 */if(value = 12)for(i=0;i7;i+)seg_copy2i = seg_bufi;/*拷贝第二次输入的数字 */*把输入的数字串 1 合成运算数字 */Num1 = seg_copy16*100000+seg_copy15*10000+ seg_copy14*1000 +seg_copy13*100+ seg_copy12*10 +seg_copy11;/*把输入的数字串 2 合成运算数字 */ Num2 = seg_copy26*100000+seg_copy25*10000+seg_copy24*1000 +seg_copy23*100+ seg_copy22*10 +seg_copy2

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

最新文档


当前位置:首页 > 行业资料 > 教育/培训

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