单片机课程设计报告-设计十进制加减乘法计算器

上传人:aa****6 文档编号:29986111 上传时间:2018-01-26 格式:DOC 页数:30 大小:63KB
返回 下载 相关 举报
单片机课程设计报告-设计十进制加减乘法计算器_第1页
第1页 / 共30页
单片机课程设计报告-设计十进制加减乘法计算器_第2页
第2页 / 共30页
单片机课程设计报告-设计十进制加减乘法计算器_第3页
第3页 / 共30页
单片机课程设计报告-设计十进制加减乘法计算器_第4页
第4页 / 共30页
单片机课程设计报告-设计十进制加减乘法计算器_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《单片机课程设计报告-设计十进制加减乘法计算器》由会员分享,可在线阅读,更多相关《单片机课程设计报告-设计十进制加减乘法计算器(30页珍藏版)》请在金锄头文库上搜索。

1、 任务书一 课程设计题目及任务要求设计十进制加减乘法计算器,要求能显示三位输入和四位输出。二 设计思路1.操作显示设备显示设备采用八片七段共阴极 LED 显示器,共设置 16 个键,其中数字键 0-9 共十个,接下来依次是加号键,减号键,乘号键,除号键,清除键,操作设备是 4*4 的矩阵键盘。 2程序实现功能(1)十进制加减乘除计算:输入范围为 1-999,改程序输入两个定点数,每个 3 位,输出四位,A 为加, B 为减,C 为等于,输出为四位计算结果。(2)计算机复位功能:DEC 均为清零重启,任何时候按下DEC 中一个将重新开始。绪论 现时学习或生活中,常会遇到一些数目较大数据,繁杂的数

2、据运算,徒手运算起来很困难,这时候我们就必须用到计算器。人们对计算器的要求不断提高,现在,已经有一些功能较为强大,涵盖面较广的计算软件,而且各种平台的小工具仍不断出现,这些大大方便了我们的生活给我们更多的悬着和实现方式,本程序实现了加,减,乘,除的功能,但是,每次只能运算一个表达式,按DEC 清空后再计算下一组式子。 方案论证方案一:采用计算器专用芯片实现。用计算器专用芯片进行设计并编程实现。这种设计方案计算效率高、速度快、而且成本也相对较低,是厂家做计算器的最佳方案。但是本人对计算器专用芯片掌握的不够,还不足以实现设计计算器,所以这个方案不可去。方案二:用单片机实现。由于单片机集成了运算器电

3、路、控制电路、存储器、中断系统、定时器/计数器以及输入/ 输出口电路等,所以用单片机设计控制电路省去了很多分立元器件。由于单片机是可编程芯片,并且它可以运用 C 语言编写,对于一些复杂的计算功能,可以调用 C 语言库函数。使编写程序变得非常简单。所以该课题用单片机实现,不仅功能易于实现,而且精确度高,稳定性好,抗干扰能力强。并且由于其成本低、体积小、技术成熟和功耗小等优点,且技术比较成熟。性价比也相当高。更重要的是本人经过几年的学习,对单片机已有深刻的理解,并且可以灵活运用。方案说明按照系统设计的功能的要求,初步确定设计系统由主控模块、显示模块、错误报警模块、键扫描接口电路共四个模块组成,电路

4、系统构成框图如图 1.1 所示。主控芯片使用 51 系列 AT89C52单片机,采用高性能的静态 80C51 设计,由先进工艺制造,并带有非易失性 Flash 程序存储器。它是一种高性能、低功耗的 8 位COMS 微处理芯片,市场应用最多。键盘电路采用 4*4 矩阵键盘电路。显示模块采用 2 枚四位一体共阴极数码管和 74ls273 锁存芯片构成等器件构成。系统硬件设计1单片机最小系统单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。主控芯片选取 STC89C52RC 芯片,因其具有良好的性能及稳定性,价格便宜应用方便。晶振选取 11.0592MHz,晶振旁

5、电容选取 30pF。采用按键复位电路,电阻分别选取 100 和 10K,电容选取10F 。.2 键盘接口电路计算器所需按键有:数字键:1,2,3,4,5,6,7,8,9,0功能键:+, - , *, / , = , C( 清零)共计 16 个按键,采用 4*4 矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的 8 个公共端分别接 P3.0P3.7,这样扫描P1 口就可以完成对矩阵键盘的扫描,通过对 16 个按键进行编码,从而得到键盘的口地址,对比 P3 口德扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘的功能。.3 数码管显示电路采用 4 位数码管对计算数据和结果的显示

6、,这里选取共阳数码管,利用 NPN 三极管对数码管进行驱动,为了节省 I/O 资源,采取动态显示的方法来显示计算数据及结果。利用 74273 锁存器来实现数码管的动态显示,P0 口输出显示值,P2.4 为段选口,控制 273 锁存器的时钟引脚,从而得到对数码管输入数据的控制。P2.0P2.3 用来作为位选端,控制哪几位数码管进行显示。系统软件设计要进行数据的计算就必须先进行数据的输入,也就必须确定按键输入的数值是什么,这就需要对键盘进行扫描,从而确定究竟是哪个键按下。以下为键盘扫描子程序的程序清单void dujian()uchar i=0,temp;P3=0xf0;if(P3!=0xf0)d

7、elay(10);if(P3!=0xf0)temp=0xfe; for(i=0;i=10)flag=2;num20=jieguo/10;num21=jieguo%10;if(jieguo=100)flag=3;num20=jieguo/100;num21=jieguo%100/10;num22=jieguo%100%10;if(jieguo=1000)flag=4;num20=jieguo/1000; num21=jieguo%1000/100;num22=jieguo%1000%100/10;num23=jieguo%1000%100%10;if(jieguo=10000)flag=5;nu

8、m20=jieguo/10000;num21=jieguo%10000/1000;num22=jieguo%10000%1000/100;num23=jieguo%10000%1000%100/10;num24=jieguo%10000%1000%100%10;if(jieguo=)flag=6;num20=jieguo/;num21=jieguo%/10000;num22=jieguo%10000/1000;num23=jieguo%10000%1000/100;num24=jieguo%10000%1000%100/10;num25=jieguo%10000%1000%100%10; j=

9、0;break;case 15: flag=0;flag_wei=-1;shu1=0;shu2=0;jieguo=0;j=0; break;default : break;flag_wei+;if(flag_wei3)flag_wei=3;if(k=14)flag_wei=flag;P3=0xf0; while(P3!=0xf0); 以下为显示程序设计void T_() interrupt 1TH0=-3000/256;TL0=-3000%256;if(j=flag_wei)j=0;if(flag_wei=0) P1=0xfe;P2=zixing0;elseP1=zimaj;P2=zixing

10、num2j;j+;调试在焊接好器件后,先不要将芯片插在芯片座上,要先验证先板上电源是否好用,有无短路等。接上 USB 电源,用万用表测量个芯片座对应电源和地之间的电压值,观察电压值是否正常。一切正常后方可将芯片插入芯片座,以继续测试其他功能。将芯片插上后,对各个模块进行调试,按键是否工作正常,数码管是否显示正常等。编写相关部分的测试程序对其进行测试。各部分硬件检测无误后,下载程序进行整体调试,一切正常后,结束调试过程。技术小结这次做课程设计感觉自己挺没经验的,又做了不少乌龙事件,写程序和做仿真的时候用的是共阳极的数码管,后来买元器件的时候,粗心大意买了两个四位一体共阴极的数码管,没办法,只得重

11、新修改程序和仿真,按照自己的想法修改好之后,程序就是无法编译,老是看见 target not created 这几个单词,纠结了两天,后来想到到百度上查一下原因,大致上是因为我使用的 keil 没有破解成功,最后我把自己的 keil 给卸载了,安装了 keil2,才编译成功。自认为用了十分的心思把实物焊接好之后,以为能一次成功的,哪知道数码管就是不亮,真是急人,后来在老师的建议下分模块检查,先写了一个很简单的程序进 51 芯片,发现芯片根本没工作,怀疑是晶振的问题,把晶振拆了下来,发现晶振根本没有问题,最后,经同学提醒说可能是短路了,那万用表检查发现真的是短路了,正负电源不下心焊短路了,自己又

12、修整了一番,接上电源,下载好程序,结果就出来了。这次课程设计,有一个很大的失误,焊接数码管的时候没想过用排针插,结果将其中的一个数码管的两个段选给焊烧了,很遗憾啊,不是很完美。参考文献(1)谭浩强 C 程序设计 清华大学出版社(2)戴佳 51 单片机 C 语言应用程序设计实例精讲 电子工业出版社(3) 李陪金 C 语言程序设计案例教程 西安电子科技大学出版社(4) 郭天祥 51 单片机 C 语言教程 电子工业出版社附录 完整的程序#include #include #define uchar unsigned char /宏定义#define uint unsigned int#define

13、ulong unsigned longuchar k=20,j=0; / k 是键号,j 用于数码管显示时uint shu1=0,shu2=0;ulong jieguo=0;char flag_wei=0; /输入位数标志uchar flag_fuhao=0,flag=0; / flag_fuhao 是运算标志; flag 是运算结果位数uchar num28=0; /存输入数据二uchar code zixing=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/段选uchar c

14、ode zima=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/位选void delay(uchar t)/延时函数uchar i,jj;for(i=0;i=10)flag=2;/结果为两位num20=jieguo/10;num21=jieguo%10;if(jieguo=100)flag=3;/结果为三位num20=jieguo/100;num21=jieguo%100/10;num22=jieguo%100%10;if(jieguo=1000)flag=4;/结果为四位num20=jieguo/1000;num21=jieguo%1000/100;num

15、22=jieguo%1000%100/10;num23=jieguo%1000%100%10; if(jieguo=10000)flag=5;/结果为五位num20=jieguo/10000;num21=jieguo%10000/1000;num22=jieguo%10000%1000/100;num23=jieguo%10000%1000%100/10;num24=jieguo%10000%1000%100%10;if(jieguo=)flag=6;/结果为六位num20=jieguo/;num21=jieguo%/10000;num22=jieguo%10000/1000;num23=jieguo%10000%1000/100;num24=jieguo%10000%1000%100/10;num25=jieguo%10000%1000%100%10;j=0; /显示要从第一个数码管开始break

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

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

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