找回密码
 立即注册

QQ登录

只需一步,快速开始

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

大屏幕信息显示系统实验

[复制链接]
跳转到指定楼层
楼主
ID:354113 发表于 2018-6-19 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实验目的
通过仿真搭建和实物搭建相结合,完成LED大屏幕显示的单片机系统设计。
一、      实验内容
(1) 设计一个16*64个LED长方形显示点阵屏幕,显示“重庆交通大学欢迎您”,显示方方式:i.实现固定显示“重庆交大”;ii.从右到左移动“重庆交通大学欢迎您”字符串。
(2) 用Proteus仿真软件搭建仿真硬件电路图。验证编制软件。
(3) 用prote199s布原理图、建PCB板图。
(4) 实物器件焊接搭建。
二、      电路设计图
(1)   元件清单
  
AT89C51 [1]
        
74HC595 [8]
        
MATRIX-8X8-GREEN [16]
  
  
74HC154 [1]
        
普通电容  [22pF][2]
        
电解电容 [10uF][1]
  
  
晶振 [12MHZ][1]
        
电阻 [10K][1]
        
电源
  
(2)   元件使用
                      i.           74HC595
Figure 1 74HC595引脚图
             74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。说明如下:
Q0~Q7      8位并行数据输出端
GND         接地
Q7’           串行数据输出
MR           复位引脚,低电平有效
SH_CP 数据输入时钟线,上升沿有效
ST_CP        输出存储器锁存时钟线,上升沿有效
OE              输出使能端,低电平有效
DS              串行数据输入
VCC           电源
在74HC595工作时,也就是OE为低电平时,如果这个时候需要将送到74HC595的DS端口的数据发送出去,需要端口SH_CP来一个上升沿信号,那么它将把DS上的数据移入移位寄存器中,先送低位,后送高位。
如果此时ST_CP再来一个上升沿,那么74HC595就会把移位寄存器中的数据送入锁存器发送。从SH_CP产生一上升沿(移入数据)和ST_CP产生一上升沿(输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的同时移入数据。
在本次实验中,用AT89C51的P20、P21和P22口去控制级联的74HC595,级联的方式是:
P20、P21和P22口分别连接第一个74HC595的SH_CP、DS以及ST_CP端,由P21口发送串行数据。之后将第一个74HC595的Q7’端再和第二个74HC595的DS端相连,第二个74HC595的SH_CP和ST_CP是和第一个74HC595的接法一致。
之后的6个74HC595都是这种接法,就实现了74HC595的级联。
级联之后,整个74HC595模块的输出引脚共64个,分别控制一行的哪一个灯的亮灭。
              
                     ii.           74HC154
             Figure 2 74HC154引脚图
            
         74HC154译码器可接受4位高电平有效二进制地址输入,并提供16个互斥的低低电平有效输出。
         它的引脚说明如下:
         Y0非~Y15非           输出端
         GND                           接地
         G1非,G2非           使能端,二者同为低,器件才工作
         A,B,C,D                     地址输入端
         VCC                           电源
         
         这个器件的A,B,C,D端接AT59C51的P30~P33端,用来位选,即用来选择哪一行可以被点亮。
(3)   电路图
Figure 3 74HC595模块搭建图
Figure 4 74HC154连线
Figure 5 AT59C51连线图
Figure 6 总览
Figure 7 LED模块布线图
       如图7,段选和位选交错相连,并不会造成混乱,反而能够大大减少使用的引脚,原因在于程序一列一列的选择,前一列所用到的位选码输入以后,即特定的LED灯亮了之后,下一列的段选码输入,此时由于上一列的位选码已经作用过了,就算此时下一列的段选码会覆盖掉上一列的位选码造成偏差,可是由于人眼的辉光效应,只要列扫描的速度足够快,人眼也是无法分辨的。
三、     软件设计
      具体的思路是先将第一时刻关于整个屏幕需要点亮的LED的16进制码共64位全部通过一个for循环使其进入74HC595模块的各个寄存器待命。
而后跳出这个for循环之后,进行位选,。虽然我的LED模块接线是位选与段选端复用了,但是正如前面所说的,由于是一列一列的选择,前一列所用到的位选码输入以后,即特定的LED灯亮了之后,下一列的段选码输入,此时由于上一列的位选码已经作用过了,就算此时下一列的段选码会覆盖掉上一列的位选码造成偏差,可是由于人眼的辉光效应,只要列扫描的速度足够快,人眼也是无法分辨的。
(1)程序流程图
Figure 8 静态显示流程
Figure9 动态显示流程
(2)程序代码
              1. 静态显示
#include<reg52.h>
sbit SH_CP = P2 ^ 0;
sbit DS = P2 ^ 1;
sbit ST_CP = P2 ^ 2;
unsigned char code display[] = {
    0x10,0x40,0x10,0x40,0x14,0x50,0xD4,0x57,0x54,0x55,0x54,0x55,0x54,0x55,0xFC,0x7F,
    0x52,0x55,0x52,0x55,0x52,0x55,0xD3,0x57,0x12,0x50,0x10,0x40,0x10,0x40,0x00,0x00,/* "重"*/

    0x00,0x40,0x00,0x30,0xFC,0x0F,0x04,0x80,0x84,0x40,0x84,0x20,0x84,0x18,0x85,0x06,
    0xF6,0x01,0x84,0x06,0x84,0x18,0x84,0x20,0x84,0x40,0x84,0x80,0x04,0x80,0x00,0x00,/* "庆"*/

    0x08,0x80,0x08,0x81,0x88,0x40,0x68,0x40,0x08,0x21,0x08,0x22,0x09,0x14,0x0E,0x08,
    0x08,0x14,0x08,0x22,0x88,0x41,0x28,0x40,0x48,0x80,0x88,0x81,0x08,0x80,0x00,0x00,/* "交"*/

    0x20,0x80,0x20,0x80,0x20,0x40,0x20,0x20,0x20,0x10,0x20,0x0C,0x20,0x03,0xFF,0x00,
    0x20,0x03,0x20,0x0C,0x20,0x10,0x20,0x20,0x20,0x40,0x20,0x80,0x20,0x80,0x00,0x00,/* "´大"*/
};
void hc595_senddat(unsigned char dat)
{
    unsigned char i;
    for (i = 0; i<8;i++)
    {
         DS = dat & 0x80;
         SH_CP = 1;
         SH_CP = 0;
         dat <<= 1;
    }
}
int main()
{
    unsigned char i;
    char j;
    SH_CP = 0;
    ST_CP = 0;
    while (1)
    {
         for (i = 0; i<16;i++)
         {
             for (j = 3; j >= 0;j--)
             {
                  hc595_senddat(display[32* j + 2 * i + 1]);
                  hc595_senddat(display[32* j + 2 * i]);
             }
             P3 = i;
             ST_CP =1;
             ST_CP =0;
         }
    }
}
              2. 动态显示
#include<reg52.h>
sbit SH_CP=P2^0;
sbit DS=P2^1;
sbit ST_CP=P2^2;

unsigned char code display[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//32

0x10,0x40,0x10,0x40,0x14,0x50,0xD4,0x57,0x54,0x55,0x54,0x55,0x54,0x55,0xFC,0x7F,
0x52,0x55,0x52,0x55,0x52,0x55,0xD3,0x57,0x12,0x50,0x10,0x40,0x10,0x40,0x00,0x00,/* "重"*///64

0X00,0x40,0x00,0x30,0xFC,0x0F,0x04,0x80,0x84,0x40,0x84,0x20,0x84,0x18,0x85,0x06,
0XF6,0x01,0x84,0x06,0x84,0x18,0x84,0x20,0x84,0x40,0x84,0x80,0x04,0x80,0x00,0x00,/* "庆"*///96

0X08,0x80,0x08,0x81,0x88,0x40,0x68,0x40,0x08,0x21,0x08,0x22,0x09,0x14,0x0E,0x08,
0X08,0x14,0x08,0x22,0x88,0x41,0x28,0x40,0x48,0x80,0x88,0x81,0x08,0x80,0x00,0x00,/* "交"*/

0X40,0x80,0x42,0x40,0xCC,0x3F,0x00,0x40,0x00,0x80,0xE2,0xFF,0x22,0x89,0x2A,0x89,
0X2A,0x89,0xF2,0xBF,0x2A,0x89,0x26,0xA9,0x22,0xC9,0xE0,0xBF,0x00,0x80,0x00,0x00,/* "通"*/

0X20,0x80,0x20,0x80,0x20,0x40,0x20,0x20,0x20,0x10,0x20,0x0C,0x20,0x03,0xFF,0x00,
0X20,0x03,0x20,0x0C,0x20,0x10,0x20,0x20,0x20,0x40,0x20,0x80,0x20,0x80,0x00,0x00,/* "大"*/

0X40,0x04,0x30,0x04,0x11,0x04,0x96,0x04,0x90,0x04,0x90,0x44,0x91,0x84,0x96,0x7E,
0X90,0x06,0x90,0x05,0x98,0x04,0x14,0x04,0x13,0x04,0x50,0x04,0x30,0x04,0x00,0x00,/* "学"*/

0X04,0x10,0x24,0x08,0x44,0x06,0x84,0x01,0x64,0x82,0x9C,0x4C,0x40,0x20,0x30,0x18,
0X0F,0x06,0xC8,0x01,0x08,0x06,0x08,0x18,0x28,0x20,0x18,0x40,0x00,0x80,0x00,0x00,/* "欢"*/

0X40,0x00,0x40,0x40,0x42,0x20,0xCC,0x1F,0x00,0x20,0x00,0x40,0xFC,0x4F,0x04,0x44,
0X02,0x42,0x00,0x40,0xFC,0x7F,0x04,0x42,0x04,0x44,0xFC,0x43,0x00,0x40,0x00,0x00,/* "迎"*/

0X20,0x40,0x10,0x30,0x08,0x00,0xFC,0x77,0x23,0x80,0x10,0x81,0x88,0x88,0x67,0xB2,
0X04,0x84,0xF4,0x83,0x04,0x80,0x24,0xE0,0x54,0x00,0x8C,0x11,0x00,0x60,0x00,0x00,/* "您"*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* " " */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* " " */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* " " */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* " " */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* " " */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* " " */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* " " */
};
void hc595_senddat(unsigned char dat)
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
         DS=dat&0x80;// 1000 0000
         SH_CP=1;
         SH_CP=0;//上升沿,DS端数据移入寄存器
         dat<<=1;
    }   
}

main()
{
    unsigned char i,n;
    unsigned int k,m;
    char j;
    m=sizeof(display);
    SH_CP=0;
    ST_CP=0;
    while(1)
    {
         for(k=0;k<m;k=k+2)
                  for(n=0;n<2;n++)
                          for(i=0;i<16;i++)
                          {   
                               for(j=3;j>=0;j--)
                               {
                                   hc595_senddat(display[(32*j+2*i+1+k)%m]);
                                   hc595_senddat(display[(32*j+2*i+k)%m]);
                               }
                               P3=i;
                               ST_CP=1;
                               ST_CP=0;//上升沿,寄存器中的数据送锁存器
                          }
    }
}
四、      实验步骤
打开Kei1程序,执行菜单命令“Project"->“New Project" 创建“大屏幕显示”项目,并选择单片机型号为AT89C51。
执行菜单命令“File"->"New"创建文件,输入源程序,保存为“大屏幕显示.c”。在“Projec t"栏的Fi le项目管理窗口中右击文件组,选择“Add Fi les to Group'Source Group1'" 将源程序“大屏幕显示.c”添加到项目中。
执行菜单命令“Project”->“Options for Target'Target 1”,在弹出的对话框中选择“ Output  选项卡,选中“Greate HEX File”。
执行菜单命令“Project" ->“Bui ld Target",编译源程序。如果编译成功,则在“OutputWindow" 窗口中显示没有错误,并创建了“大屏幕显示.HEX”文件。
在proteus仿真平台上建立参考图系统,并将程序上载到虚拟芯片上运行,
将所得到的正确的显示结果截图。

五、      实验结果
Figure 10 静态显示效果图
Figure 11 动态显示效果图
六、      实验总结
这次实验做的不足之处在于对动态扫描的速度控制不到位,在“重庆交通大学欢迎您”的那个您结束之前,后面的“重”又跟上了。
原先的想法本来是用一个74HC154来控制位选,再用4个74HC154去控制段选,但是这么做的确定也显而易见,那就是引脚使用得太多了,这只是一次实验,这么做是可以的,但是真正的工程这么做,怕是会被人吐槽。后来我听了同学的意见,抛弃了这种接线方案。LED模块的接线改用为如图7,这样一来,所使用的引脚就大大减少,不过这么做就提高了程序的复杂度。
在这次实验中,收获得最大的就是对两个主要器件74HC595和74HC154有了一个深入的理解。其中74HC595比较有意思,需要两次上升沿信号才能将信号发送出去,而且,他这个原件的Q7’就是专门为级联而生的,这个引脚的存在使得这个元件的使用非常灵活。

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

使用道具 举报

沙发
ID:359744 发表于 2018-6-26 21:51 | 只看该作者
老铁,可以发下仿真图吗
回复

使用道具 举报

板凳
ID:359744 发表于 2018-6-26 21:52 | 只看该作者
老铁,可以发下仿真图吗
回复

使用道具 举报

地板
ID:359744 发表于 2018-6-26 22:45 | 只看该作者
求proteus仿真图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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