单片机4X4键盘计算器课程设计Word格式文档下载.docx

上传人:b****1 文档编号:455895 上传时间:2023-04-28 格式:DOCX 页数:32 大小:376.31KB
下载 相关 举报
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第1页
第1页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第2页
第2页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第3页
第3页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第4页
第4页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第5页
第5页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第6页
第6页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第7页
第7页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第8页
第8页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第9页
第9页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第10页
第10页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第11页
第11页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第12页
第12页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第13页
第13页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第14页
第14页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第15页
第15页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第16页
第16页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第17页
第17页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第18页
第18页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第19页
第19页 / 共32页
单片机4X4键盘计算器课程设计Word格式文档下载.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机4X4键盘计算器课程设计Word格式文档下载.docx

《单片机4X4键盘计算器课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机4X4键盘计算器课程设计Word格式文档下载.docx(32页珍藏版)》请在冰点文库上搜索。

单片机4X4键盘计算器课程设计Word格式文档下载.docx

正文是实践设计报告的主体,具体由以下几部分组成:

(1)课程设计题目;

(2)课程设计任务与要求;

(3)设计过程(包括设计方案、设计原理、创新点以及采用的新技术等);

(4)方案的比较与论证;

(5)硬件电路设计,各个模块的设计与器件的选择;

(6)软件程序的设计与调试;

(7)课程设计总结(包括自己的收获与体会;

遇到的问题和解决的方法;

技术实现技巧和创新点;

作品存在的问题和改进设想等);

3.附录

附录1:

系统设计原理图

附录2:

系统硬件元器件清单

附录3:

系统的程序

七、考核方式与成绩评定办法

评定项目

评分成绩

1.设计的实物功能齐全,制作美观(50分)

2.态度认真、学习刻苦、遵守纪律(15分)

3.设计报告的规范化、参考文献充分(不少于5篇)(20分)

4.答辩(15分)

总分(100分)

备注:

成绩等级:

优(90分~100分)、良(80分~89分)、中(70分~79分)、及格(60分~69分)、60分以下为不及格.

八、参考书目

[1] 李朝青.单片机原理及接口技术(简明修订版).杭州:

北京航空航天大学出版社,1998

[2] 李广弟.单片机基础[M]。

北京:

北京航空航天大学出版社,1994

[3] 阎石.数字电子技术基础(第三版). 北京:

高等教育出版社,1989

[4] 廖常初.现场总线概述[J].电工技术,1999.

[5] 徐仁贵等编著.《单片微型计算机应用技术》.北京:

机械工业出版社。

2001年2月第1版 

[6] 张毅刚等编著.《单片机原理及应用》. 北京:

高等教育出版社。

2004年1月第1版

一、课程设计任务与要求

设计基于51单片机的简易计算器系统电路,并以该电路为基础进行编程,要求能够实现0-99之间的数进行加、减、乘、除运算的功能,并要求如下:

  1、设计简易计算器,要求能对0-99之间的数进行加、减、乘、除运算;

2、用4×

4的键盘作为输入设备;

 3、用LED或LCD进行显示;

4、使用C语言编写无符号数加、减、乘、除运算、输入和显示的程序;

  5、对系统的进行综合和调试,使其具有对0—99之间的数进行加、减、乘、除运算的功能,还具有清零功能等;

 6、编写课程设计的总结.

二、设计方案与选择方案

1、芯片

1.1、方案构思

本设计中的芯片可以采用两种方案,一种是以FPGA为核心处理芯片,配备相应的外设;

另一种是以STC89C52处理器,配备相应的外设。

(1)方案一:

采用FPGA控制

FPGA是一种高密度的可编程逻辑器件,自从Xilinx公司1985年推出第一片FPGA以来,FPGA的集成密度和性能提高很快,其集成密度最高达500万门/片以上,系统性能可达200MHz。

由于FPGA器件集成密度高,方便易用,开发和上市周期短,在数字设计和电子生产中得到迅速普及和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头.

但是基于SRAM编程的FPGA,其编程信息需存放在外部存储器上,需外部存储器芯片,且使用方法复杂,保密性差,而其对于一个简单的计算器而言,使用FPGA有点大材小用,成本太高。

(2)方案二:

采用AT89C51

单片机是单片微型机的简称,故又称为微控制器MCU(MicroControlUnit)。

通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:

中央处理器CPU,存储器和I/O接口电路等。

因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统.单片机广泛应用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单、实用方便、价格便宜等优点。

AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash ProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次.该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS—51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。

1。

2、方案比较与选择

通过以上两种方案的论证和比较,从设计的实用性、方便性和成本等诸多方面考虑,最终选择了以AT89C51单片机作为中央处理单元进行计算器的设计,这样设计能够实现对六位整数、两位小数的加、减、乘、除的四则运算.

2、输入模块

2。

1、方案构思

(1)方案一:

采用独立式按键作为输入模块

独立式按键输入模块,其特点是:

直接用I/O口构成单个按键电路,接口电路配置灵活、按键识别和软件结构简单;

但是当键数较多时,占用I/O口较多,比较浪费资源.其原理图如图1所示.

   

图1独立的功能按键     图2矩阵键盘输入

(2)方案二:

采用矩阵式键盘作为输入模块

矩阵式按键输入模块,其特点是:

电路和软件稍复杂,但相比之下,当键数越多时,越节约I/O口,比较节省资源。

其原理图如图2所示。

2.2、方案比较与选择

本设计中的输入模块使用的是矩阵键盘输入。

键盘输入预置用于计算,按键较多。

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

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

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

3、显示模块

3.1、方案构思

(1)方案一:

采用LED数码管静态显示

采用LED数码管的静态显示,其特点是:

其亮度较高;

这种显示方式接口,编程容易且管理简单;

不足的是,占用的I/O的线资源较多。

如果采用单片机或CPLD/FPGA来控制的话,势必存在浪费I/O口资源的问题.如图3所示.

图34位数码管静态显示

采用LED数码管动态显示

采用LED数码管的动态显示,其特点是:

其亮度比静态显示的亮度要差一些;

但其电路比较简单,适合于显示位数较多的情况。

如图4所示.

图4 4位数码管的动态显示

(3)方案三:

采用LCD1602液晶显示

采用LCD1602液晶显示,其特点是:

可以调节其背光亮度,这种显示方式接口,编程虽然有些麻烦,但管理较方便,占用的I/O口资源线也不多。

3.2、方案比较与选择

本设计中的显示模块使用的是LCD1602液晶显示.

在计算器运算中,需显示的数字、符号较多,按很据个方面的特点,而后可以发现LCD液晶显示,虽然在价格上的确是稍贵于LED数码管;

但数码管在硬件设计电路中,会因线太多、线路复杂而过于繁琐,则舍弃LED数码管,选择LCD液晶显示.

通过对比,故采用方案三作为系统显示模块。

三、整体方案原理框图

1硬件与软件系统设计

依据系统分析及实现功能,硬件小系统方框图如图1所示:

图5

依据系统硬件设计,软件系统主要包括:

单片机控制程序模块:

作为系统的主控制程序模块,用KeilC编程控制其他程序模块的协调工作;

键盘程序模块:

用来输入用户的功能,使单片机完成相应的控制功能;

液晶显示模块:

使用字符型液晶显示器显示用户的选择.

1。

2单片机模块

单片机控制主程序流程图如下:

图6

单片机外围扩展电路程序模块ﻩ

为了节约成本,本设计中液晶显示模块与单片机之间采用模拟口线的方式控制,键盘与单片机之间采用扫描的工作方式。

  键盘程序流程图(扫描方式)

键盘程序流程图如下所示:

图7

LCM程序流程图如下所示:

图8

 本设计的软件系统分别用伟福E6000和KeilC编写及编译。

4*4键盘程序模块用汇编语言和C语言编写,实现直接从P2口扫描得到键盘码,并采用查询方式得到与之对应的LCD字型码,在LCD上显示出来。

四、单元电路设计

1.1键盘输入

 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式。

为此,我们引入了矩阵键盘的应用,采用四条I/O线作为行线,四条I/O线作为列线组成键盘。

在行线和列线的每个交叉点上设置一个按键。

这样键盘上按键的个数就为4×

4个。

这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。

矩阵键盘的工作原理:

计算器的键盘布局如图5所示:

一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用.

 

    

        图9 键盘布局图

图10矩阵键盘内部电路图

键盘上的每一个按键都有一个键值.给键赋值的最直接办法是将行、列线按二进制顺序排列,当某一键按下时,键盘扫描程序执行到给该列置低电平0,若读出各行状态为非全1,这时的行、列数据组合成键值.键盘键值从左到右、从上到下依次是77,7B,7D,7E;

B7,BB,BD,BE,…,E7,EB,ED,EE。

这种负逻辑表示往往不够直观,因而采用行、列线加反向器或软件求反的方法将键盘改成正逻辑。

这时,键值依次为88,84,82,81;

48,44,42,41,…,18,14,12,11。

不论是正逻辑还是负逻辑,这种键值表示方式分散度在且不等距,用于指令不太方便。

对于不是4*4或8*4或8*8键盘,使用也不容易,故在许多场合下,采用依次排列键值的方法.这时的键值与键号相一致。

1.2单片机控制

MCS-51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。

如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。

单片机是靠程序运行的,并且可以修改。

通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!

因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能。

  

图11单片机控制电路的时钟电路和复位电路

LCD1602显示

    

        图12LCD1602显示

1602点阵字符液晶模块(LCM)引脚及功能

ﻩ1脚(VDD/VSS):

电源5V±

10%或接地。

2脚(VSS/VDD):

接地或电源(5±

0.5)V。

ﻩ3脚(VO):

反视度调整。

使用可变电阻调整,通常接地。

ﻩ4脚(RS):

寄存器选择(1:

选择数据寄存器;

0:

选择指令寄存器)。

5脚(R/W):

读/写选择(1:

读;

0:

写).

6脚(E):

使能操作(1:

LCM可做读写操作;

LCM不可做读写操作)。

ﻩ7脚(DB0):

双向数据总线的第0位。

8脚(DB1):

双向数据总线的第1位.

9脚(DB2):

双向数据总线的第2位.

ﻩ10脚(DB3):

双向数据总线的第3位。

ﻩ11脚(DB4):

双向数据总线的第4位。

ﻩ12脚(DB5):

双向数据总线的第5位.

13脚(DB6):

双向数据总线的第6位。

14脚(DB7):

双向数据总线的第7位。

ﻩ15脚(VDD):

背光显示器电源+5V。

16脚(VSS):

背光显示器接地。

五、实物效果图

     

           图13   实物效果图

六、心得体会

两周的时间,终于顺利完成了单片机的课程设计。

由于自己对单片机编程还不是很熟悉,结果在设计的时候遇到了一系列问题,程序总是调试部处理,不过还好,最后在同学的帮助下终于把程序调试出来了,虽然程序设计实现的功能与老师要求的不尽相同,不过勉强还算可以。

从这里我知道了基本知识的重要性。

其实进行程序设计的时候主要是对各功能模块的把握.计算器里面最难的一部分是矩阵键盘的扫描和编码,那个费了很大力气。

另外一点就是硬件焊接调试部分.焊接的时候到时轻松,一个下午就焊接好了,然后是调试部分.调试花费的时间还是比较长的。

不过有了上个学期数字电路焊接调试的经验,这次单片机调试还算是比较顺利。

我也是从电路板的正负电源检测起,一步一步来,最终得到了想要的结果。

调试的时候主要遇到了两个问题。

一个是键盘总是没有反应,为了这个自己调试了很久,前前后后把电路板检查了几次,最后才发现是键盘本身的问题,和同学们换了个好键盘才行。

另一个问题是总是显示不出来1、4、7这三个数字。

检测来检测去,发现来是在测试最小系统时在一个位选端接了高电平,对位选信号产生了影响。

当把那个高电平去掉后,终于得到了正确的结果。

总的来说这次课程设计达到了完成了基本任务,达到了基本要求。

通过亲身对程序设计和电路焊接调试的体会,自己对单片机有了进一步的了解,单片机编程能力也得到了提高。

电路板的焊接与调试,使自己电路调试的方法和思想进一步加强了。

这次单片机课程设计应该说是比较成功的。

七、参考文献

[1]李朝青.单片机原理及接口技术(简明修订版).杭州:

北京航空航天大学出版社,1998

[2]李广弟.单片机基础[M]。

北京航空航天大学出版社,1994

[3] 阎石.数字电子技术基础(第三版)。

北京:

[4] 廖常初.现场总线概述[J].电工技术,1999.

八、附录

系统程序

#include<

reg52.h>

#define ucharunsignedchar

#defineuintunsigned int

sbit rs=P1^0;

sbitrw=P1^1;

sbite=P1^2;

voidwrite_dat(uchardat);

voidwrite_com(ucharcom);

voidkeyscan();

/**********************

功能说明:

显示编码,加上0x30,

分别为'

1'

,'

2','

3'

,’+',

’4'

,’5'

’6’,’—'

**********************/

ucharcodetable1[]=

1,2,3,0x2b—0x30,

4,5,6,0x2d-0x30,

7,8,9,0x2a—0x30,

0,0x3d-0x30,0x01-0x30,0x2f-0x30

};

uchar k=0,flag=0,num,fuhao,i;

longa,b,c;

void delay(uintz)

uint x,y;

 for(x=z;

x>0;

x-—)

   for(y=110;

y>0;

y——);

}

void keyscan()

{

 uchartemp;

 P2=0xfe;

  temp=P2;

 temp=temp&0xf0;

while(temp!

=0xf0)

{

 delay(5);

  temp=P2;

 temp=temp&0xf0;

while(temp!

=0xf0)

 {

  temp=P2;

 switch(temp)

   {

   case0xee:

num=0;

      break;

 

   case0xde:

num=1;

    break;

   case0xbe:

num=2;

   break;

     case0x7e:

num=3;

   break;

   } 

while(temp!

=0xf0)

   {temp=P2;

    temp=temp&

0xf0;

    }

 }

/*当按下1,2,3,松手后执行下面这段语句*/

     if(num==0||num==1||num==2)

   {

       if(flag==0)

      a=a*10+table1[num];

//如果没有按符号键,符号前的数值为a

   elseif(flag==1)

      b=b*10+table1[num];

 //如果按了符号键,符号后的数值为b

      if(k==1) //如果之前按了'

='

号,再按键时清屏,进行下一次计算

 {

     k=0;

      write_com(0x01);

     }

   }

 else if(num==3) //判断按下’+'

   {

   flag=1;

     fuhao=1;

 }

     i=table1[num];

//显示按下的键

     write_dat(0x30+i);

 

P2=0xfd;

  temp=P2;

 temp=temp&0xf0;

 while(temp!

   delay(5);

   temp=P2;

 temp=temp&0xf0;

 while(temp!

=0xf0)

     {

  temp=P2;

switch(temp)

       case 0xed:

num=4;

      break;

  

   case0xdd:

num=5;

       break;

   case0xbd:

num=6;

   break;

  case0x7d:

num=7;

    break;

   } 

  while(temp!

=0xf0)

  {temp=P2;

    temp=temp&0xf0;

   }

   }

if(num==4||num==5||num==6)//判断是否按下'

4’,'

5'

'

6’

     {

   if(k==1)

  {

     k=0;

    write_com(0x01);

   }

   if(flag==0)

        a=a*10+table1[num];

     else if(flag==1)

       b=b*10+table1[num];

 }

  elseif(num==7)

  {

    flag=1;

      fuhao=2;

 

 }

   i=table1[num];

 //显示按下的键

   write_dat(0x30+i);

  }

  P2=0xfb;

 temp=P2;

temp=temp&

0xf0;

while(temp!

=0xf0)

  delay(5);

 temp=P2;

   temp=temp&0xf0;

while(temp!

=0xf0)

  temp=P2;

   switch(temp) //

   {

   case0xeb:

num=8;

 break;

    case0xdb:

num=9;

  break;

   case0xbb:

num=10;

     break;

   case0x7b:

num=11;

   break;

    

     } 

   while(temp!

   {temp=P2;

       temp=temp&0xf0;

   if(num==8||num==9||num==10)//判断是否按下'

7','

8’,'9'

      if(k==1)

    k=0;

    write_com(0x01);

    }

  if(flag==0)

   a=a*10+table1[num];

  elseif(flag==1)

    b=b*10+table1[num];

  }

  else if(num==11)//判断是否按下’*’

flag=1;

fuhao=3;

      }

 i=table1[num];

   write_dat(0x30+i);

  }

   P2=0xf7;

  temp=P2;

temp=temp&

0xf0;

while(temp!

=0xf0)

 {

   delay(5);

   temp=P2;

 temp=temp&0xf0;

  while(temp!

=0xf0)

  {

   temp=P2;

   switch(temp)

    {

   case0xe7:

num=12;

   // 0键

  break;

  case0xd7:

num=13;

  //'

=’

break;

   case0xb7:

num=14;

//清零键

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2