基于单片机的多功能计算器设计(完整程序注释版)

合集下载

基于51单片机的计算器设计

基于51单片机的计算器设计

基于51单片机的计算器设计计算器作为一种常用的电子设备,广泛应用于各个领域。

在本文中,我们将基于51单片机来设计一个简单的计算器,并对其进行详细介绍。

一、设计目标我们所设计的计算器需要具备以下功能:1.实现基本的算术运算,包括加、减、乘、除等;2.具备显示功能,能够将输入和运算结果以数字的形式显示在液晶屏上;3.提供清零和删除功能,方便计算器的操作;4.具备较高的计算精度和稳定性。

二、硬件设计计算器的硬件设计主要包括键盘输入、液晶屏输出和计算程序控制三个部分。

1.键盘输入为了简化设计的复杂度,我们采用矩阵键盘来实现输入功能。

矩阵键盘由多个行和多个列交叉连接而成,通过扫描行和列的方式来检测键盘输入的按键信息。

2.液晶屏输出我们选择16x2字符液晶显示屏来作为计算结果的输出设备。

这种液晶屏可以显示16个字符,每个字符由5x8像素点阵组成,具备较好的显示效果。

3.计算程序控制我们将基于51单片机来编写计算器的计算程序,并通过电路连接键盘输入和液晶屏输出设备。

通过读取键盘输入的按键信息,计算程序能够判断用户输入的数字和操作符,并进行相应的计算操作。

最后,计算结果将以数字的形式显示在液晶屏上。

三、软件设计计算器的软件设计主要包括键盘扫描与输入处理、计算程序控制和液晶屏显示三个模块。

1.键盘扫描与输入处理通过循环扫描矩阵键盘的行和列,可以得到按键信息。

根据按键信息的不同,我们可以判断用户输入的数字和操作符,并将其传递给计算程序模块进行处理。

同时,我们需要对一些特殊按键(如清零和删除)做特殊处理。

2.计算程序控制计算程序模块将根据键盘输入的数字和操作符,进行相应的算术运算。

我们可以采用栈的数据结构来处理运算符和运算数,以实现复杂的算术运算。

3.液晶屏显示计算结果将以数字的形式显示在液晶屏上。

我们可以通过51单片机的GPIO口控制液晶显示屏的操作,包括写入指令和写入数据。

通过设定光标位置及写入数字数据,可以将计算结果显示在液晶屏的指定位置上。

基于单片机的计算器(带程序)

基于单片机的计算器(带程序)

摘要当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。

计算器作为一种快速通用的计算工具方便了用户的使用。

计算器可谓是我们最亲密的电子伙伴之一。

单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。

在工业生产中。

单片微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。

单片微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。

本系统就是充分利用了AT89S52芯片的I/O引脚。

系统以采用MCS-51系列单片机Intel8051为中心器件来设计计算器控制器,以矩阵键盘输入、八位数码管显示,实现了能根据实际输入值计算并显示的功能。

关键词:计算器 AT89S52 八位数码管矩阵键盘目录1实训设计内容 (3)1.1 设计目的 (3)1.2 设计任务 (3)2 系统硬件设计 (3)2.1 芯片介绍 (3)2.1.1主控芯片AT89S52概述与介绍 (3)2.1.2 MAX232芯片介绍 (8)2.2 硬件电路 (9)2.2.1 键盘接口电路 (9)2.2.2 7段LED数码管 (9)2.2.3 程序下载接口 (10)2.2.4 单片机时钟电路 (10)2.2.5 单片机复位电路 (11)3 软件设计 (11)3.1 按键扫程序设计 (11)3.2 算法设计 (12)4 电路板制作过程 (12)5 作品调试 (13)5.1硬件调试 (13)5.2 程序调试 (13)致谢 (15)参考文献: (16)附录: (18)1实训设计内容1.1 设计目的通过本次课题设计,应用《单片机原理及应用》等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。

1.2 设计任务在本次实训中,主要完成如下方面的设计任务:(1)基本部分:1.八位数码管动态显示2.4*4矩阵键盘输入3.能实现整数的加、减、乘、除4.数据位数超出8位有报警提醒功能(2)发挥部分:1.具备连续运算功能2.能实现若干位小数的运算3.能实现乘方和阶乘等其他特殊运算2 系统硬件设计硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。

(完整)单片机课程设计——计算器设计

(完整)单片机课程设计——计算器设计

目录一、设计总绪 (1)1。

1设计思想 (1)1.2设计说明 (1)1。

3关键词:矩阵键盘,单片机,数码管显示,汇编语言 (1)1.4设计目的 (1)1。

5设计要求 (2)二、设计方案 (2)2。

1硬件电路设计方案 (2)2.1.1基本结构 (2)2.1。

2系统框架图 (3)2.1。

3工作流程图 (3)2。

1.4单片机主控制模块 (4)2。

2系统功能描述 (6)三、各模块功能介绍 (7)3.1键盘输入模块 (7)3。

1。

1键盘分布图 (7)3。

1.2工作原理 (7)3。

2运算控制模块 (8)3.3显示模块 (8)3.4振荡电路模块 (9)四、仿真电路 (11)仿真运行结果 (11)五、调试过程总结 (13)附录: (14)参考文献: (14)源程序代码 (14)一、设计总绪1。

1设计思想近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新.在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。

计算机在人们的日常生活中是比较常见的电子产品之一.可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89c51单片机、LCD显示器、控制按键为元件来设计的计算器。

利用此设计熟悉单片机微控制器及汇编语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。

掌握应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法此设计是基于单片机技术的简易计算器的方案,本次设计所提出的一种基于单片机技术的简易计算器的方案,采用具有数据处理能力的中央处理器CPU,随机存储器ROM,多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统-—单片机,配以汇编语言编写的执行程序,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功能集成与一个集成电路中,使用起来十分方便。

基于单片机的多功能计算器设计

基于单片机的多功能计算器设计

工程设计训练设计报告课题名称基于单片机的多功能计算器设计院系物理与电子工程学院年级专业电子信息工程班级学号学生姓名任课教师设计时间目录第一章概述....................................................................................................................................... 第二章硬件设计方案....................................................................................................................... 第三章程序设计............................................................................................................................... 第四章软件仿真调试....................................................................................................................... 心得体会............................................................................................................................................. 参考文献附录工程设计训练—基于单片机的多功能计算器设计任务书一、设计课题:基于单片机的多功能计算器设计二、设计目的:运用已学课程的基本知识,在设计中加以应用,进而得到理解、巩固和提高发展,通过实践的过程学习掌握分析与解决实际问题的方法与手段,提高设计、编程与调试的实际动手能力,作为工程技术工作的一次基本训练。

基于51单片机的计算器(附Proteus仿真图且程序有详细注释)

基于51单片机的计算器(附Proteus仿真图且程序有详细注释)
case 0x7b: key=11;flag1=1;display(7,0);break;
}
while(temp!=0xf0)
{
temp=P1;temp=temp&0xf0;
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P1;
x--;
delay(3);
}
}
}
else if ((flag1==1)&&(flag2==1))
{
for(i=7;i>=px3;i--)
{
display(i,RESUIT[i]);
delay(3);
}
}
}
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P1;
switch(temp)
{
case 0xee: key=0;flag=1;break;
case 0xde: key=1;flag=1;break;
case 0xbe: key=2;flag=1;break;
{
k=k*10;
}
x1=x1+k;
}
x1=x1+DATA1[px1-1];
for(i=0;i<(px2-1);i++) //把第二个数组中的数处理成十进制数
{
k=DATA2[i];
for(j=0;j<(px2-i-1);j++)

基于51单片机计算器设计

基于51单片机计算器设计

基于51单片机计算器设计计算器是一种常见的电子设备,可以进行数学运算、数据处理等功能。

本文将基于51单片机进行计算器设计。

一、设计目标:1.实现基本的数学运算功能,如加减乘除、取余等。

2.能够进行复杂的数学运算,如平方、开方等。

3.具备记忆功能,能够存储中间结果和运算符号。

4.设置输入界面,允许用户输入数字和操作符。

5.显示运算结果和中间过程。

二、硬件系统设计:1.使用51单片机作为主控芯片,具有高集成度和处理能力。

2.连接光栅液晶显示屏,用于显示数值和操作符。

3.连接矩阵键盘,用于获取用户的输入。

4.连接电源电路,保证计算器正常运行。

三、软件系统设计:1.确定界面设计,包括数值显示区、操作符显示区和功能键区。

2.设计输入处理模块,根据用户输入获取相应的数值和操作符,并进行相应的处理。

3.设计运算模块,根据用户输入的操作符进行相应的数学运算,并将结果存储起来。

4.设计显示模块,将计算结果和中间过程显示在液晶屏上。

5.设计存储模块,用来存储中间运算结果和操作符号。

四、软件流程设计:1.系统初始化:包括设置显示模式、清零中间结果等。

2.输入处理:通过矩阵键盘输入数字和操作符,并进行相应的处理。

3.运算处理:根据用户输入的操作符,进行相应的数学运算,并将结果存储起来。

4.结果显示:将计算结果和中间过程显示在液晶屏上。

5.存储结果:将计算结果和操作符存储起来,以备后续计算。

五、测试和调试:在设计完成后,需要进行系统测试和调试,确保计算器的各项功能正常运行。

首先进行单元测试,验证各个模块的功能是否按照设计要求正确执行。

然后进行综合测试,模拟用户输入各种情况下的运算过程,检测是否能够正确进行运算并显示结果。

如果发现问题,则进行调试和修改,直到计算器满足设计要求。

六、总结:基于51单片机进行计算器设计,可以实现基本的数学运算功能,并具备记忆功能。

设计步骤包括确定硬件系统和软件系统设计,设计界面、输入处理、运算处理、显示和存储模块,进行测试和调试确保计算器功能正常运行。

基于单片机的计算器设计(完整版)

基于单片机的计算器设计(完整版)

图3-1所示为简易计算器的电路原理图。

P3口用于键盘输入,接4*4矩阵键盘,键值与键盘的对应表如表----所示,p0口和p2口用于显示,p2口用于显示数值的高位,po口用于显示数值的低位。

图3-1 简易计算器电路原理图键值与功能对应表键值0 1 2 3 4 5 6 7 8 9 + - ×/ = ON/C 功能0 1 2 3 4 5 6 7 8 9 + - ×÷= 清零表3-13.2 计算器的软件设计#include<reg51.h> //头文件#define uint unsigned int //#define uchar unsigned charsbit lcden=P2^3; //定义引脚sbit rs=P2^4;sbit rw=P2^0;sbit busy=P0^7;char i,j,temp,num,num_1;long 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<110;y++);}void check() // 判断忙或空闲{do{P0=0xFF;rs=0; //指令rw=1; //读lcden=0; //禁止读写delay(1); //等待,液晶显示器处理数据lcden=1; //允许读写}while(busy==1); //判断是否为空闲,1为忙,0为空闲}void write_com(uchar com) // 写指令函数{P0=com; //com指令付给P0口rs=0;rw=0;lcden=0;check();lcden=1;}void write_date(uchar date) // 写数据函数{P0=date;rs=1;rw=0;lcden=0;check();lcden=1;}void init() //初始化{num=-1;lcden=1; //使能信号为高电平write_com(0x38); //8位,2行write_com(0x0c); //显示开,光标关,不闪烁*/write_com(0x06); //增量方式不移位显竟獗暌贫柚? write_com(0x80); //检测忙信号write_com(0x01); //显示开,光标关,不闪烁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){delay(20); 延迟20msif(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);if(num==0||num==1||num==2)//如果按下的是'7','8'或'9 {if(j!=0){write_com(0x01);j=0;}if(flag==0)//没有按过符号键{a=a*10+table[num];}else//如果按过符号键{b=b*10+table[num];}}else//如果按下的是'/'{flag=1;fuhao=4;//4表示除号已按}i=table1[num];write_date(0x30+i);}P3=0xfd;if(P3!=0xfd){delay(5);if(P3!=0xfd){temp=P3&0xf0;switch(temp){case 0xe0:num=4;break;case 0xd0:num=5;break;case 0xb0:num=6;break;case 0x70:num=7;break;}}while(P3!=0xfd);if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6' {if(j!=0){write_com(0x01);j=0;}if(flag==0)//没有按过符号键{a=a*10+table[num];}else//如果按过符号键{b=b*10+table[num];}}else//如果按下的是'/'{flag=1;fuhao=3;//3表示乘号已按}i=table1[num];write_date(0x30+i);}P3=0xfb;if(P3!=0xfb){delay(5);if(P3!=0xfb){temp=P3&0xf0;switch(temp){case 0xe0:num=8;break;case 0xd0:num=9;break;case 0xb0:num=10;break;case 0x70:num=11;break;}}while(P3!=0xfb);if(num==8||num==9||num==10)//如果按下的是'1','2'或'3' {if(j!=0){write_com(0x01);j=0;}if(flag==0)//没有按过符号键{a=a*10+table[num];}else//如果按过符号键{b=b*10+table[num];}}else if(num==11)//如果按下的是'-' {flag=1;fuhao=2;//2表示减号已按}i=table1[num];write_date(0x30+i);}P3=0xf7;if(P3!=0xf7){delay(5);if(P3!=0xf7){temp=P3&0xf0;switch(temp){case 0xe0:num=12;break;case 0xd0:num=13;break;case 0xb0:num=14;break;case 0x70:num=15;break;}}while(P3!=0xf7);switch(num){case 12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}//按下的是"清零" break;case 13:{ //按下的是"0"if(flag==0)//没有按过符号键{a=a*10;write_date(0x30);P1=0;}else if(flag==1)//如果按过符号键{write_date(0x30);}}break;case 14:{j=1;if(fuhao==1){write_com(0x80+0x4f);//按下等于键,光标前进至第二行最后一个显示处write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格c=a+b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d); //再写"="a=0;b=0;flag=0;fuhao=0;}else if(fuhao==2){write_com(0x80+0x4f);//光标前进至第二行最后一个显示处write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格(这个照理说顺序不对,可显示和上段一样)if(a-b>0)c=a-b;c=b-a;while(c!=0){write_date(0x30+c%10);c=c/10;}if(a-b<0)write_date(0x2d);write_date(0x3d); //再写"="a=0;b=0;flag=0;fuhao=0;}else if(fuhao==3){write_com(0x80+0x4f);write_com(0x04);c=a*b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}else if(fuhao==4){write_com(0x80+0x4f);write_com(0x04);i=0;c=(long)(((float)a/b)*1000);while(c!=0){write_date(0x30+c%10);c=c/10;i++;if(i==3)write_date(0x2e);}if(a/b<=0)write_date(0x30);write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}}break;case 15:{write_date(0x30+table1[num]);flag=1;fuhao=1;} break;}}}main(){init();while(1){keyscan();}}第4章仿真和调试下面用KEIL uVision与porteus仿真软件实现简易计算器的仿真与调试。

单片机计算器设计

单片机计算器设计

单片机计算器设计一、引言计算器作为现代生活中不可或缺的工具之一,其便携、高效的特点深受广大用户的喜爱。

而随着科技的发展,单片机技术的应用也日益广泛。

本文将介绍一种基于单片机的计算器设计方案,旨在实现简洁、实用的计算功能。

二、设计原理该计算器的设计基于单片机,通过按键输入数字和运算符,单片机能够实现简单的数学运算并输出结果。

具体实现步骤如下:1. 按键输入数字计算器上设有数字键,用户可以通过按下相应的数字键来输入数字。

单片机通过针脚接口读取按键输入的状态,并将其转化为数字信号进行处理。

2. 按键输入运算符计算器上还设有运算符键,用户可以通过按下相应的运算符键来输入运算符。

单片机同样通过针脚接口读取按键输入的状态,并将其转化为运算符信号进行处理。

3. 运算处理单片机根据接收到的数字和运算符信号进行相应的运算处理。

例如,当用户输入“2+3”,单片机接收到数字“2”和运算符“+”后,通过内部算法进行加法运算,并得到结果“5”。

4. 结果输出单片机将运算结果通过显示屏或者串口输出,以便用户查看。

显示屏可以是液晶显示屏或者LED数码管,通过单片机的控制将结果显示在屏幕上。

三、功能设计基于上述设计原理,该计算器可以实现以下功能:1. 四则运算计算器支持加、减、乘、除四种基本运算。

用户可以通过按下相应的运算符键来选择不同的运算。

2. 括号运算计算器还支持括号运算,用户可以通过按下括号键来输入括号。

3. 小数运算计算器能够处理小数运算,用户可以通过按下小数点键来输入小数。

4. 正负数运算计算器支持正负数运算,用户可以通过按下正负号键来改变输入数字的正负。

5. 清零功能计算器提供清零功能,用户可以通过按下清零键将输入的数字和运算符清零。

四、实现方式基于单片机的计算器可以采用多种实现方式,常见的有基于C语言、汇编语言以及硬件描述语言等。

以下是一种基于C语言的实现思路:1. 定义变量使用C语言定义变量来存储输入的数字和运算符,以及运算结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子信息工程专业综合课程设计任务书摘要:单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活中的各个领域,电子、科技、通信、汽车、工业等。

我们这次设计的多功能科学计算器也是利用AT89C51单片机制作而成。

该计算器设计是采用C语言编写,实现了六位数范围内的加、减、乘、除基本的四则运算,此外该计算器除了具备基本的计算功能以外还具有计时和倒计时的功能,也就是说该计算器具有两个工作模式,计算模式和计时模式,而计时模式里又包含正计时和倒计时的功能,这样一个简易的计算器实现了多功能,比较实用和方便。

该设计电路是采用AT89C51单片机为主要控制电路,然后使用74LS245缓冲驱动电路驱动六位LED数码管显示数据,利用加上4×4矩阵键盘完成电路的实际操作。

电路比较简单,但是很实用方便。

关键字:AT89C51 多功能74LS245 LED 矩阵键盘目录1.方案论证与选择 (4)1.1输入模块 (4)1.2显示模块: (5)2.其他硬件电路模块功能介绍: (6)2.1驱动模块 (6)2.2主控制模块 (7)2.3操作模块 (8)3.软件设计 (9)3.1主功能计算器部分 (9)3.2计时和倒计时部分 (9)3.3功能按键 (9)3.4软件流程图 (9)4硬件设计 (11)4.1电路工作框图 (11)4.2 硬件电路图 (12)4.3引脚锁定 (12)5.电路测试结果 (12)5.1代码提示信息 (12)5.2模式转换电路图 (13)5.3错误提示电路图 (14)5.4正常计算结果显示图 (14)6.该设计电路的改进思想 (15)7.小结 (15)8.参考文献 (16)附录(程序清单) (16)基于单片机的多功能计算器设计1.方案论证与选择1.1输入模块方案一:采用独立式按键作为输入模块,其特点:直接用I/O口构成单个按键电路,接口电路配置灵活、按键识别和软件结构简单,但是当键数较多时,占用I/O口较多,比较浪费资源;其原理图如图1所示:图1 独立的功能按键方案二:采用矩阵式键盘作为输入电路,其特点:电路和软件稍复杂,但相比之下,当键数越多时越节约I/O口,比较节省资源。

其原理图如图2所示:图2 矩阵键盘输入本设计使用键盘输入预置用于计算或计时,按键较多。

若采用独立按键,需频繁按键,为软件设计增加负担,且操作界面不友好。

若采用矩阵式按键,可以方便地输入一个数值,使操作界面更具人性化,节约了宝贵的I/O口资源。

通过对比,故采用方案二作为系统输入模块。

1.2显示模块:方案一:用LCD显示,要用LCD显示,需要学习其专用的驱动控制芯片,比如HD61203,软件实现较为复杂,且LCD的价格昂贵。

方案二:采用LED数码管串行静态显示,虽然其显示亮度高,但是如果显示器的位数较多,需要增加锁存器,故而静态显示占用I/O口线较多,CPU的开销较大。

方案三:采用LED数码管并行动态显示,显示亮度不及静态显示,但电路简单,适合于显示位数较多的情况。

表1 用LED显示器显示十六位进制数的字形代码在下图表示:综上所述,采用方案三并行动态显示是本设计最佳显示方案。

LED数码管显示器由6个发光二极管组成,因此也称之为6段LED显示器,其排列形状如上。

注:该设计电路中的6段LED数码显示器是共阳极的。

2.其他硬件电路模块功能介绍:2.1驱动模块该设计的驱动电路是由74LS245来驱动的。

74LS245是我们常用的芯片,用来驱动LED或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。

74LS245还具有双向三态功能,既可以输出,也可以输入数据。

当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。

当片选端/CE低电平有效时,AB/BA=“0”,信号由 B 向 A 传输;(接收)AB/BA =“1”,信号由 A 向 B 传输;(发送)当/CE为高电平时,A、B均为高阻态。

由于P2口始终输出地址的高8位,接口时74LS245的三态控制端/1G和/2G接地,P2口与驱动器输入线对应相连。

P0口与74LS245输入端相连,/CE端接地,保证数据现畅通。

8051的/RD和/PSEN相与后接DIR,使得/RD或/PSEN有效时,74LS245输入(P0.i←Di),其它时间处于输出(P0.i→Di)。

2.2主控制模块该设计的核心控制电路是AT89C51单片机。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。

其引脚图以及工作原理如下:现简要介绍各引脚的功能。

⑴.主电源引脚:Vss-(20脚):地线Vcc-(40脚):+5V电源⑵.外接晶振或外部振荡器引脚:XTAL1-(19脚):当采用芯片内部时钟信号时,接外部晶振的一个引脚;当采用外部时钟信号时,此脚应接地。

XTAL1-(18脚):当采用芯片内部时钟信号时,接外部晶振的一个引脚;当采用外部时钟信号时,外部信号由此脚输入。

⑶.控制、选通或电源复用引脚:RST/Vp0-(9脚):复位信号输入;Vcc掉电后,此脚可接上备用电源,在低功耗条件下保持内部RAM中的数据。

ALE/PROG-(30脚):ALE即允许地址锁存信号输出,当单片机访问外部存储器时该脚的输出信号用于锁存P0的低8位地址,其输出的频率为时钟振荡频率的1/6。

PROG为编程脉冲输入端,当选用8751单片机时,由此脚输入编程脉冲。

/PSEN-(29脚):访问外部程序存储器选通信号,低电平有效,用于实现外部程序存储器的读操作。

/EA-(31脚):EA为访问内部或外部程序存储器选择信号,EA=0,单片机只访问外部程序存储器,故对8031此脚只能接地;EA=1,单片机访问内部程序存储器,固对8051和8751此脚应接高电平,但若程序指针PC值超过4KB(OFFFH)范围,单片机将自动访问外部程序存储器。

⑷.多功能I/O引:P0口-(32~39脚):P0数据/地址复用总线端口。

P1口-(1~8脚):P1静态通用端口。

P2口-(21~28脚):P2动态端口。

P3口-(10~17脚):P3双功能静态端口。

除作I/O端口外,它还提供特殊的第二功能,其具体含义为:P3.0-(10脚)RXD:串行数据接收端。

P3.1-(11脚)TXD:串行数据发送端。

P3.2-(12脚)INT0:外部中断0请求端,低电平有效。

P3.3-(13脚)INT1:外部中断1请求端,低电平有效。

P3.4-(14脚)T0:定时器/计数器0计数输入端。

P3.5-(15脚)T1:定时器/计数器1计数输入端。

P3.6-(16脚)WR:外部数据存储器写选通,低电平有效。

P3.7-(17脚)RD:外部数据存储器读选通,低电平有效2.3操作模块该计算器的实际操作模块如下图所示:3.软件设计本作品实现的功能全部是由C语言程序编写实现。

通过程序的编写使简单的器件实现丰富的功能。

3.1主功能计算器部分使用双精度类型来存放计算器的两个输入数值和最后的计算结果,最大接收的输入位数为6位,超出6位显示报错,并且需要清屏,然后重新输入。

该计算器只能实现正整数范围内的四则运算。

3.2计时和倒计时部分出于学习的目的,计时和倒计时采用定时器来实现的。

虽然有点误差但误差不大基本达到要求。

此外,该计算器还设有四个功能按键,可以输入相应的按键对应的键值,进行模式转换或数据更改。

3.3功能按键一开始默认的模式是计算模式即矩阵键盘执行计算模式下的功能。

按功能键“ON/C”切换到计时模式;在计时模式下按“=”功能键又可切换到计算模式;在计时模式下按“=”功能键后再按功能键“ON/C”又可切换到倒计时模式。

3.4软件流程图4硬件设计4.1电路工作框图4.2 硬件电路图4.3引脚锁定P0口接驱动器74LS245;P1口接显示器LED的段选;P2口接4*4矩阵键盘;P3口接外部中断0;5.电路测试结果5.1代码提示信息由于该电路可以实现计算、计时以及倒计时三种功能,因此,会有相应的模式转换提示代码信息;此外,由于该设计电路存在设计功能有限,所以会有相应的错误提示信息,主要如下:相关显示代码:报告代号显示含义1: -EOR-1 被除数等于0;2: -EOR-2 被减数小于减数;3: CHAG-1 表明从计算器模式切换到计时模式;4: CHAG-0 表明从计时器模式切换到计算器模式;5:-PAUSE 暂停;7: -StoP- 停止;8: OPPOSE 切换到倒计时模式;9: -EOR-9 超出可显示的最大值。

5.2模式转换电路图5.3错误提示电路图5.4正常计算结果显示图6.该设计电路的改进思想出于我们水平有限,虽然我们设计的这个计算器具有计算和计时的多功能,但是还有很多不足,例如,该计算器只能实现正整数的加减乘除运算,无法实现小数以及负数的运算。

所以可以将该设计电路进行扩展,真正设计为一个多功能的科学计算器。

7.小结不知不觉,两个星期的单片机实践课程学习就结束了,在一开始看这本书时,只对这门课程有了大致的了解,但只是理论上的理解,对如何应用却很是模糊,有些东西还是模棱两可,不是很明白,所以一开始进入实验室进行设计操作时,我是一头雾水,不知道到底该怎么办好,尤其是在程序编译时,程序经常有错误,让我们很是头疼郁闷,可没办法只好耐心慢慢找错误,有时真得都快失去耐心了,可是还是不能放弃,于是我们小组就在一起慢慢讨论,边看书边做,或者请教老师和同学,上课没完成,课后我们还是会重新再做,直到得出正确结论,虽然花了不少时间,但至少让我们学会了很多。

这是在软件中遇到的问题,此外在买器材时也遇到一些问题。

如,本来是要去买我们原先设定的标准型号的器材,但是在买器材的过程中发现,有些器材买不到,此时我们只好重新查阅资料,找具有相应功能的元器件代替,但必须要严格相近,否则,会影响电路的功能。

在焊接电路的时候,由于有些器件太小了如:贴片电容、贴片电阻等,所以难免会焊接错误,此时我们必须不停的调试找出错误,否则会导致整个电路的损坏。

虽然,在一开始接到这个设计任务时,我们感觉挺有压力的,担心做不好,但是团队的力量是不可小觑的,我们小组三人互相鼓励学习,所以我们在讨论中一步步进步,最终完成了任务。

当然,我们学到的只是一些最为基础的东西,还有很多东西还得深入学习,进一步加强。

总之在这次单片机学习中我们受益匪浅。

这不仅增强了我们对单片机设计的兴趣,更增强了自己的动手能力,这要感谢老师的指导和同学的帮助!电子行业是一门发展相当迅速的行业,每天都会有新的产品和应用需求,所以,在学好书本知识的同时还要时时关注相关领域的最新动态,学会自主分析解决目前技术中存在的问题。

相关文档
最新文档