电子计算器课程设计.doc
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
num=-1;
lcden=1; //使能信号为高电平
write_com(0x38); //8位,2行
write_com(0x0c); //显示开,光标关,不闪烁*/
write_com(0x06); //增量方式不移位显竟獗暌贫柚?
write_com(0x80); //检测忙信号
write_com(0x01); //显示开,光标关,不闪烁
void check() //判断忙或空闲
{
do{
P0=0xFF;
rs=0; //指令
rw=1; //读
lcden=0; //禁止读写
delay(1); //等待,液晶显示器处理数据
lcden=1; //允许读写
}while(busy==1); //判断是否为空闲,1为忙,0为空闲
}
void write_com(char com) //写指令函数
图3-2复位电路
该电路除具有上电复位功能外,若要复位,只需按图中的BUTTON键,此时电源VCC经电阻R1、R2分压,在RESET端产生复位高电平。
3.4
矩阵式键盘的结构与工作原理:
在键盘中的按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,其内部简图如图3-3在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,只需要单片机的一个端口(如P1口)就可以构成4*4=16个按键,比直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘比较是合理的。
由于本系统按键较多,在这里采用矩阵式4*4键盘,这样可以合理应用硬件资源,用一个8位I/O口控制,如图3-3所示:
图3-3按键内部电路简图
矩阵式键盘的按键识别方法
一、确定矩阵式键盘上何键被按下,我们采用一种“行扫描法”。
行扫描法:行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。
3.4
(2)通过工具栏中的 (从库中选择元件命令)命令,在pick devices窗口中选择电路所需的元件,放置元件到编辑区并调整其相对位置,进行元件参数设置,元器件间连线。
(3)连线并加上设置参数,并完成仿真原理图,如图5-2所示。
(4)加载程序。将编译调试完成的简易计算器机器码程序(hex文件)加载到AT89C51单片机中。
参考文献
[1]刘和平,刘跃,单片机原理及应用,重庆:重庆大学出版社,2004
[2]杨西明,朱骐,单片机编程与入门,北京:机械工业出版社,2004
[3]陈明荧,89C51单片机课程设计实训教材,北京:北京清华大学出版社,2004
[4]刘瑞新,单片机原理及应用教程,北京:机械工业出版社,2003
[5楼然苗,李光飞,51系列单片机设计实例,北京:北京航空航天大学出版社,2003
{
P0=com; //com指令付给P0口
rs=0;
rw=0;
lcden=0;
check();
lcden=1;
}
void write_date(char date) //写数据函数
{
P0=date;
rs=1;
rw=0;
lcden=0;
check();
lcden=1;
}
void init() //初始化
(4)对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。
图5-1 Keil调试
2用Proteus对于本设计的仿真
操作步骤如下:
(1)进入proteus ISIS集成环境,在工作前,在systerm菜单下设置界面的颜色、图形界面大小等项目,也可采用了系统默认值。
delay(20);
if(P3!=0xfe)
{
temp=P3&0xf0;
switch(temp)
{
case 0xe0:num=0;
break;
case 0xd0:num=1;
break;
case 0xb0:num=2;
break;
case 0x70:num=3;
break;
}
}
while(P3!=0xfe);
图3-1
3.
一、晶体振荡电路
1.晶体振荡器的作用
石英晶体振荡器也称石英晶体谐振器,它用来稳定频率和选择频率,是一种可以取代LC谐振回路的晶体谐振元件。
2.本设计所用的晶体振荡电路如图2.3所示:
图3-2晶振电路
此晶振电路所选用的石英晶振频率为12MHZ。
一、晶体振荡电路
单片机复位的条件是:必须使RST/Vpd或RST引脚加上持续两个机器周期(即24个振荡周期)的高电平。
显示用LCD液晶显示屏,减少线路连接。
用C言编写程序,易进行调试修改。
采用4*4矩阵键盘作为输入。
3Leabharlann Baidu
3.1
电路图如附录1
3.2
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能、CMOS、8位单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。AT89C51的管脚图如图2.2所示。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,理论指导实践,在实践中对理论知识加以理解。还要有独立思考能力和团队协作的精神,个人能力固然重要,集体的力量更是伟大的。
由于时间比较仓促,我所设计的这个计算器非常简单,我们可以考虑在以后来改进一下,使它的功能更加完善,强大。
5.2
6
通过这段时间的设计,终于完成了我计算器的设计,虽然只是一个非常简单的计算器,可是我也经过了一翻很大的努力才完全达到设计要求的,从心底里说,还是挺高兴的,毕竟这次设计所要求的东西都做了出来,然而高兴之余不得不深思呀!
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机的设计重点就在于软件程序的设计,需要有很巧妙的编程方法,在编程时,由于粗心大意马虎,有些语句看似没问题,可就是不出效果,经仔细揣摩修改后,程序才正常运行。学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高。
rs=1;
rw=0;
lcden=0;
check();
lcden=1;
}
4.4
见附录2
5
5.1
1.采用KEIL开发的89c51单片机应用程序调试步骤:
(1)在uVision集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL公司下的AT89C51)
int a,b,c; //a,第一个数b,第二个数c,得数
float a_c,b_c;
uchar flag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号
uchar code table[]={
7,8,9,0,
4,5,6,0,
1,2,3,0,
0,0,0,0};
uchar code table1[]={
7,8,9,0x2f-0x30,
4,5,6,0x2a-0x30,
1,2,3,0x2d-0x30,
0x01-0x30,0,0x3d-0x30,0x2b-0x30};
void delay(uchar z) //延迟函数
{
uchar y;
for(z;z>0;z--)
for(y=0;y<100;y++);
}
4.设计4*4矩阵键盘输入线的连接。
2
2.1
我们日常生活的开支,大额数字或是多倍小数的计算都需要计算器的帮助,处理数字的开方、正余弦都离不开计算器。虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,操作不便不说,很多功能根本用不到。所以,我们想到可不可以用自己所学为自己设计开发一个属于自己的简单计算器来完成日常生活的需求。
附录
附录
#include<reg51.h> //头文件
#define uint unsigned int //
#define uchar unsigned char
sbit lcden=P2^3; //定义引脚
sbit rs=P2^4;
sbit rw=P2^0;
sbit busy=P0^7;
char i,j,temp,num,num_1;
(5)单击仿真工具栏中的仿真键,观察仿真结果。可以按暂停、继续、单步、等按钮,查看效果。
图5-2
操作说明:
1)本计算器实现4位数的加减,2位数乘除运算。
2)按下数值键,显示按下的“数字”,按运算符,显示符号,按第2个操作数,显示,按“=”键,得到运算结果。
3)按“清零”键清除运算结果,可重新开始。
(6)调试与思考
1602LCD采用标准的14脚(无背光)接口,各引脚接口说明如表所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
8
D1
数据
2
VDD
电源正极
9
D2
数据
3
VEE
液晶显示偏压
10
D3
数据
4
RS
数据/命令选择
11
D4
数据
5
RW
读/写选择
12
D5
数据
6
E
使能信号
13
D6
数据
7
D0
数据
14
D7
数据
4
4.1
1.要有显示子程序,当键入一个数值或符号时显示程序要把这个键入的值给显示出来。经过运算在按下等号之后显示出此次运算的结果。
(2)用uVision的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。
(3)通过uVision 2的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。
if(num==0||num==1||num==2)//如果按下的是'7','8'或'9
{
if(j!=0)
{
write_com(0x01);
j=0;
}
if(flag==0)//没有按过符号键
{
do{
a=a*10+table[num];
}
while(a>10000);
}
else//如果按过符号键
{
do
1
1.1
电子计算器设计
1、能实现4位整数的加减法和2位整数的乘法;
2、结果通过5个LED数码管显示(4位整数加法会有进位)或通过液晶显示屏显示。
1.2
1.用数字键盘输入4位整数,通过LED数码显示管或液晶显示屏显示。
2.完成四位数的加减法应算。当四位数想加时产生的进位时,显示进位。
3.显示2位,并进行2位整数的乘法。
if(P3!=0xfd)
{
temp=P3&0xf0;
switch(temp)
{
b=b*10+table[num];
}
while(b>10000);
}
}
else //如果按下的是'/'
{
if(a<100)
{
flag=1;
fuhao=4;
};
//4表示除号已按
}
i=table1[num];
write_date(0x30+i);
}
P3=0xfd;
if(P3!=0xfd)
{
delay(5);
2.2
使用单片机为ATMEL公司生产AT89C51,AT89C51提供以下标准功能:4K字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个向量两级中断结构,一个全双工串行通讯口,内置一个精密比较器,片内振荡器及时钟电路,同时AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的工作模式,空闲方式停止CPU的工作,但允许RAM,定时计数器,串行通信及中断系统继续工作。
num_1=0;
i=0;
j=0;
a=0; //第一个参与运算的数
b=0; //第二个参与运算的数
c=0;
flag=0; //flag表示是否有符号键按下,
fuhao=0; // fuhao表征按下的是哪个符号
}
void keyscan() //键盘扫描程序
{
P3=0xfe;
if(P3!=0xfe)
{
4.2总体流程图
4.3
1.读和写数据子程序
void write_com(char com) //写指令函数
{
P0=com; //com指令付给P0口
rs=0;
rw=0;
lcden=0;
check();
lcden=1;
}
void write_date(char date) //写数据函数
{
P0=date;
2.就是按键程序,当一个键盘按下的时候,按键程序要判断是哪个按键按下,如果是数字键按下就要转向显示子程序来显示出这个数字,然后等待下一个键值的输入,再次判断按下的是什么键,如果是功能键就要根据上次功能键和输入的数据来计算结果,然后保存结果和功能键,结果送显示缓冲区显示。等待下个数值的输入,如此重复。
num=-1;
lcden=1; //使能信号为高电平
write_com(0x38); //8位,2行
write_com(0x0c); //显示开,光标关,不闪烁*/
write_com(0x06); //增量方式不移位显竟獗暌贫柚?
write_com(0x80); //检测忙信号
write_com(0x01); //显示开,光标关,不闪烁
void check() //判断忙或空闲
{
do{
P0=0xFF;
rs=0; //指令
rw=1; //读
lcden=0; //禁止读写
delay(1); //等待,液晶显示器处理数据
lcden=1; //允许读写
}while(busy==1); //判断是否为空闲,1为忙,0为空闲
}
void write_com(char com) //写指令函数
图3-2复位电路
该电路除具有上电复位功能外,若要复位,只需按图中的BUTTON键,此时电源VCC经电阻R1、R2分压,在RESET端产生复位高电平。
3.4
矩阵式键盘的结构与工作原理:
在键盘中的按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,其内部简图如图3-3在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,只需要单片机的一个端口(如P1口)就可以构成4*4=16个按键,比直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘比较是合理的。
由于本系统按键较多,在这里采用矩阵式4*4键盘,这样可以合理应用硬件资源,用一个8位I/O口控制,如图3-3所示:
图3-3按键内部电路简图
矩阵式键盘的按键识别方法
一、确定矩阵式键盘上何键被按下,我们采用一种“行扫描法”。
行扫描法:行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。
3.4
(2)通过工具栏中的 (从库中选择元件命令)命令,在pick devices窗口中选择电路所需的元件,放置元件到编辑区并调整其相对位置,进行元件参数设置,元器件间连线。
(3)连线并加上设置参数,并完成仿真原理图,如图5-2所示。
(4)加载程序。将编译调试完成的简易计算器机器码程序(hex文件)加载到AT89C51单片机中。
参考文献
[1]刘和平,刘跃,单片机原理及应用,重庆:重庆大学出版社,2004
[2]杨西明,朱骐,单片机编程与入门,北京:机械工业出版社,2004
[3]陈明荧,89C51单片机课程设计实训教材,北京:北京清华大学出版社,2004
[4]刘瑞新,单片机原理及应用教程,北京:机械工业出版社,2003
[5楼然苗,李光飞,51系列单片机设计实例,北京:北京航空航天大学出版社,2003
{
P0=com; //com指令付给P0口
rs=0;
rw=0;
lcden=0;
check();
lcden=1;
}
void write_date(char date) //写数据函数
{
P0=date;
rs=1;
rw=0;
lcden=0;
check();
lcden=1;
}
void init() //初始化
(4)对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。
图5-1 Keil调试
2用Proteus对于本设计的仿真
操作步骤如下:
(1)进入proteus ISIS集成环境,在工作前,在systerm菜单下设置界面的颜色、图形界面大小等项目,也可采用了系统默认值。
delay(20);
if(P3!=0xfe)
{
temp=P3&0xf0;
switch(temp)
{
case 0xe0:num=0;
break;
case 0xd0:num=1;
break;
case 0xb0:num=2;
break;
case 0x70:num=3;
break;
}
}
while(P3!=0xfe);
图3-1
3.
一、晶体振荡电路
1.晶体振荡器的作用
石英晶体振荡器也称石英晶体谐振器,它用来稳定频率和选择频率,是一种可以取代LC谐振回路的晶体谐振元件。
2.本设计所用的晶体振荡电路如图2.3所示:
图3-2晶振电路
此晶振电路所选用的石英晶振频率为12MHZ。
一、晶体振荡电路
单片机复位的条件是:必须使RST/Vpd或RST引脚加上持续两个机器周期(即24个振荡周期)的高电平。
显示用LCD液晶显示屏,减少线路连接。
用C言编写程序,易进行调试修改。
采用4*4矩阵键盘作为输入。
3Leabharlann Baidu
3.1
电路图如附录1
3.2
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能、CMOS、8位单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。AT89C51的管脚图如图2.2所示。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,理论指导实践,在实践中对理论知识加以理解。还要有独立思考能力和团队协作的精神,个人能力固然重要,集体的力量更是伟大的。
由于时间比较仓促,我所设计的这个计算器非常简单,我们可以考虑在以后来改进一下,使它的功能更加完善,强大。
5.2
6
通过这段时间的设计,终于完成了我计算器的设计,虽然只是一个非常简单的计算器,可是我也经过了一翻很大的努力才完全达到设计要求的,从心底里说,还是挺高兴的,毕竟这次设计所要求的东西都做了出来,然而高兴之余不得不深思呀!
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机的设计重点就在于软件程序的设计,需要有很巧妙的编程方法,在编程时,由于粗心大意马虎,有些语句看似没问题,可就是不出效果,经仔细揣摩修改后,程序才正常运行。学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高。
rs=1;
rw=0;
lcden=0;
check();
lcden=1;
}
4.4
见附录2
5
5.1
1.采用KEIL开发的89c51单片机应用程序调试步骤:
(1)在uVision集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL公司下的AT89C51)
int a,b,c; //a,第一个数b,第二个数c,得数
float a_c,b_c;
uchar flag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号
uchar code table[]={
7,8,9,0,
4,5,6,0,
1,2,3,0,
0,0,0,0};
uchar code table1[]={
7,8,9,0x2f-0x30,
4,5,6,0x2a-0x30,
1,2,3,0x2d-0x30,
0x01-0x30,0,0x3d-0x30,0x2b-0x30};
void delay(uchar z) //延迟函数
{
uchar y;
for(z;z>0;z--)
for(y=0;y<100;y++);
}
4.设计4*4矩阵键盘输入线的连接。
2
2.1
我们日常生活的开支,大额数字或是多倍小数的计算都需要计算器的帮助,处理数字的开方、正余弦都离不开计算器。虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,操作不便不说,很多功能根本用不到。所以,我们想到可不可以用自己所学为自己设计开发一个属于自己的简单计算器来完成日常生活的需求。
附录
附录
#include<reg51.h> //头文件
#define uint unsigned int //
#define uchar unsigned char
sbit lcden=P2^3; //定义引脚
sbit rs=P2^4;
sbit rw=P2^0;
sbit busy=P0^7;
char i,j,temp,num,num_1;
(5)单击仿真工具栏中的仿真键,观察仿真结果。可以按暂停、继续、单步、等按钮,查看效果。
图5-2
操作说明:
1)本计算器实现4位数的加减,2位数乘除运算。
2)按下数值键,显示按下的“数字”,按运算符,显示符号,按第2个操作数,显示,按“=”键,得到运算结果。
3)按“清零”键清除运算结果,可重新开始。
(6)调试与思考
1602LCD采用标准的14脚(无背光)接口,各引脚接口说明如表所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
8
D1
数据
2
VDD
电源正极
9
D2
数据
3
VEE
液晶显示偏压
10
D3
数据
4
RS
数据/命令选择
11
D4
数据
5
RW
读/写选择
12
D5
数据
6
E
使能信号
13
D6
数据
7
D0
数据
14
D7
数据
4
4.1
1.要有显示子程序,当键入一个数值或符号时显示程序要把这个键入的值给显示出来。经过运算在按下等号之后显示出此次运算的结果。
(2)用uVision的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。
(3)通过uVision 2的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。
if(num==0||num==1||num==2)//如果按下的是'7','8'或'9
{
if(j!=0)
{
write_com(0x01);
j=0;
}
if(flag==0)//没有按过符号键
{
do{
a=a*10+table[num];
}
while(a>10000);
}
else//如果按过符号键
{
do
1
1.1
电子计算器设计
1、能实现4位整数的加减法和2位整数的乘法;
2、结果通过5个LED数码管显示(4位整数加法会有进位)或通过液晶显示屏显示。
1.2
1.用数字键盘输入4位整数,通过LED数码显示管或液晶显示屏显示。
2.完成四位数的加减法应算。当四位数想加时产生的进位时,显示进位。
3.显示2位,并进行2位整数的乘法。
if(P3!=0xfd)
{
temp=P3&0xf0;
switch(temp)
{
b=b*10+table[num];
}
while(b>10000);
}
}
else //如果按下的是'/'
{
if(a<100)
{
flag=1;
fuhao=4;
};
//4表示除号已按
}
i=table1[num];
write_date(0x30+i);
}
P3=0xfd;
if(P3!=0xfd)
{
delay(5);
2.2
使用单片机为ATMEL公司生产AT89C51,AT89C51提供以下标准功能:4K字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个向量两级中断结构,一个全双工串行通讯口,内置一个精密比较器,片内振荡器及时钟电路,同时AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的工作模式,空闲方式停止CPU的工作,但允许RAM,定时计数器,串行通信及中断系统继续工作。
num_1=0;
i=0;
j=0;
a=0; //第一个参与运算的数
b=0; //第二个参与运算的数
c=0;
flag=0; //flag表示是否有符号键按下,
fuhao=0; // fuhao表征按下的是哪个符号
}
void keyscan() //键盘扫描程序
{
P3=0xfe;
if(P3!=0xfe)
{
4.2总体流程图
4.3
1.读和写数据子程序
void write_com(char com) //写指令函数
{
P0=com; //com指令付给P0口
rs=0;
rw=0;
lcden=0;
check();
lcden=1;
}
void write_date(char date) //写数据函数
{
P0=date;
2.就是按键程序,当一个键盘按下的时候,按键程序要判断是哪个按键按下,如果是数字键按下就要转向显示子程序来显示出这个数字,然后等待下一个键值的输入,再次判断按下的是什么键,如果是功能键就要根据上次功能键和输入的数据来计算结果,然后保存结果和功能键,结果送显示缓冲区显示。等待下个数值的输入,如此重复。