实验报告实验二 开关控制LED数码管实验

时间:2024.4.13

实验二       开关控制LED数码管实验

一、实验目的:

1.通过AT89C51读入4位开关K1、K2、K3、K4的输入状态,并按照二进制编码关系0-F输出到数码管显示。(如K4K3K2K1全部按下,则显示F;若只有K2按下,则显示2。)

2.掌握LED数码管的静态显示。

3.掌握I/O口的控制方法。

二、PROTEUS电路设计:

三、实验仪器和设备

PC机、PROTEUS软件或W-A-51综合开发学习板

四、源程序设计:

根据电路图自行编写并调试。

程序:

MAIN: MOV A,P2

CPL A

MOV DPTR,#TAB

MOVC A,@A+DPTR

ANL A,#0FH

MOV P0,A

TAB:

DB 3FH,06H,5BH,4FH,66H

DB 6DH,7DH,07H,7FH,6FH

RET

END


第二篇:实验报告——LED显示控制


实验一  LED显示控制

一、硬件介绍   

1)  C28X芯片提供了56个多功能引脚,用户可以将这些引脚作为片内外设的输入输出引脚,当不使用片内外设时,也可以将他们作为数字I/O口。本实验是将其用作GPIO口,如

图1所示。

图1  GPIO口应用

2)74HC164是一个8位的串并行数据转换的芯片,其时序图如图2所示。

图2  74164工作时序图

由图2知,输入端A和B相与是74HC164的输出,若输入信号只有一个(A端),则可以将其中一个输入端置1(B端),则可将输入的串行信号(A端)转化成并行输出(QA--QH)。

CLEAR是低电平有效的复位信号,即CLEAR为低电平时,输出端(QA—QH)全部置0,其为高电平时芯片可正常工作。

CLOCK是上升沿有效的时钟信号,即每来一个上升沿,输入的数据就会传一位,输出端QA会输出最新的输入信号,而QB则重复前一个时钟的QA,QC则重复前一个时钟的QB,……待满8个上升沿时,一个输入的8位串行数据就被转换成8位的并行数据输出。

3)8×8 LED的显示模块如图3所示。

图3  8×8 LED的显示模块

由图3可知,若要是LED正常发光,将LED的正向加高电平,负向加低电平即可。显示图像或字可通过动态扫描得到结果。

二、硬件连接

实验模块                    控制模块

G LED DISPLAY               A DSP SECTION

LED_A2(J32)                 SPISIMOA(J34)

LED_B2(J32)                 SPISOMIA(J34)

CLKIN2(J32)                 SPICLKA(J34)

/CLR2(J32)                  SPISTEA(J34)

LED_A1(J5)                  PWM7(J35)

LED_B1(J5)                  PWM8(J35)

/CLKIN1(J5)                 PWM9(J35)

/CLR1(J5)                   PWM10(J35)

除此之外,通过用跳线头短接J6(G LED DISPLAY )的VCC和U2VCC为LED DISPLAY 模块供电。用跳线头短接J61(A DSP SECTION)的GND和1DIR以及J62(A DSP SECTION)的GND和2DIR,将A DSP SECTION模块的缓冲设为输出。

三、软件设计

   

#include "DSP28_Device.h"

#include "DSP28_Globalprototypes.h"

#define DINA    GpioDataRegs.GPFDAT.bit.GPIOF0

#define DINB    GpioDataRegs.GPFDAT.bit.GPIOF1

#define CLK2    GpioDataRegs.GPFDAT.bit.GPIOF2

#define CLEAR2        GpioDataRegs.GPFDAT.bit.GPIOF3

#define DINC    GpioDataRegs.GPBDAT.bit.GPIOB0

#define DIND    GpioDataRegs.GPBDAT.bit.GPIOB1

#define CLK1    GpioDataRegs.GPBDAT.bit.GPIOB2

#define CLEAR1  GpioDataRegs.GPBDAT.bit.GPIOB3

// Prototype statements for functions found within this file.

// interrupt void ISRTimer2(void);

void delay_loop(void);

void Gpio_select(void);

void sendto1(unsigned char dab);

void sendto2(unsigned char dat);

void DELAY(void);

unsigned int var1 = 0;

unsigned int var2 = 0;

unsigned int var3 = 0;

unsigned char  sendBdata[8]={0x0ff,0x0ff,0x0ff,0x0ff,0x0ff,0x0ff,0x0ff,0x0ff};

unsigned char  dispdata[8]={0x7c,0x48,0x48,0xff,0x48,0x48,0x7c,0x00};//中

//unsigned char  dispdata[4]={0x18,0x3c,0x7e,0xff};//candy

unsigned char  dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xDf,0xBf,0x7f};

//unsigned char  dispbit[4]={0xe7,0xc3,0x81,0x00};//candy

unsigned char kdab;

unsigned char kdat;

void main(void)

{

    unsigned char i;

         InitSysCtrl();

         // Disable and clear all CPU interrupts:

         DINT;

         IER = 0x0000;

         IFR = 0x0000;

         // Initialize Pie Control Registers To Default State:

         InitPieCtrl();

         InitPieVectTable();  

        

// Run GPIO test

         var1= 0x0000;           // sets GPIO Muxs as I/Os

         var2= 0xFFFF;            // sets GPIO DIR as outputs

         var3= 0x0000;           // sets the Input qualifier values

        

         Gpio_select(); 

         // Toggle I/Os  using DATA register for ever

        

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

         CLEAR2=0;

         CLK2=1;

         CLEAR1=0;

         CLK1=1;

         DINA=1;

         DINB=1;

         DINC=1;

         DIND=1;

         CLEAR2=1;

         CLEAR1=1;

         while(1)

         {

 sendto1(0x0ff);

//static/stria map

//         for(i=0;i<8;i++)

//               {

                       // sendto1(sendBdata[i]);

                            //GpioDataRegs.GPBDAT.all=0X00FF;

//                         sendto2(dispdata[i]);

//                         sendto1(dispbit[i]);

                            //GpioDataRegs.GPBDAT.all=dispbit[i];

//                         DELAY();

//                   DELAY();

//                   DELAY();

//                   DELAY();

//                   DELAY();

//                   DELAY();

//               }

//static/stria map

//expanded window

        sendto1(dispbit[0]); //发送列的第一个数据

                   sendto2(dispdata[0]); //发送行的第一个数据

                   DELAY();//延时

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                  

                   sendto1(dispbit[1]); //发送列的第二个数据

             sendto2(dispdata[1]); //发送行的第二个数据

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                  

                   sendto1(dispbit[2]); //发送列的第三个数据

                   sendto2(dispdata[2]); //发送行的第三个数据

         DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                  

                   sendto1(dispbit[3]); //发送列的第四个数据

                   sendto2(dispdata[3]); //发送行的第四个数据

        DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                  

                   sendto1(dispbit[4]); //发送列的第五个数据

                   sendto2(dispdata[4]); //发送行的第五个数据

        DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                  

                   sendto1(dispbit[5]); //发送列的第六个数据

                   sendto2(dispdata[5]); //发送行的第六个数据

        DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                  

                   sendto1(dispbit[6]); //发送列的第七个数据

                   sendto2(dispdata[6]); //发送行的第七个数据

        DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                  

                   sendto1(dispbit[7]); //发送列的第八个数据

                   sendto2(dispdata[7]); //发送行的第八个数据

        DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   DELAY();

                   //expanded window

      

    }

        

}      

void Gpio_select(void)

{

         EALLOW;  //使CPU能对寄存器操作

          

   GpioMuxRegs.GPBMUX.all=var1;   //0x0000

  

   GpioMuxRegs.GPBDIR.all=var2;             // 0xFFFF,GPIO DIR select GPIOs as output

   

   GpioMuxRegs.GPBQUAL.all=var3;   //0x0000

   

   GpioMuxRegs.GPFMUX.all=var1;  

  

   GpioMuxRegs.GPFDIR.all=var2;             // GPIO DIR select GPIOs as output

   

      

    EDIS; //停止CPU对寄存器的操作

    

}

void sendto1(unsigned char dab)

{

    unsigned char i;

    CLK1=0;

    kdab=dab;

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

    {

       if((kdab&0x01) == 0x01)

       {

          DINC=1;

        }else DINC = 0;

       CLK1=1;   //产生一个上升沿,使数据输入

       CLK1=0;

       kdab=kdab>>1;

     }    

}

void sendto2(unsigned char dat)

{

    unsigned char i;

         CLK2=0;

         kdat=dat;

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

         {

             if((kdat & 0x01) == 0x01)

             {

                     DINA=1;

                   }else DINA = 0;

                   CLK2=1;

                   CLK2=0;

                   kdat=kdat>>1;

         }

}

void DELAY()

{

    unsigned long k,j;

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

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

}

  

//===========================================================================

// No more.

//===========================================================================

更多相关推荐:
实验八 数码管LED实验报告

苏州大学实验报告院系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称数码管LED实验一实验目的理解8段数码管的基本原理理解8段数码管的显示和编程方法理解4连排共阴极8段数码管LG5641AH与MC...

数码管动态显示实验报告

实验四数码管动态显示实验一一实验要求1在Proteus软件中画好51单片机最小核心电路包括复位电路和晶振电路2在电路中增加四个7段数码管共阳共阴自选将P1口作数据输出口与7段数码管数据引脚相连P20P23引脚输...

数码管实验报告

单片机实验报告一实验名称数码管动态扫描显示01234567实验五二实验目的1掌握数码管显示数字的原理2通过不同的编程实现灵活运用数码管三实验原理数码管由7个发光二极管组成8字形构成的加上小数点就是8个分别把它命...

数码管显示实验报告

HUNANUNIVERSITY课程实验报告实验名称学生姓名学生学号专业班级指导老师数码管显示实验20xx1217实验三数码管显示实验一实验目的1学习按键扫描的原理及电路接法2掌握利用8255完成按键扫描及显示二...

数码管实验报告

项目名称数码管实验报告姓名陈姣班级11电气2学号11731204指导老师赵海兰实验目的巩固Keil软件的使用方法学习端口输入输出的高级应用掌握7段数码管的连接方式和动态显示法掌握查表程序和延时等子程序的设计学习...

单片机c语言版数码管动态显示实验报告

数码管动态显示实验一实验要求1在Proteus软件中画好51单片机最小核心电路包括复位电路和晶振电路2在电路中增加四个7段数码管共阳共阴自选将P1口作数据输出口与7段数码管数据引脚相连P20P23引脚输出选控制...

数码管及按键实验报告模板(1)

数码管及流水灯实验报告成员:20##年11月一、实验要求:1.实验1:在开发板上调试利用按键控制数码管从1累加到F变化(S2加、S3减)(不同分组按键利用IO口不同);2.实验2:利用开发板进行秒表设计(显示分…

数码管动态扫描实验报告

数码管动态扫描实验一实验目的学习计数器的设计分析合测试方法学习硬件扫描显示电路的设计方法二实验仪器1PC机2SW51PROC单片机综合实验平台三实验内容编写一段程序用单片机P0口和P2口的IO输出去控制8位的数...

数码管动态驱动实验报告

单片机实验三数码管动态驱动实验报告我是勇哥自己写

单片机实验报告(数码管)

单片机仿真实验报告一数码管一仿真设计要求用数码管实现0到9的循环二数码管电路原理图三程序设计内容及源程序STARTMOVP00FFHMOVDPTRTABLELIFEICLRAMOVCAADPTRCJNEA0FF...

7段数码管实验报告

EDA实验报告实验名称7段数码管控制接口学院信息工程学院专业方向电子信息工程年级班20xx级2班学生姓名指导教师日7段数码管控制接口一实验要求用设计一个共阴7段数码管控制接口要求在时钟信号的控制下使6位数码管动...

数码管扫描显示控制器实验报告

北京邮电大学实验报告课程名称数字电路与逻辑设计实验实验名称数码管扫描显示控制器设计与实现学院信息与通信工程学院班级姓名学号日期一课题名称数码管扫描显示控制器设计与实现二实验目的1掌握VHDL语言的语法规范掌握时...

数码管实验报告(41篇)