基于8255的8LED显示的动态显示器.docx

上传人:b****6 文档编号:11938664 上传时间:2023-06-03 格式:DOCX 页数:30 大小:196.76KB
下载 相关 举报
基于8255的8LED显示的动态显示器.docx_第1页
第1页 / 共30页
基于8255的8LED显示的动态显示器.docx_第2页
第2页 / 共30页
基于8255的8LED显示的动态显示器.docx_第3页
第3页 / 共30页
基于8255的8LED显示的动态显示器.docx_第4页
第4页 / 共30页
基于8255的8LED显示的动态显示器.docx_第5页
第5页 / 共30页
基于8255的8LED显示的动态显示器.docx_第6页
第6页 / 共30页
基于8255的8LED显示的动态显示器.docx_第7页
第7页 / 共30页
基于8255的8LED显示的动态显示器.docx_第8页
第8页 / 共30页
基于8255的8LED显示的动态显示器.docx_第9页
第9页 / 共30页
基于8255的8LED显示的动态显示器.docx_第10页
第10页 / 共30页
基于8255的8LED显示的动态显示器.docx_第11页
第11页 / 共30页
基于8255的8LED显示的动态显示器.docx_第12页
第12页 / 共30页
基于8255的8LED显示的动态显示器.docx_第13页
第13页 / 共30页
基于8255的8LED显示的动态显示器.docx_第14页
第14页 / 共30页
基于8255的8LED显示的动态显示器.docx_第15页
第15页 / 共30页
基于8255的8LED显示的动态显示器.docx_第16页
第16页 / 共30页
基于8255的8LED显示的动态显示器.docx_第17页
第17页 / 共30页
基于8255的8LED显示的动态显示器.docx_第18页
第18页 / 共30页
基于8255的8LED显示的动态显示器.docx_第19页
第19页 / 共30页
基于8255的8LED显示的动态显示器.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于8255的8LED显示的动态显示器.docx

《基于8255的8LED显示的动态显示器.docx》由会员分享,可在线阅读,更多相关《基于8255的8LED显示的动态显示器.docx(30页珍藏版)》请在冰点文库上搜索。

基于8255的8LED显示的动态显示器.docx

基于8255的8LED显示的动态显示器

南京邮电大学

学年第 学期

课程设计实验报告

题  目 基于8255的8LED显示的动态显示器

专  业     通信工程    

学  号              

姓  名              

指导老师              

实验日期       年  月  日

题目:

基于8255的8LED显示的动态显示器

一,实验目的和要求

1,Proteus软件的MCS51单片机仿真学习

2,根据提供的参考工程,在proteus平台自己重新设计实验电路所需要的电器原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取,原理图的电气连接,程序的编写编译以及运行,并能查出其错误等。

基本要求:

1. 用数码管正常显示数字“12345678”。

2. 通过按键可改变显示方式。

3. 设计显示屏的动态效果,用10个按键,每键对应一种滚动技术。

4. 基于8255口是指显示和键盘都由8255的IO口控制

发挥部分:

1 设计所有动作的联合效果。

2 设计二个变速按键,可多级改变滚动速度。

3 设计一台魔术电子钟,采用自动变换,随机组合,数据每10秒变换一次。

动态显示格式:

1 静止

2 整体闪烁

3 单字闪烁

4 整体向前、向后滚动

5 单字移动

6 两边向中间压缩

7 中间向两边扩张

8 上下压缩

9 文字上下滚动

10组合动作(每一字符执行上述一个动作,并同时运动)

二,实验仪器

微型计算机

三,实验原理

基于8255的8LED显示的动态显示器,是由8255a做键盘控制口连接c51,并驱动8位7段数码管实现相应显示功能。

具体的,c51,p1口直接进行led数码管的位控制;p2口经74HC573译码后控制8255a的片选与内部奇存器选择;p0口连接8255a的D端口,并由它的PA口驱动7段led,PB口连接键盘,并做为I/O口与c51通信,以实现相应显示变化。

四,基本原件及其原理

单片机微型计算机简称单片机,是指在一块芯片体上集成了中央处理器CPU、随机存储器RAM、程序存储器ROM或EPROM、定时器/计数器、中断控制器以及串行和并行I/O接口等部件,构成一个完整的微型计算机。

目前,新型单片机内还有A/D及D/A转换器、高速输入/输出部件、DMA通道、浮点运算等特殊功能部件。

由于它的结构和指令功能都是按工业控制设计要求设计的,特别适用于工业控制及其数据处理场合,因此,确切的称谓是微控制器,单片机只是习惯称呼。

51单片机引脚图如下:

(1)单片机的特点

1)有优异的性能价值比。

2)集成度高、体积小、有很高的可靠性。

单片机把各个功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。

另外,其体积小,对于强磁场环境易于采取措施,适合于恶劣环境下工作;也易于产品化。

3)控制功能强。

为了满足工业控制的要求,一般单片机的指令系统中均有及其丰富的转移指令、I/O口逻辑操作及位处理指令。

一般来说,单片机的逻辑控制功能及运行速度高于同意档次的微机。

4)单片机的系统扩展和系统配置都比较典型、规范,而且非常容易构成各种规模的应用系统。

(2)单片机并行I/O接口的扩展

单片机与外部交换信息是通过I/O接口电路来实现的。

AT89C51单片机本身有4个8位的并行I/O口P0-P3,但实际使用时往往再增加些I/O口,以便与外部设备交换数据。

AT89C51单片机外部RAM和扩展I/O接口是统一编址的。

用户可以把外部64KBRAM空间的一部分作为扩展I/O接口地址空间,每一个I/O接口相当于一个RAM存储单元,访问外部RAM存储单元就像访问外部I/O接口,即用“MOVX”指令对扩展I/O接口进行输入输出操作。

查询式键盘的接口电路

查询式键盘属于独立式键盘,键盘的各个按键之间彼此是独立的且是最简单的键盘电路。

每个键地接入一根数据输入线。

如图所示。

注意:

由于每一个按键均需要一根I/O口线,当键盘按键数量比较多时,需要的I/O口线也较多,因此独立式键盘只适合于按键较少的应用场合。

一般情况下,按键数等于占用I/O端口数。

查询式键盘的结构图如图所示:

P1.0

P1.1

查询式键盘的接口电路

查询式键盘可以工作在多种方式下,中断方式、程序查询方式、定时查询发送和中断查询方式。

在中断模式下,按键的数量受到外部中断源的限制。

在有特殊需要的场合,还可以借用内部的定时器中断。

所以在这种模式下,按键的数目小于外部中断源和单片机定时器数量之和。

程序查询和定时查询类似,都是通过读I/O状态,当有键被按下时相应的I/O口线变为低电平,而未被按下的键对应的I/O口线保持为高电平,这样通过读I/O口状态可判断是否有键按下和哪一个键被按下。

7SEG-MPX8-CA-BLUE的基本参数

7SEG-MPX8-CA-BLUE为蓝色共阳极8位七段数码管

7SEG-MPX8-CA-BLUE

五,仿真软件的使用

1.Keil软件的使用:

首先正确安装keil软件—>打开keil—>project—>newUvisionproject—>为工程取名字,并选择工程要保存的路径,建议每个工程新建一个文件夹,方便文件管理—>出来一个对话框,是选择芯片的,你根据你的芯片公司和型号来选择就行了,比如:

最常用的at89c51,点atmel,找到at89c51,点OK后会出来一个对话框,问你是否添加启动文件,点“是”—>这样就建好了一个工程,点File菜单下New新建文件—>先保存文件,点保存按钮后出来路径框,取名字后缀是.c或者.h,点保存—>接下来在左边project下把Target1点开,在SourceGroup1上右键,点击AddFiletoGroup'SourceGroup1'—>在弹出的框中点刚刚保存的文件,然后点Add,关闭对话框,左边project框中可以看到文件已经添加—>在开始之前还是先来配置一下keil环境,点击工具栏品字图标左边像魔棒一样的按钮—>接下来的配置比较复杂,我用图来解释,Target项目下只改一个晶振的值,Output下要点击生产HEX文件,Debug下左边是keil仿真调试配置,右边是程序下载到芯片调试配置,看你是怎么用了。

—>完工,可以编程调试。

2.proteus软件的使用:

新建文件,查找元件,并添加。

画好电路图后,添加用keil生成的hex文件,即可运行。

六,实验数据

1.实验连接图

2.实验结果图(初始状态)

3.显示功能

4.实验程序清单

/*--------------------库文件--------------------------*/

#include

#include

/*---------------------宏定义-------------------------*/

#defineuintunsignedint

#defineucharunsignedchar

/*----------------芯片端口地址定义---------------------*/

#defineCOM8255 XBYTE[0X7FFF]     //8255的命令口

#definePA8255 XBYTE[0X1FFF]     //8255的PA

#definePB8255 XBYTE[0X3FFF]     //8255的PB

ucharcodedu_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};  

//8段共阳极数码管显示码值   

ucharcodebit_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};     

//数码管显示的位值 

/*--------------定义系统变量--------------------------------*/

bitflag=0;           //定义状态标志位

ucharvalue=0,wei;

ucharcount;

/*------------------------------------------*/

/*形式参数:

void              */

/*返回值:

void                */

/*函数描述:

延时函数              */

/*------------------------------------------*/

voiddelayms(ucharx)       //ms延时函数

{

  uchary;

  for(;x>0;x--)

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

}

voidkeyscan()

{

  uchari=0,j=0;

  PB8255=0xf0;

  if(PB8255!

=0xf0)

  {

    delayms

(1);

    if(PB8255!

=0xf0)

    {

      switch(PB8255)

      {

        case0xe0:

j=1;break;

        case0xd0:

j=2;  break;

        case0xb0:

j=3;  break;

        case0x70:

j=4;break;

      }

      PB8255=0x0f;   //反转

      switch(PB8255)

      {

        case 0x0e:

i=0;break;

        case 0x0d:

i=1;break;

        case 0x0b:

i=2;break;

        case 0x07:

i=3;break;

      } 

      value=i*4+j-1;

      flag=1;

      if(value==2)

      {

        wei++;

        if(wei>=9)

          wei=1;

      }  

      while(PB8255!

=0x0f); //按键弹起  

      

    }

  }

}

/*************************状态一-静止****************************/

voidstate1()

{

  uchari;

  while(value==0)             //判断是否为状态1

  {

    for(i=1;i<9;i++)

    {

      P1=bit_code[i-1];      //输入位选码值

      PA8255=du_code[i];      //输入段选码值

      keyscan();     //扫描键盘

      if(flag==1)

      {

        flag=0;

        return;     //有键按下返回

      }

      delayms

(1);       //延时

    }    

  }  

}

/**************************状态二-整体闪烁***************************/

voidstate2()

{

  uchari=0,j=0;

  while(value==1)            //判断是否为状态2

  {

    for(j=0;j<50;j++)

    {

      for(i=1;i<9;i++)

      {

        P1=bit_code[i-1];     //输入位选码值

        PA8255=du_code[i];     //输入段选码值

        keyscan();    //扫描键盘

        if(flag==1)

        {

          flag=0;

          return;    //有键按下返回

        }

        delayms

(2);     //延时

      }

    }

    for(j=0;j<50;j++)

    {

      P1=0x00;

      keyscan();      //扫描键盘

      if(flag==1)

      {

        flag=0;

        return;      //有键按下返回

      }

      delayms(20);

    }

  }              //延时

}

/******************************状态三-单字闪烁***************************/

voidstate3()

{

  uchari=0,j=0;

  while(value==2)              //判断是否为状态3

  {

    for(j=0;j<50;j++)

    {

      for(i=1;i<9;i++)

      {

        P1=bit_code[i-1];     //输入位选码值

        PA8255=du_code[i];     //输入段选码值

        keyscan();   //扫描键盘

        if(flag==1)

        {

          flag=0;

          return;     //有键按下返回

        }

        delayms

(2);     //延时

      }

    }

    for(j=0;j<50;j++)

    {

      for(i=1;i<9;i++)

      {

        if(i==wei)

          P1=0x00;

        else

          P1=bit_code[i-1];    //输入位选码值

        PA8255=du_code[i];      //输入段选码值

        keyscan();    //扫描键盘

        if(flag==1)

        {

          flag=0;

          return;    //有键按下返回

        }

        delayms

(2);     //延时

      }

    }    

  }

}

/*************************状态四-整体向前、向后滚动*************************/

voidstate4()

{

  uchari=0,j=0,z=0;

  while(value==3)                  //判断是否为状态4

  {

    for(z=0;z<8;z++)

    {

      for(j=1;j<120;j++)

      {

        for(i=1;i<9;i++)

        {

          P1=bit_code[i-1];        //输入位选码值

          PA8255=du_code[(i+z)%8+1];      //输入段选码值

          keyscan();

          if(flag==1)             //扫描键盘

          {

            flag=0;

            return;  //有键按下返回

          }

          delayms

(2);

        }              //延时

      }

    }                      

  }

}

/***************************状态五-单字移动*******************************/

voidstate5()

{

  uchari=0,j=0;

  while(value==4)                  //判断是否为状态5

  {

    for(j=1;j<9;j++)

    {

      for(i=1;i<9;i++)

      {

        P1=bit_code[i-1];        //输入位选码值

        PA8255=du_code[j];        //输入段选码值

        keyscan();       //扫描键盘

        if(flag==1)

        {

          flag=0;

          return;    //有键按下返回

        }

        delayms(1500);     //延时

      }

    }    

  }

}

/************************状态六-两边向中间压缩*************************/

voidstate6()

{

  uchari=0,j=0;;

  while(value==5)                //判断是否为状态6

  {

    for(j=1;j<100;j++)

    {

      for(i=1;i<9;i++)

      {

        

        P1=bit_code[i-1];        //输入位选码值

        PA8255=du_code[i];        //输入段选码值

        delayms(3);

        keyscan();       //扫描键盘

        if(flag==1)

        {

          flag=0;

          return;    //有键按下返回

        }

      }      

    }  

    delayms(500);       //延时

    for(j=1;j<100;j++)

    {

      for(i=2;i<5;i++)

      {

        P1=bit_code[i-1];       //输入位选码值

        PA8255=du_code[i-1];     //输入段选码值

        delayms(3);

        keyscan();     //扫描键盘

        if(flag==1)

  

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

当前位置:首页 > 人文社科 > 法律资料

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

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