找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机控制LED点阵显示囧

[复制链接]
跳转到指定楼层
楼主
ID:72519 发表于 2015-1-22 01:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <REG51.H>
  2. #include <intrins.h>
  3. #define  NOP() _nop_()  // 定义空指令 ,这个函数在库 <intrins.h> 中

  4. //SPI IO
  5. sbit MOSIO = P3^4;
  6. sbit R_CLK = P3^5;
  7. sbit S_CLK = P3^6;


  8. //点阵显示数组
  9. unsigned char code tab0[] = {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
  10.                              0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00};

  11. unsigned char code tab1[] ={0,0,254,127,2,64,66,66,34,68,18,72,2,64,2,64,242,79,18,72,18,72,18,72,242,79,2,64,254,127,0,0};



  12. //函数声明
  13. void HC595SendData(  unsigned char BT3, unsigned char BT2,unsigned char BT1,unsigned char BT0);
  14.                                                                                                                                                                                        
  15. /*************主函数*****************************/        
  16. void main(void)
  17. {
  18.    int k,i,ms;
  19.    i = 16;                                                                                                                                  //显示时间
  20.    while(1)
  21.    {
  22.      for(ms = i; ms > 0; ms--)
  23.         {
  24.        for(k = 0; k < 16; k++)                                                                                                //显示囧
  25.            {        
  26.          HC595SendData(~tab1[2*k +1],~tab1[2*k],tab0[2*k],tab0[2*k + 1]);                 
  27.            }
  28.         }                                                            

  29.         
  30.    }
  31. }

  32. /*********************************************************************************************************
  33. ** 函数名称: HC595SendData
  34. ** 功能描述: 向SPI总线发送数据
  35. *********************************************************************************************************/
  36. void HC595SendData(  unsigned char BT3, unsigned char BT2,unsigned char BT1,unsigned char BT0)
  37. {  
  38.   unsigned char i;
  39.   for(i = 0; i < 32; i++)
  40.    {
  41.    if(i > 23 )
  42.    {
  43.       if((BT0 << (i - 24)) & 0x80)
  44.       {
  45.             MOSIO = 1;
  46.           }
  47.           else
  48.           {
  49.             MOSIO = 0;
  50.           }
  51.    }
  52.    
  53.    else if(i > 15 & i < 24 )
  54.    {
  55.         if((BT1 << (i - 16)) & 0x80)  //set dataline high  0X80000000  最高位与SendVal左移的最高位 进行逻辑运算
  56.       {
  57.             MOSIO = 1;                                        // 如果为真 MOSIO = 1
  58.           }
  59.         else
  60.           {
  61.             MOSIO = 0;                                    
  62.           }        
  63.    }


  64.     else if(i < 16 & i > 7 )
  65.    {
  66.       if((BT2 << (i - 8)) & 0x80)
  67.       {
  68.             MOSIO = 1;
  69.           }
  70.           else
  71.           {
  72.             MOSIO = 0;
  73.           }
  74.    }
  75.    

  76.         else
  77.         {
  78.                   if((BT3 << i) & 0x80)  //set dataline high  0X80000000  最高位 进行逻辑运算
  79.       {
  80.             MOSIO = 1;                                        // 如果为真 MOSIO = 1
  81.           }
  82.         else
  83.           {
  84.             MOSIO = 0;                                    
  85.           }        
  86.         }
  87.         S_CLK = 0;
  88.         NOP();        //产生方形波
  89.         S_CLK = 1;        
  90.    }
  91.    
  92.   R_CLK = 0; //set dataline low
  93. NOP();   //产生方形波
  94.   R_CLK = 1;
  95. }
复制代码


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

使用道具 举报

沙发
ID:155598 发表于 2017-3-30 15:57 | 只看该作者
HC595SendData(~tab6[2*k +1],~tab6[2*k],tab0[2*k],tab0[2*k + 1]);这一步能解释下吗?
还有点阵显示数组怎么来的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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