找回密码
 立即注册

QQ登录

只需一步,快速开始

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

16x16点阵使用两个74HC595显示图片 源程序

[复制链接]
跳转到指定楼层
楼主
最近在研究单片机驱动16x16点阵,分享一个程序~
关于大家想要显示的图形,可以自行更改uchar code tab1[] ={..}的内容


单片机源程序:

  1. #include <REG51.H>
  2. //--重定义函数变量--//
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. #define ulong unsigned long
  6. #define  GPIO_KEY P1

  7. //--定义SPI要使用的 IO--//
  8. sbit MOSIO = P3^4;
  9. sbit R_CLK = P3^5;
  10. sbit S_CLK = P3^6;

  11. //---全局变量声明--//
  12. ulong column;   //点阵列
  13. ulong row;      //点阵行
  14. ulong dt;
  15. void Delay10ms(unsigned int c);
  16. unsigned char Key_Scan();

  17. //--点阵显示数组--//
  18. unsigned char code tab0[] =
  19. {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,
  20. 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
  21. 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,
  22. 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00};


  23. uchar code tab1[] ={255,255,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,255,255};
  24. uchar code tab2[] ={255,255,1,128,253,191,5,160,5,160,5,160,5,160,5,160,5,160,5,160,5,160,5,160,5,160,253,191,1,128,255,255}        ;
  25. uchar code tab3[] = {255,255,1,128,253,191,5,160,245,175,21,168,21,168,21,168,21,168,21,168,21,168,245,175,5,160,253,191,1,128,255,255};
  26. uchar code tab4[] ={255,255,1,128,253,191,5,160,245,175,21,168,213,171,85,170,85,170,213,171,21,168,245,175,5,160,253,191,1,128,255,255};
  27. uchar code tab5[] ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,1,128,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  28. uchar code tab6[] = {0,0,0,0,0,0,0,0,0,0,224,7,32,4,160,5,160,5,32,4,224,7,0,0,0,0,0,0,0,0,0,0};
  29. uchar code tab7[] = {0,0,0,0,0,0,248,31,8,16,232,23,40,20,168,21,168,21,40,20,232,23,8,16,248,31,0,0,0,0,0,0};
  30. uchar code tab8[] = {0,0,254,127,2,64,250,95,10,80,234,87,42,84,170,85,170,85,42,84,234,87,10,80,250,95,2,64,254,127,0,0};

  31. //--全局函数声明--//
  32. void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);
  33.                                                                                                                                                                                        

  34. void main(void)
  35. {
  36.         int k, i, ms;
  37.         i = 40;                                        //显示时间                                                                                                                                                                  
  38.         while(1)
  39.         {
  40.                 //--显示10--//
  41.                 for(ms = i; ms > 0; ms--)
  42.                 {
  43.                         for(k = 0; k < 16; k++)                                                                                
  44.                         {         
  45.                         HC595SendData(~tab1[2*k +1],~tab1[2*k],tab0[2*k],tab0[2*k + 1]);
  46.                         }                  
  47.                 }
  48.                 HC595SendData(0xff,0xff,0,0);                                                                                                                                             
  49.                
  50.                 //--显示09--//
  51.                 for(ms = i; ms > 0; ms--)
  52.                 {
  53.                         for(k = 0; k < 16; k++)                                                                                            
  54.                         {         
  55.                                 HC595SendData(~tab2[2*k +1],~tab2[2*k],tab0[2*k],tab0[2*k + 1]);                  
  56.                         }
  57.                 }
  58.                 HC595SendData(0xff,0xff,0,0);                                                                              
  59.                
  60.                 //--显示08--//
  61.                 for(ms = i; ms > 0; ms--)
  62.                 {
  63.                         for(k = 0; k < 16; k++)                                                                                                
  64.                         {         
  65.                                 HC595SendData(~tab3[2*k +1],~tab3[2*k],tab0[2*k],tab0[2*k + 1]);                  
  66.                         }
  67.                 }        
  68.                 HC595SendData(0xff,0xff,0,0);         
  69.                
  70.                 //--显示07--//
  71.                 for(ms = i; ms > 0; ms--)
  72.                 {
  73.                         for(k = 0; k < 16; k++)                                                
  74.                         {         
  75.                                 HC595SendData(~tab4[2*k +1],~tab4[2*k],tab0[2*k],tab0[2*k + 1]);                  
  76.                         }
  77.                 }        
  78.                 HC595SendData(0xff,0xff,0,0);                                                                                       
  79.                                                                                                                                                          
  80.                 //--显示06--//
  81.                 for(ms = i; ms > 0; ms--)
  82.                 {
  83.                         for(k = 0; k < 16; k++)                                                                                                
  84.                         {         
  85.                                 HC595SendData(~tab5[2*k +1],~tab5[2*k],tab0[2*k],tab0[2*k + 1]);                  
  86.                         }
  87.                 }        
  88.                 HC595SendData(0xff,0xff,0,0);                                                                                       
  89.         
  90.             //--显示05--//
  91.                 for(ms = i; ms > 0; ms--)
  92.                 {
  93.                         for(k = 0; k < 16; k++)                                                                                                //欢
  94.                         {         
  95.                                 HC595SendData(~tab6[2*k +1],~tab6[2*k],tab0[2*k],tab0[2*k + 1]);                  
  96.                         }
  97.                 }        
  98.                 HC595SendData(0xff,0xff,0,0);                                                      
  99.         
  100.             //--显示04--//
  101.                 for(ms = i; ms > 0; ms--)
  102.                 {
  103.                         for(k = 0; k < 16; k++)                                                        
  104.                         {         
  105.                                 HC595SendData(~tab7[2*k +1],~tab7[2*k],tab0[2*k],tab0[2*k + 1]);                  
  106.                         }
  107.                 }        
  108.                 HC595SendData(0xff,0xff,0,0);                                            
  109.                
  110.                 //--显示03--//
  111.                 for(ms = i; ms > 0; ms--)
  112.                 {
  113.                         for(k = 0; k < 16; k++)                                                        
  114.                         {         
  115.                                 HC595SendData(~tab8[2*k +1],~tab8[2*k],tab0[2*k],tab0[2*k + 1]);                  
  116.                         }
  117.                 }
  118.                 HC595SendData(0xff,0xff,0,0);                                                                                                                                      
  119.         }
  120. }



  121. void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)
  122. {  
  123.         uchar i;
  124.         
  125.         //--发送第一个字节--//
  126.         for(i=0;i<8;i++)
  127.         {
  128.                 MOSIO = BT3 >> 7 ;        //从高位到低位
  129.                 BT3 <<= 1;

  130.                 S_CLK = 0;
  131.                 S_CLK = 1;               
  132.         }

  133.         //--发送第一个字节--//
  134.         for(i=0;i<8;i++)
  135.         {
  136.                 MOSIO = BT2 >>7;                //从高位到低位
  137.                 BT2 <<= 1;

  138.                 S_CLK = 0;
  139.                 S_CLK = 1;        
  140.         }

  141.         //--发送第一个字节--//
  142.         for(i=0;i<8;i++)
  143.         {
  144.                 MOSIO = BT1 >> 7;                //从高位到低位
  145.                 BT1 <<= 1;
  146.                 S_CLK = 0;
  147.                 S_CLK = 1;        
  148.         }

  149.         //--发送第一个字节--//
  150.         for(i=0;i<8;i++)
  151.         {
  152.                 MOSIO = BT0 >> 7;                //从高位到低位
  153.                 BT0 <<= 1;
  154.                 S_CLK = 0;
  155.                 S_CLK = 1;
  156.         }
  157.    
  158.         //--输出--//
  159.         R_CLK = 0; //set dataline low
  160.         R_CLK = 1; //片选
  161.         R_CLK = 0; //set dataline low
  162. }

  163. unsigned char Key_Scan()
  164. {
  165.         unsigned char keyValue = 0 , i; //????

  166.         //--????1--//
  167.         if (GPIO_KEY != 0xFF)                //????K1????
  168.         {
  169.                 Delay10ms(1);        //????

  170.                 if (GPIO_KEY != 0xFF)        //??????????
  171.                 {
  172.                         keyValue = GPIO_KEY;
  173.                         i = 0;
  174.                         while ((i<50) && (GPIO_KEY != 0xFF))         //????????
  175.                         {
  176.                                 Delay10ms(1);
  177.                                 i++;
  178.                         }
  179.                 }
  180.         }


  181. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

下载:
dianzhen.zip (1.44 KB, 下载次数: 37)



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

使用道具 举报

沙发
ID:83626 发表于 2018-12-13 11:07 | 只看该作者
谢谢,正需要。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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