找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3449|回复: 2
打印 上一主题 下一主题
收起左侧

LED点阵显示屏设计使用80C51单片机与两片8x8点阵显示器,设计一个点阵显示屏

[复制链接]
跳转到指定楼层
楼主
ID:777644 发表于 2020-6-12 21:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    LED点阵显示屏通过编程控制可以显示中英文字符、图形及视频动态图形,广泛用于指示、广告、宣传等领域,如车站、机场的运行时刻报告牌;商店的广告牌;证券、运动场馆的指示牌等。

1项目任务

    使用80C51单片机与两片8x8点阵显示器,设计一个点阵显示屏,能显示汉字及简单的图形。

    项目要求:

    1)显示稳定无闪烁。

    2)程序设计中,要使文字或图形运动。

2项目分析

LED点阵显示器有多个品种可供选择,按显示的颜色可分为单色、双色、三色等;按发光亮度可分为普通亮度、高亮度、超高亮度等。一块LED点阵块的LED数量可有4×4(即4列4行)、5×7、5×8、8x8等规格;点阵中单个ILED的直径常用的有1.9mm3mm、3.7mm、4.8mm、5mm、7.62mm、10mm、20mm等。

图1为8x8LED点阵显示器外观及排列示意图,共有64个LED发光二极管排列在一起。若需更大规模的LED点阵,只需将多个点阵块拼在一起即可。

1 8×8LED点阵显示器外观及排列示意图

     在LED点阵中,LED发光二极管按照行和列分别将阳极和阴极连接在一起,内部接线及引脚编号如图1所示,行、列编号中,括号中的内容为引脚编号(图中LED点阵型号为ZS*11288)。

在图1中,列输入引脚(Y1~Y8)接至内部IED的阴极端,行输入引脚接至8x8LED点阵显示器内部LED的阳极端,若阳极端输入为高电平,阴极端输入低电平,则该LED点亮;如X5为高电平、Y3为低电平,两条线交又点上的那个LED被点亮。若将8位二进制数送给行输入端X1~X8;列输入端只有Y1为低电平,其他为高电平,结果使得图2中最左侧的一列发光二极管按照行输入端的输人状态亮灭,其他列的LED均不亮。如果使列输入线快速依次变为低电平,同时改变行输人端的内容,即列扫描,视觉上感觉一幅图案完整的显示在LED点阵上。

2  LED点阵内部接线与引脚编号

3、项目硬件设计

   1.电路设计

设计的点阵显示屏的电路如图3所示。途中除单片机、显示屏、晶振与复位电路外,还使用了3片串行输入/输出的74HC595芯片。

3 点阵显示屏电路图

2.74HC595介绍

74HC595是8位串行输入/输出或者并行移位寄存器,具有高阻关断状态。包括一个8位移位寄存器、一个8位D型锁存器和三态并行输出。移位寄存器接收串行数据并提供串行输出,也提供并行数据输出和8位锁存器。移位寄存器和锁存器都有独立的时钟输入,同时还具有异步复位的功能。74HC595的引脚如图4所示。

4 74HC595的引脚

  引脚说明如下:

  QA-QH:八位并行输出端,可以直接控制数码管的8个段。

  QH`:(9脚):级联输出端。

  S(14脚):串行数据输入端。

(10脚):低电平时将移位寄存器的数据清零,通常将它接Vcc。

SCK(11脚):上升沿时数据寄存器的数据移位,QA→QB→QC→…→QH;下降沿移位寄存器数据不变。

RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常RCK置为低电平,当移位结東后,在RCK端产生一个正脉冲,更新显示数据。

G(13脚):高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控

制它,可以方便地产生闪烁和熄灭效果,比通过数据端移位控制要省时。

74HC164和74HC595功能相仿,都是8位串行输入、并行输出的移位寄存器。74HC164的驱动电流(25mA)比74HC595(35mA)的要小,14脚封装,体积也小一些。74HC595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。与74HC164只有数据清零端相比,74HC595尚有输出的使能/禁止控制端,可使输出为高阻态。

4项目程序设计

通过单片机的串口向74HC595发送数据到2片8×8点阵显示屏,滚动显示,显示的内容包括一个“→”图形和“天天向上”四个汉字,通过按键控制,显示可以向左方向移动也可以向右方向移动。

设计的程序如下


  1. <font color="rgb(0, 0, 0)"><font face="Calibri"><font style="font-size: 12pt">include <reg51.h>
  2. #include <intrins.h>
  3. #include <stdio.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit RCK_Pin = P3^2;
  7. sbit k1 = P1^1;
  8. sbit k2 = P1^3;
  9. uchar flag=1;
  10. uchar code DSY_CONTENT_8x8_0[]=
  11. {
  12.   0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  13.   0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  14.   0xFF,0xFF,0xF7,0xE3,0x81,0x00,0xC3,0xC3,
  15.   0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0xE7,0xFF,
  16.   0xEE,0xAD,0xAB,0x87,0xA3,0xAD,0xEE,0xFF,/*"天"*/
  17.   0xEE,0xAD,0xAB,0x87,0xA3,0xAD,0xEE,0xFF,/*"天"*/
  18.   0xFF,0xC0,0xB7,0xD3,0xD3,0xDF,0xC0,0xFF,/*"向"*/
  19.   0xFF,0xFD,0xFD,0x81,0xED,0xED,0xFD,0xFF,/*"上"*/
  20.   0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  21. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  22. };
  23. uchar code DSY_CONTENT_8x8_1[]=
  24. {
  25.   0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  26.   0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  27.   0xFF,0xFF,0xF7,0xE3,0x81,0x00,0xC3,0xC3,
  28.   0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0xE7,0xFF,
  29.   0xEE,0xAD,0xAB,0x87,0xA3,0xAD,0xEE,0xFF,/*"天",0*/
  30.   0xEE,0xAD,0xAB,0x87,0xA3,0xAD,0xEE,0xFF,/*"天",1*/
  31.   0xFF,0xC0,0xDF,0xD3,0xD3,0xB7,0xC0,0xFF,/*"向",2*/
  32.   0xFF,0xFD,0xED,0xED,0x81,0xFD,0xFD,0xFF,/*"上",3*/
  33.   0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  34.   0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  35. };
  36. uchar Scan_BIT = 0x01;
  37. uchar Scan_BIT1 = 0x80;
  38. uchar Offset,Data_Index = 0;
  39. uchar Offset1,Data_Index1 = 0;
  40. void Delay(uint t)
  41. {
  42. uchar i;
  43. while(t--) for(i=0;i<120;i++);
  44. }
  45. void T0_Led_Display_Control() interrupt 1
  46. {
  47. TH0 = (65536-1000)/256;
  48. TL0 = (65536-1000)%256;

  49. if(flag==0)
  50. {
  51. Scan_BIT1=0x80;
  52. Data_Index1 = 0;
  53. Scan_BIT = _cror_(Scan_BIT,1);
  54. putchar(Scan_BIT);
  55. while(TI == 0);
  56. putchar( DSY_CONTENT_8x8_0[Offset + Data_Index + 8]);
  57. while (TI==0);
  58. putchar( DSY_CONTENT_8x8_0[Offset + Data_Index ]);
  59. while(TI == 0);
  60. Data_Index = (Data_Index + 1) % 8;
  61. RCK_Pin = 1;
  62. RCK_Pin = 0;
  63. }
  64. if(flag==1)
  65. {
  66. Scan_BIT=0x01;
  67. Data_Index = 0;
  68. Scan_BIT1 = _crol_(Scan_BIT1,1);
  69. putchar(Scan_BIT1);
  70. while(TI == 0);
  71. putchar( DSY_CONTENT_8x8_1[Offset1 + Data_Index1]);
  72. while (TI==0);
  73. putchar( DSY_CONTENT_8x8_1[Offset1 + Data_Index1 + 8 ]);
  74. while(TI == 0);
  75. Data_Index1 = (Data_Index1 + 1) % 8;
  76. RCK_Pin = 1;
  77. RCK_Pin = 0;
  78. }
  79. }
  80. void main()
  81. {
  82. uchar i;
  83. TMOD = 0x01;
  84. TH0 = (65536-1000) / 256;
  85. TL0 = (65536-1000) % 256;
  86. IE = 0x82;
  87. TCON =0x00;
  88. TI = 1;
  89. while(1)
  90. {
  91.       for(i=0;i<64;i++)
  92.    {
  93.      if(k1==0) { flag=1; }
  94.      if(k2==0) { flag=0; }
  95.      Offset = i; Offset1 = i;
  96.      TR0 = 1;
  97.      Delay(50);
  98.      TR0 = 0;
  99.    }
  100.   }
  101. }</font></font></font>
复制代码


5、仿真结果

设计的点阵显示屏的Proteus仿真电路与图5所示。

5 点阵显示屏仿真电路

显示”天天“与”向上“的仿真与实验结果如图6和图7所示。所涉及的系统满足项目要求的功能。

6显示天天仿真结果

7 显示向上仿真结果

以上的Word格式文档51黑下载地址,为了防止白嫖,仿真工程本人已经删除,请自己画:
基于51单片机的LED点阵显示屏设计.docx (3.09 MB, 下载次数: 30)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:766783 发表于 2020-6-27 17:27 来自手机 | 只看该作者
在吗图中U2下方的txd  rxa  p32的那个圈是在仿真哪里能
回复

使用道具 举报

板凳
ID:766783 发表于 2020-6-27 18:48 来自手机 | 只看该作者
有没有完整的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表