单片机原理及接口技术报告.docx
《单片机原理及接口技术报告.docx》由会员分享,可在线阅读,更多相关《单片机原理及接口技术报告.docx(26页珍藏版)》请在冰豆网上搜索。
单片机原理及接口技术报告
《单片机原理及接口技术》
课程设计报告
课题名称
课题23:
简单计算机的设计★★
学院
自动控制与工程学院
一、设计的目的、任务……………………………………………3
二、设计步骤及方案……………………………………………….5
三、硬件电路设计……………………………………………………6
四、软件设计及系统流程图……………………………………....9
1、初始化程序模块…………………………………………….11
2、键盘扫描程序模块…………………………………………12
3、显示程序模块……………………………………………….15
五、调试过程及方法……………………………………………17
六、课程设计心得体会…………………………………………….18
七、参考文献………………………………………………………..19
附录…………………………………………………………………....20
一、设计的目的、任务
1、课程设计的目的
单片机课程设计作为独立的教学环节,是自动化及相关专业集中实践性环节系列之一,是学习完《单片机原理及其运用》课程后。
并在进行相关课程设计基础上进行的一次综合练习。
单片机课程设计过程中,学生通过查阅资料、接口设计、程序设计、安装调试等环节,完成一个基于MCS-51系列单片机,涉及多种资源应用,并具有综合功能的小应用系列设计。
使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路,电子元器件等方面的知识进一步加深认识,同时在软件编程,调试,相关仪器设备和相关软件的使用技能得到较全面的锻炼和提高。
使学生增进对单片机的感兴认识,加深对单片机理论方面的理解,加深单片机的内部功能模块的应用,如定时器/计时器、中断、片内外存储器、I/O接口、串行接口等。
使学生了解和掌握单片机应用系统的软硬件设计过程、方法及实现,强化单片机应用电路的设计与分析能力。
提高学生在单片机应用方面的实践技能和科学作风;培养学生综合运用理论知识解决问题的能力。
2、基于AT89C51单片机简易计算器的设计
【摘要】单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。
本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。
设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。
显示采用字符LCD静态显示。
软件方面使用C语言编程,并用PROTUES仿真。
3.设计任务及要求
1)、基于MCS-51系列单片机AT89C51,设计一个简单的计算器。
2)、通过4*4的矩阵键盘输入数字及运算符;
3)、可以进行4为十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示E。
4)、@可以进行加法以外的计算(乘、除、减)。
5)、其他功能。
二、设计步骤及方案
1、总体设计及方案
根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。
通过扩展必要的外围接口电路,实现对计算器的设计。
具体设计如下:
(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD显示数据和结果。
(2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘。
(3)执行过程:
开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
(4)错误提示:
当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:
当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上显示E;当除数为0时,计算器会在LCD上显示E。
系统方案图:
显示模块
2、总体硬件配置
本设计选用AT89C51单片机为主控元件。
显示部分:
采用LCD静态显示。
按键部分:
采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。
三、硬件电路设计
1、总体设计效果如图1-1所示:
图1-1
2、输入模块(键盘)接口电路
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。
矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4×4个。
这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
4*4矩阵键盘的工作原理:
计算器的键盘布局如图2-1所示:
一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。
图2-1
4*4键盘内部电路图如图2-2所示:
图2-2
3、显示模块(LCD):
本设计采用LCD液晶显示器来显示输出数据。
通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。
接口信号说明:
RS:
数据/命令选择端(H/L)
RW:
读/写选择端(H/L)
E:
使能信号
图2-3所示:
图2-3
4、运算模块(单片机控制)
MCS-51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。
如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。
AT89C51如图2-4所示
图2-4
四、软件设计及系统流程图
结果送显示缓冲
运算程序流程图:
数值送显示器
1、初始化程序模块
voidwrite_com(ucharcom)//写指令函数
{
e=0;
rs=0;
rw=0;
P0=com;//com指令付给P0口
delayms
(1);
e=1;
delayms
(1);
e=0;
}
voidwrite_data(ucharnum)//写数据函数
{
e=0;
rs=1;
rw=0;
P0=num;
delayms
(1);
e=1;
delayms
(1);
e=0;
}
voidint0()//初始化
{
delayms(15);
write_com(0x38);//功能设置命令:
8位,行DDRAM的地址
write_com(0x0c);//显示开及光标设置
write_com(0x06);//增量方式不移位
write_com(0x80);//设置访问地址
}
2、键盘扫描程序模块
voidkeyscanf()
{
uchartemp;
P1=0xfe;
temp=P1;
temp=temp&0xff;
while(temp!
=0xfe)
{
delayms(5);
temp=P1;
temp=temp&0xff;
while(temp!
=0xfe)
{
temp=P1;
switch(temp)
{
case0xee:
num=7;flag=1;break;
case0xde:
num=8;flag=1;break;
case0xbe:
num=9;flag=1;break;
case0x7e:
num=12;duvision=1;break;
default:
num=0;break;
}
while(temp!
=0xfe)
{
temp=P1;
temp=temp&0xff;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xff;
while(temp!
=0xfd)
{
delayms(5);
temp=P1;
temp=temp&0xff;
while(temp!
=0xfd)
{
temp=P1;
switch(temp)
{
case0xed:
num=4;flag=1;break;
case0xdd:
num=5;flag=1;break;
case0xbd:
num=6;flag=1;break;
case0x7d:
num=11;mul=1;break;
default:
num=0;break;
}
while(temp!
=0xfd)
{
temp=P1;
temp=temp&0xff;
}
}
}
P1=0xfb;
temp=P1;
temp=temp&0xff;
while(temp!
=0xfb)
{
delayms(5);
temp=P1;
temp=temp&0xff;
while(temp!
=0xfb)
{
temp=P1;
switch(temp)
{
case0xeb:
num=1;flag=1;break;
case0xdb:
num=2;flag=1;break;
case0xbb:
num=3;flag=1;break;
case0x7b:
num=10;minus=1;break;
default:
num=0;break;
}
while(temp!
=0xfb)
{
temp=P1;
temp=temp&0xff;
}
}
}
P1=0xf7;
temp=P1;
temp=temp&0xff;
while(temp!
=0xf7)
{
delayms(5);
temp=P1;
temp=temp&0xff;
while(temp!
=0xf7)
{
temp=P1;
switch(temp)
{
case0xe7:
power=1;break;//复位;
case0xd7:
num=0;flag=1;break;
case0xb7:
equal_flag=1;break;//等于;
case0x77:
num=13;plus=1;break;
default:
num=0;break;
}
while(temp!
=0xf7)
{
temp=P1;
temp=temp&0xff;
}
}
}
}
3、显示程序模块
voiddisplay(ucharnum)
{
ucharworkdata;//处理显示标志位
if(flag==1)//键值信息显示
{
flag=0;
write_data(tab1[num]);
switch(count)
{
case0:
value