点阵实验报告

时间:2024.3.31

 大连理工大学软件学院

FPGA设计与应用实验》实验报告

     名:王鑫明    学号:    201292223    班级:   1212 

     名:  席翀宇    学号:    201292383    班级:   1212 

组      号:                                 实验箱编号:                            

实验时间:2015520  实验室:嵌入式实验室   实验台:SEED教学实验平台_   

指导教师:               成绩:                     

实验2LED点阵实验

一、实验目的和要求

    熟悉ISE8.2开发环境,掌握工程的生成方法;

    熟悉SEED-XDTK_V4实验环境;

了解HDL语言在FPGA中的使用;

了解定时器的HDL实现。

实验内容:

定时时钟设计;

LED点阵点亮。

二、实验原理和内容

实验内容:

定时时钟设计;

LED点阵点亮。

三、主要仪器设备及软件编程环境

主要仪器设备:

SEED-XDTK_V4实验环境

软件编程环境:

ISE8.2开发环境

Modelsim仿真工具

四、实验步骤与编程

实验步骤:

创建工程

   

添加HDL资源文件

编写代码

`timescale 1ns / 1ps

//////////////////////////////////////////////////////////////////////////////////

// Company:

// Engineer:

//

// Create Date:    09:43:00 04/18/2008

// Design Name:

// Module Name:    dot

// Project Name:

// Target Devices:

// Tool versions:

// Description:

//

// Dependencies:

//

// Revision:

// Revision 0.01 - File Created

// Additional Comments:

//

//////////////////////////////////////////////////////////////////////////////////

module dot(CLK_IN, nRST, CPLD_E,DOT_DATA , DOT_CON ,AD_nCS , DA_nCS ,USB_nCS,LCD_nCS );

    input CLK_IN;

    input nRST;

        output [1:0] CPLD_E;

    output [15:0] DOT_DATA;

        output [15:0]DOT_CON;

        output USB_nCS;

        output AD_nCS;

        output DA_nCS;

        output LCD_nCS;

                    

       reg CLK_OUT = 1'b1;

       reg [15:0]DOT_CON =16'h0000;

       reg [15:0]DOT_DATA =16'h0000;

      

       reg [13:0] DIV_counter = 14'h000;

       reg [3:0] cnt= 4'h0;

       reg [13:0] cnt1=14'h000;

       reg [2:0] cnt2=3'h0;

      

       parameter DIV_FACTOR = 14'h1f98;

      

//CPLD功能切换

   assign CPLD_E = 2'b11;

//其他芯片功能禁止 

   assign USB_nCS = 1'b1;

   assign AD_nCS = 1'b1;

   assign DA_nCS = 1'b1; 

       assign LCD_nCS = 1'b1;

      

//时钟分频    

       always@(posedge CLK_IN)

        begin

              if(!nRST)

               begin

                     CLK_OUT <= 1'b1;

                     DIV_counter <= 10'h000;

               end

              else

               begin

                     if(DIV_counter <= DIV_FACTOR )

                      begin

                            DIV_counter <= DIV_counter + 1;

                      end

                     else

                      begin

                            DIV_counter <= 12'h000;

                            CLK_OUT <= !CLK_OUT;

                      end

               end

        end

//点亮点阵    

       always@(posedge CLK_OUT)

   begin

              cnt = cnt+1;

              cnt1 = cnt1+1;

             

              if(cnt1 == 14'hf)

              begin

                     cnt2 = cnt2+1;

              end

             

              if(cnt2 == 3'h0)

              begin

                     if(cnt == 4'h0)

                            begin            

                                   DOT_CON  <= 16'h8000;

                                   DOT_DATA <= 16'h0000;

                            end

                     else if(cnt == 4'h1)    

                            begin                   

                                   DOT_CON   <= 16'h4000;

                                   DOT_DATA  <= 16'hfffe;

                            end

                     else if(cnt == 4'h2)   

                            begin                   

                                   DOT_CON  <= 16'h2000;

                                   DOT_DATA <= 16'h0104;

                            end

                     else if(cnt == 4'h3)    

                            begin                   

                                   DOT_CON   <= 16'h1000;

                                   DOT_DATA  <= 16'h0100;

                            end

                     else if(cnt == 4'h4) 

                            begin                   

                                   DOT_CON  <= 16'h0800;

                                   DOT_DATA <= 16'h0100;

                            end           

                     else if(cnt == 4'h5)  

                            begin                   

                                   DOT_CON  <= 16'h0400;

                                   DOT_DATA <= 16'h0100;

                            end

                     else if(cnt == 4'h6)   

                            begin                   

                                   DOT_CON  <= 16'h0200;

                                   DOT_DATA <= 16'h0100;

                            end

                     else if(cnt == 4'h7) 

                            begin                   

                                   DOT_CON  <= 16'h0100;

                                   DOT_DATA <= 16'h0100;

                            end

                     else if(cnt == 4'h8)

                            begin                   

                                   DOT_CON  <= 16'h0080;

                                   DOT_DATA <= 16'h7ffc;

                            end

                     else if(cnt == 4'h9)  

                            begin                   

                                   DOT_CON  <= 16'h0040;

                                   DOT_DATA <= 16'h0108;

                            end

                     else if(cnt == 4'ha) 

                            begin                   

                                   DOT_CON  <= 16'h0020;

                                   DOT_DATA <= 16'h0100;

                            end

                     else if(cnt == 4'hb)

                            begin                   

                                   DOT_CON  <= 16'h0010;

                                   DOT_DATA <= 16'h0100;

                            end

                     else if(cnt == 4'hc) 

                            begin                   

                                   DOT_CON  <= 16'h0008;

                                   DOT_DATA <= 16'h0100;    

                            end                      

                     else if(cnt == 4'hd) 

                            begin                   

                                   DOT_CON  <= 16'h0004;

                                   DOT_DATA <= 16'h0100;

                            end

                     else if(cnt == 4'he)

                            begin                   

                                   DOT_CON  <= 16'h0002;

                                   DOT_DATA <= 16'h7ffc;

                            end

                     else if(cnt == 4'hf)  

                            begin                   

                                   DOT_CON  <= 16'h0001;

                                   DOT_DATA <= 16'h0008; 

                            end        

              end

                    

///////////////////////////////////////////////

              if(cnt2 == 3'h1)

              begin

                     if(cnt == 4'h0)

                            begin            

                                   DOT_CON  <= 16'h8000;

                                   DOT_DATA <= 16'h2040;

                            end

                     else if(cnt == 4'h1)    

                            begin                   

                                   DOT_CON   <= 16'h4000;

                                   DOT_DATA  <= 16'h2040;

                            end

                     else if(cnt == 4'h2)   

                            begin                   

                                   DOT_CON  <= 16'h2000;

                                   DOT_DATA <= 16'h2040;

                            end

                     else if(cnt == 4'h3)    

                            begin                   

                                   DOT_CON   <= 16'h1000;

                                   DOT_DATA  <= 16'h2040;

                            end

                     else if(cnt == 4'h4) 

                            begin                   

                                   DOT_CON  <= 16'h0800;

                                   DOT_DATA <= 16'h27fc;

                            end           

                     else if(cnt == 4'h5)  

                            begin                   

                                   DOT_CON  <= 16'h0400;

                                   DOT_DATA <= 16'he040;

                            end

                     else if(cnt == 4'h6)   

                            begin                   

                                   DOT_CON  <= 16'h0200;

                                   DOT_DATA <= 16'h2040;

                            end

                     else if(cnt == 4'h7) 

                            begin                   

                                   DOT_CON  <= 16'h0100;

                                   DOT_DATA <= 16'h15f4;

                            end

                     else if(cnt == 4'h8)

                            begin                   

                                   DOT_CON  <= 16'h0080;

                                   DOT_DATA <= 16'h0a4e;

                            end

                     else if(cnt == 4'h9)  

                            begin                   

                                   DOT_CON  <= 16'h0040;

                                   DOT_DATA <= 16'h2110;

                            end

                     else if(cnt == 4'ha) 

                            begin                   

                                   DOT_CON  <= 16'h0020;

                                   DOT_DATA <= 16'h60a0;

                            end

                     else if(cnt == 4'hb)

                            begin                   

                                   DOT_CON  <= 16'h0010;

                                   DOT_DATA <= 16'h8040;

                            end

                     else if(cnt == 4'hc) 

                            begin                   

                                   DOT_CON  <= 16'h0008;

                                   DOT_DATA <= 16'h00a0;    

                            end                      

                     else if(cnt == 4'hd) 

                            begin                   

                                   DOT_CON  <= 16'h0004;

                                   DOT_DATA <= 16'h1110;

                            end

                     else if(cnt == 4'he)

                            begin                   

                                   DOT_CON  <= 16'h0002;

                                   DOT_DATA <= 16'h33f8;

                            end

                     else if(cnt == 4'hf)  

                            begin                   

                                   DOT_CON  <= 16'h0001;

                                   DOT_DATA <= 16'h4000; 

                            end                    

              end

///////////////////////////////////////

             

              if(cnt2 == 3'h2)

              begin

                     cnt2 = 3'h0;

              end

    end

        

endmodule

烧写

1.       进入烧写界面

2.       在第三个芯片载入bit文件

3.       右击第三个芯片开始烧写

五、实验数据与结果分析

六、讨论、建议     

延时采用循环计数获得时钟信号实现,通过自摸软件对点阵进行赋值。


第二篇:点阵实验报告


1.实验目的

(1)掌握LED16X16点阵显示与单片机接口的方法;

   (2)了解LED16X16点阵显示的基本原理与功能;

   (3)掌握LED16X16点阵显示软件编程方法。

2.点阵显示简介

  汉字显示屏到处可见,被广泛应用于汽车报站器,广告屏等。本文中的16*16LED显示屏是采用4块8*8LED合并而成的,实验介绍一种实用的汉字显示屏的制作,考虑到电路元件的易购性,采用了16×16的点阵模块,汉字显示的原理我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。即国标汉字库中的每一个字均由256点阵来表示。

LED阵列的显示方式是按显示编码的顺序,一行一行地显示。每一行的显示时间大约为4ms,由于人类的视觉暂留现象,将感觉到8行LED是在同时显示的。若显示的时间太短,则亮度不够,若显示的时间太长,将会感觉到闪烁。本文采用低电平逐行扫描,高电平输出显示信号。即轮流给行信号输出低电平,在任意时刻只有一行发光二极管是处于可以被点亮的状态 ,其它行都处于熄灭状态。

3.点阵屏有两个类型,一类为共阴极(左),另一类则为共阳极(右),下图给出了两种类型的内部电路原理及相应的管脚图

4 .系统电路设计

(1) 单片机系统及外围电路

单片机采用MSC-51 或其兼容系列芯片,采用24MHZ 或更高频率晶振,以获得较高的刷新频率,时期显示更稳定。单片机的串口与列驱动器相连,用来显示数据。P1 口低4 位与行驱动器相连,送出行选信号;P1.5~P1.7 口则用来发送控制信号。P0 口和P2口空着,在有必要的时候可以扩展系统的ROM 和RAM。

(2)列驱动电路

    列驱动电路有集成电路74HC595 构成。它具有一个8 位串入并出的移位寄存器和一个8 位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行列数据的同时,传送下一行的列数据,既达到重叠处理的目的。它的输入侧有8 个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。引脚SI 是串行数据的输入端。引脚SCK 是移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SI 的下一个数据打入最低位。移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。RCK 是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入输出锁存器。引脚G 是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则为高组态。SCLR 信号是移位寄存器清零输入端,当其为低时移位寄存器的输出全部为零。由于SCK 和RCK 两个信号是互相独立的,所以能够做到输入串行移位与输出锁存互不干扰。芯片的输出端为

QA~QH,最高位QH 可作为多片74HC595 级联应用时,向上一级的级联输出。但因为QH受输出锁存器的打入控制,所以还从输出锁存器前引出QH,作为与移位寄存器完全同步的级联输出。

(3)行驱动器

      单片机P1 口低4 位输出的行号经4/16 线译码器74LS154 译码后生成16 条行选通信号线,再经过驱动器驱动对应的行线。一条行线上要带动16 列的LED 进行显示,按每一LED 器件20MA 电流计算,16 个LED 同时发光时,需要320MA 电流,选通三极管8550作为驱动管可满足要求。

5.LED16X16点阵显示的基本原理

  为了让大家更清楚的理解点阵的扫描过程,在这我们以显示汉字“计”为例,来说明其扫描原理:

单片机首先由P2口输出显示数据信号给右部分的第一行如图9所示,即第一行的P20---P27口。方向为P20到P27 ,显示汉字“计”时,P22点亮,由左到右排,为P20灭,P21灭, P22亮,P23灭, P24灭, P25灭, P26灭, P27灭。即二进制00000100,转换为16进制为 0x05。

右部分的第一行完成后,继续扫描左半部的第一行,为了接线的方便,我们仍设计成由左往右扫描,即从P00向P07方向扫描,从上图可以看到,这一行没有LED亮,均灭, 即为00000000,16进制则为0x00。然后单片机再次转向右半部第二行,仍为P22点亮,为00000100,即16进制0x05。这一行完成后继续进行左半部分的第二行扫描,P03点亮,为二进制00001000,即16进制0x09

依照这个方法,继续进行下面的扫描,一共扫描32个8位,

6.LED16X16点阵显示软件编程如下

#include<reg51.h>

#include<absacc.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

#define com8255 XBYTE[0xff2b]//宏定义口地址

#define pa8255 XBYTE[0xff28]

#define pb8255 XBYTE[0xff29]

#define pc8255 XBYTE[0xff2a]

sbit c=PSW^7;

bit flag=0;

int x1,x,y,temp,tp;

uint code table[]={

/*"计",*/

 0x02,0x02,0x42,0x33,0x00,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x06,0x02,0x00,

      0x00,0x00,0x00,0xFE,0x04,0x08,0x10,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,

/*"算",*/

 0x10,0x20,0xC0,0x5F,0x75,0x55,0x55,0x35,0xD5,0x55,0x75,0x5F,0x40,0x40,0x00,0x00,

     0x10,0x10,0x11,0xD2,0x7C,0x50,0x50,0x50,0x50,0x50,0x7F,0xD0,0x10,0x30,0x10,0x00,

/*"机", */

0x08,0x08,0x0B,0xFF,0x09,0x08,0x00,0x3F,0x20,0x20,0x20,0x7F,0x20,0x00,0x00,0x00,

  0x20,0xC0,0x00,0xFF,0x01,0x82,0x04,0xF8,0x00,0x00,0x00,0xFC,0x02,0x02,0x0E,0x00,

void delay(unsigned int i)

{

   unsigned int j,k;

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

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

}

void main(void)

 {

  com8255=0x80;//8255全输出

  pa8255=0xff;

  pb8255=0xff;

  while(1)

  {

  x1=0x00;

  do {uchar ,counter1,counter2;

   unsigned int j,k,d;

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

      {

       for(j=0;j<10;j++) //扫描一个字的次数,决定了字的显示时间长短

         {counter1=0x00;

          counter2=0x00;

          x=x1;

          y=0x01;

          c=0;

  while(counter1<0x08)//描扫左8列

      {counter1++;

       pc8255=table[x];//输出左半字的上半字段码

       temp=0x10+x;

       P1=table[temp];//输出左半字下半字段码

       x++;

       temp=x;

       temp=temp&0x0f;

       if(!temp){temp=0x10+x;x=temp;}

       c=0;

       tp=~y;

       pa8255=tp;  //依次选中左半字的各列

       d=70;

       while(d--){};

       pa8255=0xff;  //关闭扫描,清隐

       pb8255=0xff;  //关闭扫描,清隐

       y=_crol_(y,1);//位码左移,显示左移效果

      }

       c=0;

       y=0x01;

  while(counter2<0x08)//描扫右8列

      { counter2++;

        pc8255=table[x];  //输出右半字的上半字段码

        temp=0x10+x;

        P1=table[temp];    //输出右半字的下半字段码

        x++;

        temp=x;

        temp=temp&0x0f;

        if(!temp){temp=0x10+x;x=temp;}

        c=0;

        tp=~y;

        pb8255=tp; //依次选中右半字的各列

        d=70;

        while(d--){};

        pa8255=0xff;

        pb8255=0xff;

        y=_crol_(y,1); //位码左移,显示左移效果

      }

     }

  }

      x1++;

      temp=x1;

      temp=temp&0x0f;

      if(!temp) {temp=0x10+x1;x1=temp;}   //显示完一个字后取下一个字的字模

     }

     while(x!=16*16*2);

  }

}

7.实习总结

  通过查阅大量的相关资料,详细了解了LED 的发光原理和LED 显示屏的原理,了解了LED 的现状,清楚地了解了LED 显示屏与其它显示屏相比较有那些

优点,明确了研究目标.总结这次实习,遇到一些问题,如显示时间的长短,显示时间短,会出现亮度不强,显示时间长,会出现闪烁,只有合理选择时间,才可出现理想的结果。通过这次实习,使我受益匪浅,只有自己动手才可发现问题,解决问题、、、、

8.参考文献

(1)《单片机原理及接口技术》 胡汉才 20##年第三版

(2)《51单片机C语言编程》 郭天祥

(3)《单片机技术实验实训教程》 周越 中国水利水电出版社 20##年

(4)《Protel电路设计与制版宝典》 赵建 电子工业出版社 20##年

(5)《单片机技术与应用》 东南大学出版社 郭建江

更多相关推荐:
实验报告格式模板-供参考

实验名称:粉体真密度的测定粉体真密度是粉体质量与其真体积之比值,其真体积不包括存在于粉体颗粒内部的封闭空洞。所以,测定粉体的真密度必须采用无孔材料。根据测定介质的不同,粉体真密度的主要测定方法可分为气体容积法和…

实验报告 范本

研究生实验报告范本实验课程实验名称实验地点学生姓名学号指导教师范本实验时间年月日一实验目的熟悉电阻型气体传感器结构及工作原理进行基于聚苯胺敏感薄膜的气体传感器的结构设计材料制作材料表征探测单元制作与测试实验结果...

实验报告格式

实验报告课程名称物证技术学实验项目名称捺印手印样本指纹显现提取班级与班级代码074213070853实验室名称或课室法学实验教学中心专业任课教师刘红学号0925020xx20姓名康杰辉实验日期20xx年12月1...

实验报告要求及范文

滁州市政府组织退耕还林(黑体,小二,1.5倍行距,段前段后0.5行)——5060451007范雪花(学号,TimesNewRoman,四号)(姓名,宋体,四号,单倍行距)一、实验目的(宋体,四号,单倍行距,段前…

实验报告单

科学实验报告单1科学实验报告单2科学实验报告单3科学实验报告单4九完小科学实验报告单10九完小科学实验报告单11九完小科学实验报告单12九完小科学实验报告单13九完小科学实验报告单14九完小科学实验报告单15九...

实验报告

实验三用ethereal工具探究TCP协议班级08软件工程1班学号20xx41404105姓名詹朝生一实验目的分析TCP协议二实验环境与因特网连接的计算机网络系统主机操作系统为windowsEtherealIE...

实验报告格式

2020学年第学期佛山职业技术学院食品营养与检测专业实验报告课程名称食品添加剂专业班级姓名学号所在组别同组成员实验地点实验时间实验一几种食品添加剂在果味饮料中的应用实例佛山职业技术学院食品营养与检测专业指导教师...

教科版四年级科学上册实验报告单

教科版四年级科学上册实验报告单1实验名称室内外温度的测量与比较实验器材温度计线笔实验步骤1取一支温度计用线2将温度计悬挂离地面15米左右不能靠拢在室外注意通风阳光不能直射温度计3读数4记录并比较实验结果室内外温...

电路实验报告

数字电路实验报告姓名:***学号:***学院:信息学院专业:计算机科学与技术指导教师:***协助指导教师:20XX年12月28日实验一常用仪器仪表使用一、实验目的:熟悉常用仪器仪表的使用二、实验器材:数字万用表…

物理实验-用惠斯通电桥测电阻-实验报告

首都师范大学物理实验报告班级信工C班组别D姓名李铃学号1111000048日期20xx424指导教师刘丽峰实验题目用惠斯通电桥测电阻实验目的1掌握惠斯通Wheastone电桥测电阻的原理2学会正确使用惠斯通电桥...

实验报告

文献阅读报告注意瞬脱的疲劳效应原作者JunIKawaharaHirotsuneSato姓名刘靓专业心理学学号20xx0101091一研究背景以前有观点认为注意力和情绪状态是有紧密联系的消极的情绪和较狭窄注意范围...

实验报告

姓名江嵩学号1108020xx017实验一学习用Keil软件基本调试一实验目的1熟悉keil软件的应用掌握从工程的建立到程序调试已经程序运行时各个接口的参数的情况2学习Keil软件的一般操作步骤为项目建立程序录...

实验报告(37篇)