历史上的今天
返回首页

历史上的今天

今天是:2024年12月05日(星期四)

正在发生

2019年12月05日 | 51单片机之4位数加法计算器的设计报告

2019-12-05 来源:51hei

一、绪 言

    近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。 电子时钟是现代社会中的主要计时工具之一,广泛应用于手机,电脑,汽车等社会生活需要的各个方面,及对时间有要求的场合。本设计采用AT89C52单片机作为主要核心部件,附以上电复位电路,时钟电路及按键调时电路组成。数字钟已成为人们日常生活中: 必不可少的必需品, 广泛用于个人家庭以及车站、 码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。 由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性 能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。


二、系统设计2.1 设计任务

    1、通过4*4矩阵键盘输入数字及运算符;

    2、可以进行4位十进制数以内的加法预算。如果计算结果超出四位数,则全部显示“E”;

    3、可以进行加减乘除所有运算;

    4、添加其他功能。


2.2 方案比较与论证

2.2.1 系统整体流程图

图1 系统整体流程图


2.2.2 计算器的控制方案论证

用4*4的矩阵键盘组成0-9数字键及加、减、乘、除、等于、清零按键,LCD屏幕实时显示输入的数字和运算符号,每按下一个按键都有蜂鸣器发出的响声。从矩阵键盘输入一个数字,选择运算符,再输入一个数字,然后按下“等于”键,最后的计算结果会呈现在LCD屏幕上。


2.2.3 单片机的选择方案论证

方案一:采用可编程逻辑期间CPLD作为控制器。CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、I/O资源丰富、易于进行功能扩展。采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高,且从使用及经济的角度考虑我们放弃了此方案


方案二:采用Atmel公司的AT89C52单片机作为控制器。AT89C52是一个低功耗,高性能的51内核的CMOS 8位单片机,片内含8k空间的可反复擦些1000次的Flash只读存储器,具有256 bytes的随机存取数据存储器(RAM),32个双向I/O口,2个16位可编程定时计数器。


综合考虑,选择方案二,采用Atmel公司的AT89C52单片机作为控制器。


2.2.4 键盘选择方案论证

方案一:采用独立式键盘。由于各键相互独立,每个按键各接一根输入线,通过检测输入线的电平状态可以很容易的判断哪个按键被按下。此种键盘适用于按键较少或操作速度较高的场合。但本题发挥部分要求16个功能键,按键数目较多,这就需要较多的输入口线,而且电路结构复杂。故此方案不可取。


方案二:采用矩阵键盘。它由行和列组成,按键位于行列的交叉点上,行线信号和列线信号分别通过两个接口和CPU相连,通过行列扫描法判定按键的位置,此方案适用于按键较多的场合。


通过对4位数加法计算器题目的分析,采用4*4行列式键盘。


2.2.5 显示模块的选择方案论证

方案一:采用带字库LCD模块显示。能显示复杂的信息,具有质量轻,体积小,功耗低,指令功能强,接口简单,可靠性强等优点,显示内容丰富,图形美观,易于人机交流。但是价格昂贵。


方案二:采用LED数码管显示。数码管能显示数字和符号,但是占用I/O口资源较多,对于简单的电路可以选用此方案。

计算器,需要较为强大的人机交互界面,故选用方案一,显示所需信息。


2.2.6 蜂鸣器的选择方案论证

方案一:采用有源蜂鸣器。有源蜂鸣器内部带震荡源,只要一通电就会发出响声。

方案二:采用无源蜂鸣器。无源蜂鸣器内部不带震荡源,所以用直流信号无法令其鸣叫,必须用2K~5K的方波去驱动它。


综合考虑,为了程序控制的方便,选用了方案一。


三 硬件电路设计3.1 计算器控制电路图

图2 计算器控制线路图


3.2 矩阵式键盘的设计

键盘电路如图3所示。设计数字键0~9 的键号依次为0~9,运算符号分别为“+”、“-”、“*”、“/”,以及“=”和清零“C”,通过逐行扫描函数来确定按下的键位。

图3 键盘电路


3.3 LCD1602显示电路的设计

LCD1602液晶屏采用LM016L型号元件,其电路如图3所示。

图4 LCD1602显示电路


3.4 蜂鸣器驱动电路的设计

蜂鸣器的驱动采用PNP三极管来驱动,低电平有效。其电路如图5 所示。

图5 蜂鸣器电路图


3.5 主要元器件选择

主要元器件选用型号和数量如表1所示:

序号

材料名称

规格型号

数量

元件代号

1

单片机

AT89C52

1

U1

2

晶振

12MHz

1

X1

3

三级管

MJE350

1

Q1

4

键盘

4*4

16


5

LCD1602

LM016L

1

LCD1602

6

蜂鸣器


1

BEEP

7

电阻

1k

1

R1


四、程序流程图


6.计算器仿真

在完成了计算器硬件设计和软件设计以后,便进入系统的调试阶段。系统的调试步骤和方法基本上是相同的,但具体细节和所采用的开发系统以及用户系统选用的单片机型号有关,如可选用Keil软件进行软件调试,用Proteus软件完成硬件调试。


6.1 Keil调试

6.2 Proteus调试

     

7 结束语

通过这次课程设计,使我们得到了一次用专业知识和专业技能去分析问题、解决问题全面系统的锻炼。使我们在单片机的基本原理、单片机应用系统开发过程,以及用C语言设计程序的思路技巧等方面都能向前迈了一大步,为我们日后成为合格的应用型人才打下良好的基础。


单片机源程序如下:

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit lcden=P2^1;         //定义E口

sbit lcdrs=P2^0;         //定义RS口

sbit beep=P2^2;          //定义蜂鸣器

uchar code table[]={'0','1','2','3','4','5','6',                 //创建键位数组,数字,运算符号,等于号,清零(小数点)

                                                        '7','8','9','+','-','*','/','=','.'};                                                                     

uchar key,flag1,js,k1,k2;

uchar a[20],b[20];

float jieguo=0;

void delay(uchar z) //延迟函数

{

              uchar x,y;

              for(x=z;x>0;x--)

                            for(y=110;y>0;y--);

}

void write_cmd(uchar cmd) //写命令函数

{

              lcdrs=0;

              P1=cmd;

              delay(5);

              lcden=1;

              delay(4);

              lcden=0;

}

void write_data(uchar date) //写数据函数

{

              lcdrs=1;

              P1=date;

              delay(5);

              lcden=1;

              delay(5);

              lcden=0;

}

void init()              //LCD初始化函数

{

              lcden=0;

              write_cmd(0x38); //设置16x2显示,8位数据接口

              write_cmd(0x0c); //设置开显示,不显示光标(关显示是0x08)

              write_cmd(0x06); //写一个字符后地址指针加1

              write_cmd(0x01); //清屏

}             

void keyscan()

{

              uchar temp,uu=0xf7;

              uint i;

              for(i=0;i<4;i++)

              {

                            uu=_crol_(uu,1); //左移

                            P3=uu;

                            temp=P3;

                            temp=temp&0x0f;

                            if(temp!=0x0f)

                            {

                                          delay(10);

                                          temp=P3;

                                          temp=temp&0x0f;

                                          if(temp!=0x0f)

                                          {

                                                        temp=P3;

                                                        switch(temp)

                                                        {

                                                                      case 0xee:key=1;beep=0;delay(200);beep=1;break;                                            //延迟200响声

                                                                      case 0xde:key=2;beep=0;delay(200);beep=1;break;

                                                                      case 0xbe:key=3;beep=0;delay(200);beep=1;break;

                                                                      case 0x7e:key=10;beep=0;delay(200);beep=1;break;

                                                                      case 0xed:key=4;beep=0;delay(200);beep=1;break;

                                                                      case 0xdd:key=5;beep=0;delay(200);beep=1;break;

                                                                      case 0xbd:key=6;beep=0;delay(200);beep=1;break;

                                                                      case 0x7d:key=11;beep=0;delay(200);beep=1;break;

                                                                      case 0xeb:key=7;beep=0;delay(200);beep=1;break;

推荐阅读

史海拾趣

DACHANG公司的发展小趣事

随着公司实力的不断增强,DACHANG公司开始积极拓展国际市场。公司参加了多个国际电子展览会,与国际同行进行了广泛的交流与合作。同时,DACHANG公司还积极寻求与国际知名企业的合作机会,不断提升自己在全球电子产业链中的地位和影响力。

全鹏(CHAMPION)公司的发展小趣事

随着全鹏在巴西市场的稳固地位,公司决定在2006年创立C3 TECH品牌,以进一步提升其品牌影响力。C3 TECH品牌的创立不仅增强了全鹏在巴西市场的竞争力,还为公司带来了更多的商机。通过精心策划的市场营销活动和优质的产品质量,C3 TECH品牌迅速获得了当地消费者的认可,并在市场上树立了良好的口碑。

AC Interface Inc公司的发展小趣事

在电子行业中,ABC Electronics Inc. 深知单打独斗难以取得长远发展。因此,公司积极寻求与其他企业的合作机会,通过技术共享、联合研发、市场互补等方式实现共赢。例如,公司与一家知名芯片制造商合作,共同开发了一款具有高性能的嵌入式系统解决方案,成功应用于智能家居、工业自动化等领域。这种合作模式不仅加速了产品的研发进程,也提高了公司的市场竞争力。

Eutech公司的发展小趣事

在全球化的浪潮下,EUtech公司积极寻求国际合作。他们与德国的氢探新能源公司建立了长期稳定的合作关系,共同研发燃料电池系统控制技术。通过共享资源、互补优势,双方不仅提高了产品的竞争力,还推动了整个行业的技术进步。

极海半导体(Geehy)公司的发展小趣事

EUtech公司注重品牌塑造和市场拓展。他们通过参加国际展会、举办技术研讨会等方式提高品牌知名度。同时,公司积极拓展海外市场,产品已出口到新加坡、香港、韩国等国家和地区。凭借优异的产品质量和良好的市场口碑,EUtech公司逐渐在国际市场上树立起了品牌形象。

AOS公司的发展小趣事

随着技术的不断发展和市场的扩大,AOS公司开始积极寻求全球扩张的机会。1998年,AOS在南京独资成立了中国总部,开始了其在中国的深耕之旅。通过多年的努力,AOS在中国建立了完善的产研基地和销售网络,其产品横跨家用和商用两大领域,赢得了广大消费者的信任和喜爱。如今,AOS已成为中国市场上备受推崇的热水设备品牌之一。

问答坊 | AI 解惑

刚学visual studio 2005 下VC++编串口通信老是弄不通

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {                         if(COM1->Checked == true)   &nbs ...…

查看全部问答>

我想用testcap写了个虚拟摄像头驱动程序,但是我怎么把视频数据传递给驱动呢,谢谢你们指教!

我想用testcap写了个虚拟摄像头驱动程序,但是我怎么把视频数据传递给驱动呢,谢谢你们指教!…

查看全部问答>

wince下的ftp客户端问题

在wince(或wm5)下实现ftp客户端后,用gprs发数据失败 听说gprs在某一时间只会分配不固定的IP和一个可用端口,而ftp需要2个,一个传信息,一个传数据 请问如果用类似NAT穿透的技术能否达到目的? 我主要是想从wince上传文件到服务器,很多人都 ...…

查看全部问答>

labview怎么跟汇编语言联啊

想用labveiw做一些接口实验,但是需要用到汇编语言,怎么联啊…

查看全部问答>

纳米测量中学习曲线 和灵敏度/分辨率的挑战

仪器操作中繁琐的编程[1]工作以及神秘的种种细节会分散工作繁重的研究者的精力。许多电特性测量工具[2]都极为复杂,而且它们的数据传输机制极为冗琐,需要大容量的存储介质。图形分析所花费的时间也过长。学习和编程设定的工作会占用本来应该用于 ...…

查看全部问答>

用线程解决网络断开重连的问题

网络断开重连-------线程   网络断开后重连的问题,可以使用线程去重连,即创建一个线程专门负责去建立连接,如果连接断开,则由这个线程去重新连接,连接完成后,这个线程则会阻塞(休眠)。        ...…

查看全部问答>

FIR滤波问题

void fir_filter(void) {         int i,j;         float sum;         float x1[932];         float h[31]={ 0.01492972,0.01096342,0.01458647,0.0186, ...…

查看全部问答>

【TI首届低功耗设计大赛】第二个外设程序 MSP430FR5969读取ADXL362数据通过CC1101发送

本帖最后由 littleshrimp 于 2014-12-27 13:24 编辑 世界上最低功耗的MCUMSP430FR5969+世界最低功耗的加速度传感器ADXL362堪称完美组合。组合完能嘎蛤?谁知道,先跑起来再说。MSP430FR5969就不介绍了,那不是一搬的强大。ADXL362是一款超低功耗 ...…

查看全部问答>

TMDSEVM6678L

2015年2月份才能入关发货,还没到手,够新了吧,想换个达芬奇系列开发板,XDS560仿真器也行…

查看全部问答>