找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3430|回复: 0
收起左侧

初次发帖-单片机16X16点阵Proteus仿真+取模工具

[复制链接]
ID:89528 发表于 2020-4-30 17:39 | 显示全部楼层 |阅读模式
16X16点阵驱动采用常见的74HC595+74HC138直接驱动,省去了MOS管器件。资料包里有程序、Proteus仿真图和点阵取模工具。
16X16 LED Screen.jpg

单片机源程序如下:
  1. /*
  2. GND:
  3. +5V:
  4. OE#:74HC138 Pin5 G2B,为H输出H
  5. G: 绿色数据,暂缺
  6. CLK: 74HC595 Pin11 SCK
  7. STCK:74HC595 Pin12 SCK
  8. LA LB LC LD:74138 ABC G2A(Pin4)
  9. R:74HC595 Pin14 SER 红色数据*/
  10. #include <reg52.h>
  11. #include <intrins.h>
  12. sbit LD=P0^0;        //8
  13. sbit LC=P0^1; //4
  14. sbit LB=P0^2;        //2
  15. sbit LA=P0^3;        //1 LA必须为脉冲信号,内部有过流保护电路7404
  16. //sbit G=P0^6;
  17. sbit OE=P0^7;
  18. sbit RCK=P0^4; //12        ST_CP
  19. sbit CLK=P0^5; //11 SH_CP
  20. sbit DAT=P3^7; //14 DS
  21. unsigned char idata disp_ram[32]={0};
  22. unsigned char code Tab[]={//先左后右,再上至下 0亮1灭
  23. 0xE7,0xFC,0xEF,0xFC,0xC3,0xF1,0xC0,0x63,0xDC,0x7B,0x9F,0xF3,0xBF,0xF3,0x81,0xF7,
  24. 0xFC,0xE7,0xFC,0xE7,0xFE,0xE7,0xFE,0xEF,0xFE,0xCF,0x7C,0xCF,0x21,0xDF,0x83,0xDF,/*"51",0*/
  25.         
  26. 0xEF,0xEF,0xF7,0xDF,0xFB,0xBF,0xC0,0x07,0xDE,0xF7,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,
  27. 0xDE,0xF7,0xC0,0x07,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,/*"单",1*/
  28.         
  29. 0xFF,0xFF,0xFF,0xDF,0xF7,0xDF,0xF7,0xDF,0xF7,0xDF,0xF7,0xDF,0xF0,0x01,0xF7,0xFF,
  30. 0xF7,0xFF,0xF7,0xFF,0xF0,0x0F,0xF7,0xEF,0xF7,0xEF,0xF7,0xEF,0xEF,0xEF,0xEF,0xEF,/*"片",2*/

  31. 0xFF,0xFF,0xF7,0xFF,0xF7,0x07,0xF7,0x77,0xF7,0x77,0x81,0x77,0xF7,0x77,0xE7,0x77,
  32. 0xE3,0x77,0xD5,0x77,0xD5,0x77,0xB7,0x77,0xF7,0x76,0xF7,0x76,0xF6,0xF6,0xF6,0xF8,/*"机",3*/
  33.         
  34. 0xFC,0x3F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0x9C,0x39,0xC7,0xE3,0xE3,0xC7,
  35. 0xF1,0x8F,0xF1,0x8F,0xF1,0x8F,0xF1,0x8F,0xE1,0x87,0xC3,0xC3,0x87,0xE1,0x1F,0xF8,/*"logo",4*/

  36. 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  37. 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/*显示空白*/
  38. };        

  39. /*********延时函数*********/
  40. void Delay(unsigned int t)        //t*1ms
  41. {
  42.         unsigned int i,j;        //0-65535
  43.         for(i=0;i<t;i++)        
  44.                 for(j=0;j<120;j++);
  45. }

  46. void Send_16bit(unsigned char dat_L,unsigned char dat_R,unsigned char hang)
  47. {
  48.         unsigned char i;
  49.         OE=1;                        //关闭74HC138输出
  50.         RCK=0;
  51.         for(i=0;i<8;i++)
  52.         {
  53.                 CLK=0;
  54.                 if(dat_L&0x80)
  55.                         DAT=1;
  56.                 else
  57.                         DAT=0;
  58.                 dat_L=dat_L<<1;
  59.                 CLK=1;        
  60.         }
  61.         for(i=0;i<8;i++)
  62.         {
  63.                 CLK=0;
  64.                 if(dat_R&0x80)
  65.                         DAT=1;
  66.                 else
  67.                         DAT=0;
  68.                 dat_R=dat_R<<1;
  69.                 CLK=1;        
  70.         }
  71.         switch(hang)
  72.         {
  73.                 case 0:LA=0;LB=0;LC=0;LD=0;break;
  74.                 case 1:LA=1;LB=0;LC=0;LD=0;break;
  75.                 case 2:LA=0;LB=1;LC=0;LD=0;break;
  76.                 case 3:LA=1;LB=1;LC=0;LD=0;break;
  77.                 case 4:LA=0;LB=0;LC=1;LD=0;break;
  78.                 case 5:LA=1;LB=0;LC=1;LD=0;break;
  79.                 case 6:LA=0;LB=1;LC=1;LD=0;break;
  80.                 case 7:LA=1;LB=1;LC=1;LD=0;break;
  81.                 case 8:LA=0;LB=0;LC=0;LD=1;break;
  82.                 case 9:LA=1;LB=0;LC=0;LD=1;break;
  83.                 case 10:LA=0;LB=1;LC=0;LD=1;break;
  84.                 case 11:LA=1;LB=1;LC=0;LD=1;break;
  85.                 case 12:LA=0;LB=0;LC=1;LD=1;break;
  86.                 case 13:LA=1;LB=0;LC=1;LD=1;break;
  87.                 case 14:LA=0;LB=1;LC=1;LD=1;break;
  88.                 case 15:LA=1;LB=1;LC=1;LD=1;break;
  89.         }        
  90.         RCK=1;        
  91.         OE=0;Delay(1);OE=1;        //调节延时控制LED亮度
  92. }
  93. void main()
  94. {        
  95.         unsigned char zi;        //字符控制
  96.         unsigned char h;        //行数变量
  97.         unsigned char i;
  98.         while(1)
  99.         {        //滚动显示
  100.                 for(zi=0;zi<(16*5);zi++)        //
  101.                 {
  102.                         for(i=0;i<15;i++)
  103.                         for(h=0;h<16;h++)
  104.                         {Send_16bit(~Tab[h*2+2*zi],~Tab[h*2+1+2*zi],h);}//~取反
  105.                 }
  106.                 //直接切换
  107.                 /*for(zi=0;zi<5;zi++)
  108.                 {
  109.                         for(i=0;i<100;i++)
  110.                         for(h=0;h<16;h++)
  111.                         {Send_16bit(~Tab[h*2+32*zi],~Tab[h*2+1+32*zi],h);}
  112.                 }*/
  113.         }        
  114. }
复制代码

所有资料51hei提供下载:
16X16点阵Proteus仿真 取模工具.rar (824.16 KB, 下载次数: 135)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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