嵌入式计算器Word下载.docx
《嵌入式计算器Word下载.docx》由会员分享,可在线阅读,更多相关《嵌入式计算器Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
本次通过LPC2103芯片完成的简易计算器,目的是彻底理解和掌握LPC2103和C语言的汇编及仿真软件Proteus的使用。
二、原理与总体方案
主程序在初始化后调用键盘程序,再判断返回的值。
若为数字0—9,则根据按键的次数进行保存和显示处理。
若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。
程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;
若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。
最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;
若为清零键,则返回主程序的最开始。
电路设计与原理:
通过LPC2103芯片进行相应的设置来控制LED显示器。
而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而让ARM芯片接收。
2.1系统整体流程图
2.2程序运行流程图
2.3仿真电路图设计
2.4加法仿真
2+3=5
2.5减法仿真
9-6=3
2.6乘法仿真
4*6=24
2.7除法仿真
56/8=7
三、硬件设计
3.1元件清单
器件
件数
LPC2103
1个
七段数码管
KEYPAD
74HC595
2个
电阻/电容
若干
晶振
电源
电源地
电线
3.2键盘接口电路
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。
矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4×
4个。
这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
矩阵键盘的工作原理:
计算器的键盘布局如图3-1所示:
一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。
图3-1矩阵键盘布局图
电路中采用4*4键盘作为输入电路模块的话,电路连线会比较简单,而且这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
但是在硬件电路设计的过程中,实验室没有提供矩阵键盘,所以我们将4*4的矩阵键盘换成了16个独立按键。
采用独立按键的方式的话,会占用大量的I/O口资源,但是在这种情况下,编程会很简单。
图3-2矩阵键盘内部电路图
3.3显示模块:
本设计采用共阳极的七段数码管LED1显示输出数据。
通过D0-D7引脚向LED1写指令字或写数据以使LED1实现不同的功能或显示相应数据。
LED1管脚图如图3-3所示。
图3-3LED1管脚图
3.4各模块的特性与作用
3.4.1LPC2103的特性及引脚功能
LPC2013系列基于一个支持实时仿真的ARM7TDMI-SCPU,并带有8kB和32kB嵌入的高速Flash存储器。
128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行,并具有广泛应用。
含向量中断控制器,多个串行接口,两个三十二位定时器,片内晶振的操作频率范围:
10MHZ-25MHZ,两个低功耗模式:
空闲和掉电.
CPU操作电压范围:
1.65V-1.95V
图3-4LPC2103管脚图
管脚说明:
V3、V18:
供电电压
Vss、DBGSEL:
接地
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
P0.0-P0.14作为GPIO接口,P0.15作为EINT2接口。
3.4.2数字式键盘的特性
数字式键盘的实质仍是行列式键盘,4根行线和4根列线通过下拉电阻接地,在其表面贴有标示对应按键的膜,使得易于观察和操作,更加贴近使用者的需求。
3.4.3MM74C922的特性及其引脚功能:
MM74C922具有功耗低,电压为3-5V,三态门输出,与LPTTL兼容,输出锁存按下最后的键,用一个电容器就可以消除键盘抖动,两键轮回,行具有上拉功能,具有芯片内或芯片外时钟,最大开关电阻为管脚说明:
A-D为行键扫描电平输出端,1-4为列键输入读取端;
OSC为振荡器的外接引线端,可用外部的输入脉冲或电容器;
OE为数据输出端,低电平有效;
DAV为数据输出有效,高电平有效;
VCC为电源端,接3-5V;
GND为接地端。
四、部分模块程序
4.1LED显示模块
voidHc595_SendBits(unsignedintbits)
{
inti;
IO0CLR=HC595_CS;
for(i=0;
i<
12;
++i)
{
IO0CLR=HC595_CLK;
if((bits&
0x80000000))
IO0SET=HC595_DATA;
else
IO0CLR=HC595_DATA;
bits<
<
=1;
IO0SET=HC595_CLK;
}
IO0SET=HC595_CS;
}
voidShow(intx)
{
Staticunsignedcharzk[]=
{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
//共阳型段码
unsignedinti,t,bit;
4;
t=x%10;
bit=0x8<
32-4-i|zk[t]<
32-12;
//bits高4位形成位码,接下来的8位段码
Hc595_SendBits(bit);
x/=10;
Sleep();
if(x==0)break;
}
4.2矩阵模块
voidKeyScan()
inti=0,a=0;
for(i=0;
i<
=3;
i++)
switch(i)
{
case0:
IO0SET=c4;
IO0CLR=c5|c6|c7;
break;
case1:
IO0SET=c5;
IO0CLR=c4|c6|c7;
case2:
IO0SET=c6;
IO0CLR=c4|c5|c7;
case3:
IO0SET=c7;
IO0CLR=c4|c5|c6;
}
if(IO0PIN&
c0){a=i+1;
c1){a=i+5;
c2){a=i+9;
c3){a=i+13;
4.3算术运算模块
while(IO0PIN&
c0|IO0PIN&
c1|IO0PIN&
c2|IO0PIN&
c3);
switch(a)
{
case1:
x=10*x+7;
value=x;
case2:
x=10*x+8;
case3:
x=10*x+9;
case4:
y=x,b=a,x=0;
case5:
x=10*x+4;
case6:
x=10*x+5;
case7:
x=10*x+6;
case8:
case9:
x=10*x+1;
case10:
x=10*x+2;
case11:
x=10*x+3;
case12:
case13:
value=0;
y=0;
x=0;
b=0;
case14:
x=10*x+0;
case15:
switch(b)
{
case16:
y+=x;
break;
case12:
y-=x;
case8:
y*=x;
case4:
y/=x;
}
value=y,x=y;
case16:
y=x,b=a,x=0;
正确图纸
可以仿真程序
完整程序
#include<
LPC21xx.h>
#defineHC595_CS(1<
10)
#defineHC595_DATA(1<
9)
#defineHC595_CLK(1<
8)
#definec01<
#definec11<
1
#definec21<
2
#definec31<
3
#definec41<
4
#definec51<
5
#definec61<
6
#definec71<
7
intcount=0,export=0,x=0,b=0;
voidSleep()
unsignedinti;
for(i=0;
2000;
i++);
staticunsignedcharzk[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
voidcomputer()
while(IO0PIN&
export=x;
case0:
count=x;
case1:
count=count+x;
case2:
count=count-x;
case3:
count=count*x;
count=count/x;
default:
b=1;
b=2;
b=3;
b=4;
export=count;
export=0;
count=0;
default:
intmain()
PINSEL0=0x00;
IO0DIR=IO0DIR|0xff0;
while
(1)
computer();
Show(export);
五、心得体会
我选的题目是基于LPC2103设计一个简易的计算器要求是通过4*4矩阵键盘输入八位数码管动态显示能实现加、减、乘、除等基本运算功能我我基本完成了设计要求的基本功能并实现了扩展部分的连续运算功能。
我收获很大积累了许多经验和知识。
本次实训共分为三步即通过网络、相关书籍等各种途径查找资料电路板的设计和程序的编写调试三部分。
首先实训的第一步就是查找相关资料做好设计制作前的准备。
在这个过程中我深刻地领悟到查找资料是一个大学生获取知识拓宽知识面最重要的一坏。
通过查找资料我们可以学到许多课本上所没有的这也是锻炼一个大学生自学能力的关键。
在此期间我查找了不少有关嵌入式的书籍学到了许多有关嵌入式的知识。
同时也了解到嵌入式芯片广泛应用于工业控制和电子产业中所以学好嵌入式知识对我们来说是很重要的。
通过上网搜索找到了对设计有帮助的资料。
在网络上我找到了许多有关基于嵌入式LPC21xx的简易计算器的设计资料虽然没找到与我的设计要求完全符合的资料但通过对相关资料的学习和分析基本明确了计算器的设计思路为下一步原理图的绘制和程序的编写做好了准备,因此网络也是我们获得知识的一个途径。
虽然这次设计有一定的难度让我有了充分锻炼自己地机会。
最重要的是要自己亲自动若一味地照搬或抄袭他人的作品不加思考领会那也就达不到锻炼自己的目的。
我们可以参考他人的制作成功资料但要去领悟并加以改进创新制作出属于自己的作品。
制作过程中遇到的问题要深入的思考加以解决。
通过这次设计嵌入式计算器提高了对lpc2103的应用能力通过自己动手写程序提高了自己运用C语言编写程序的能力。
总之这次实训锻炼了我们的动手能力将理论运用到实践中。
同时让我深深地感受到理论和实践是有差距的只有将理论运用到实践中才能检验其是否正确并将理论知识加以巩固和理解。
同学的鼓励和支持下我顺利地完成了这次设计。
六、致谢
非常感谢老师对我们的悉心教导为我们讲解知识和写程序应该注意的事项。
同时也非常感谢我们班的同学在我不理解的时候给我耐心的讲解和建议。
七、参考文献
1、ARM嵌入式系统开发-软件设计与优化,AndrewN.Sloss,沈建华(译),北京航空航天大学出版社,2005;
2、ARM体系结构与编程,杜春雷,清华大学出版社,2007;
3、周立功.ARM嵌入式系统基础教程[M].北京航空航天大学出版社,2005;
4、LPC2102/03/04使用指南.广州周立功单片机发展有限公司,2005;
5、嵌入式原理及接口技术:
递阶学习之LPC2103/张开生,程红英,翟岁兵主编,北京航空航天大学出版社,2015;