单片机原理及接口技术报告Word文档格式.docx
《单片机原理及接口技术报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机原理及接口技术报告Word文档格式.docx(33页珍藏版)》请在冰点文库上搜索。
![单片机原理及接口技术报告Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/329c3b60-72b2-4ac4-9f0d-82e508a410ed/329c3b60-72b2-4ac4-9f0d-82e508a410ed1.gif)
二、设计步骤及方案
1、总体设计及方案
根据功能和指标要求,本系统选用MCS-5係列单片机为主控机。
通过扩展必要的外围接口电路,实现对计算器的设计。
具体设计如下:
(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD显示数据和结果。
(2)另外键盘包括数字键(0〜9)、符号键(+、-、X、+)、清除键和等号键,故只需要16个按键即可,设计中采用集成的
计算键盘。
(3)执行过程:
开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
(4)错误提示:
当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:
当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上显示E;
当除数为0时,计算器会在LCD上显示E。
系统方案图:
2、总体硬件配置
本设计选用AT89C51单片机为主控元件。
显示部分:
采用LCD
静态显示。
按键部分:
采用4*4键盘;
利用MM74C922为4*4
的键盘扫描IC,读取输入的键值。
三、硬件电路设计
1、总体设计效果如图1-1所示:
LCD1
LM016L
图1-1
2、输入模块(键盘)接口电路
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。
矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4X4个。
这种行列式键盘结构能
有效地提高单片机系统中I/O口的利用率。
4*4矩阵键盘的工作原理:
计算器的键盘布局如图2-1所示:
一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。
图2-1
4*4键盘内部电路图如图2-2所示:
hi1
j~°
—
l™6;
厂3斗O—
[―斗°
1
——厶二o~
>
I_n°
—1
j—
*1—启二,:
.1ra
(U
厂0車0
图2-2
3、显示模块(LCD):
本设计采用LCD液晶显示器来显示输出数据。
通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。
接口信号说明:
RS:
数据/命令选择端(H/L)
RW:
读/写选择端(H/L)
E:
使能信号
图2-3所示:
SVVRWEDDDDdDDD
123456789(j)1234
图2-3
4、运算模块(单片机控制)
MCS-51单片机是在一块芯片中集成了CPU、RAM、ROM、定时
器/计数器和多功能I/O等一台计算机所需要的基本功能部件功能划分,它由如下功能部件组成,即微处理器(CPU)、器(RAM)、程序存储器(ROM/EPROM)、并行I/O口定时器/计数器、中断系统及特殊功能寄存器(SFR。
AT89C51如图2-4所示
如果按
数据存储
串行口、
U1
2
3
4
5
6
7
18
9
29
30
31
8
19
XTAL1
XTAL2
RST
PSENALE
EA
P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7
P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P2.0/A8
P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD
38
37
36
35
34
33
32
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17
39
AT89C51
图2-4
四、软件设计及系统流程图
运算程序流程图:
1、初始化程序模块
voidwrite_com(ucharcom)//写指令函数{
e=0;
rs=O;
rw=0;
P0=com;
//com指令付给PO口
delayms(l);
e=1;
delayms
(1);
voidwrite_data(ucharnum)//写数据函数
{
rs=1;
P0=num;
delayms(l);
e=1;
e=0;
}
voidint0()〃初始化
//功能设置命令:
8位,行DDRAM的地址〃显示开及光标设置
//增量方式不移位
2、键盘扫描程序模块
voidkeyscanf()
uchartemp;
P仁Oxfe;
temp=P1;
temp=temp&
Oxff;
while(temp!
=Oxfe)
delayms(5);
=0xfe)
switch(temp)
case0xee:
num=7;
flag=1;
break;
case0xde:
num=8;
case0xbe:
num=9;
case0x7e:
num=12;
duvision=1;
default:
num=0;
temp=temp&
P1=0xfd;
=0xfd)
case0xed:
num=4;
case0xdd:
num=5;
case0xbd:
num=6;
case0x7d:
num=11;
mul=1;
default:
P1=0xfb;
=0xfb)
0xf;
=Oxfb)
case0xeb:
num=1;
case0xdb:
num=2;
case0xbb:
num=3;
case0x7b:
num=10;
minus=1;
}while(temp!
0xff;
P1=0xf7;
=0xf7)
case0xe7:
power=1;
case0x77:
num=13;
plus=1;
3、显示程序模块
voiddisplay(ucharnum)
ucharworkdata;
//处理显示标志位
if(flag==1)〃键值信息显示
flag=0;
write_data(tab1[num]);
switch(count)
case0:
value+=tab2[num];
case1:
value=((value*10)+tab2[num]);
case2:
case3:
default:
value=0;
count++;
if(count>
=4)
count=0;
if(plus==1)〃处理加法运算
write_com(0x01);
write_data('
+'
);
write_com(0x80);
plus=0;
sum+=value;
value=0;
work_num=1;
if(minus==1)//处理减法运算
-'
minus=0;
work_num=2;
if(mul==1)〃处理乘法运算
write_data('
*'
mul=0;
work_num=3;
if(duvision==1)//处理除法运算
/'
duvision=0;
work_num=4;
if(equal_flag==1)//求出运算结果
equal_flag=0;
workdata=1;
switch(work_num)
work_num=O;
value=O;
case2:
sum-=value;
sum*=value;
case4:
sum/=value;
;
}if(workdata==1)//显示处理
workdata=0;
if(sum<
0)
_'
sum=abs(sum);
if((sum<
10)&
&
(sum>
=0))
write_data(tab1[sum]);
elseif((sum<
100)&
=10))
write_data(tab1[sum/10]);
write_data(tab1[sum%10]);
1000)&
(sum>
=100))
write_data(tab1[sum/100]);
write_data(tab1[sum%100/10]);
write_data(tab1[sum%100%10]);
10000)&
=1000))
write_data(tab1[sum/1000]);
write_data(tab1[sum%1000/100]);
write_data(tab1[sum%1000%100/10]);
write_data(tab1[sum%1000%100%10]);
}else
E'
五、调试过程及方法
1、初始化:
将程序添加到keil-v4中,建立之后无错误,产生HEX文件,将该文件导入到Proteus中,与电路图相符后运行,在LCD上产生初始化结果,也就是第一步程序的运行结果,如图2-5所示:
SVE
RWeDDDD
DDDD
123
4567891
13
图2-5
2、进行符号运算:
在第一步基础上,在键盘上输入数字和符号键(+、―、*、宁),在LCD上显示结果。
3、系统清零:
在进行完第一步之后,如要在进行符号运算,则要清零,在键盘上按下ON/C之后,系统清零。
4、错误信息显示:
当输入的数值或计算得到的结果大于计算器的表
示范围时,计算器会在LCD上显示E;
当除数为0时,计算器会在LCD上显示E,如图2-6所示:
E
S
1VERweDDDDDDDD
2347
|9£
4234
图2-6
六、课程设计心得体会
课程设计是培养我们综合运用所学知识,发现、提出、分析和解
决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为计算机专业的学生来说掌握单片机的开发技术是十分重要的。
我们的题目是基于单片机设计简易计算器,对于我们这些实践中的新手来说,这是一次考验。
这次课程设计我们学到很多很多的东西,学会了怎么在遇到问题时去解决问题。
不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统
的研究方法,可以进行一些简单的编程。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,对
以前所学过的知识理解得不够深刻,掌握得不够牢固。
这次课程设计通过我们小组的努力终于顺利完成了,在设计中遇到了很多问题,最后在指导老师的辛勤指导下,终于迎刃而解,在此我们表示感谢!
七、参考文献
[1]《例说51单片机(C语言版)》张义和、王敏男等人民邮电出版社
[2]《单片机原理与接口技术》(第3版)李朝青编著北京航空航天大学出版社
附录程序清单
#include<
reg51.h>
math.h>
#defineucharunsignedchar
code
#defineuintunsignedintuchar
tab1[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2d,0x2a,0x2f,0x2d,0xd0};
//通过液晶字符手册查找得来
ucharcodetab2[]={0,1,2,3,4,5,6,7,8,9};
ucharnum;
ucharflag;
ucharcount;
intvalue;
intsum;
〃判断按键的值
〃判断按键的标志位//判断按键位数标志位
//求和,
ucharplus,minus,mul,duvision,equal_flag;
//力口,减,乘,除,等标志位
ucharwork_num;
ucharpower;
sbitrs=P2A0;
sbitrw=P2Al;
sbite=P2A2;
voiddelayms(uintcount)//延时子程序
uinti,j;
for(i=0;
i<
count;
i++)for(j=0;
j<
120;
j++);
voidwrite_com(ucharcom){
rs=0;
voidwrite_data(ucharnum)
rs=1;
voidint0()
delayms(15);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
/*********键盘扫描程序;
以确定按键位置************/
num=O;
=Oxfd)
caseOxeb:
case0xdb:
while(temp!
temp=P1;
=0xf7){