找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1900|回复: 1
收起左侧

单片机+三色点阵的测试 附源程序

[复制链接]
ID:977804 发表于 2022-1-11 19:54 | 显示全部楼层 |阅读模式
淘到一个三色点阵,首先网上找引脚图,没有找到,然后就是自己测试。
图123是单独测颜色 ,图4是汇总。
图5是接线图,直接32个IO口全上,没有74hc595,
图6是点亮单色
图7是三色都点亮。
后续有时间再做个动态。

图1

图1

图2

图2

图3

图3

图4

图4

图5

图5

图6

图6

图7

图7

附件里是代码和三色动态测试视频

单片机源程序如下:
  1. #include "reg52.h"


  2. //rotuse可以做到的 8*8点阵阳极接P2口,阴极接P1口,用下面的代码就可以实现!
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. void Init_int();
  6. void Init_time();
  7. void display(int yin,int yang);
  8. uint num_num[33][8]={
  9.                                  {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, //上电先全灭  
  10.                                 {0x99,0x00,0x00,0x00,0x81,0xc3,0xe7,0xff,},  //大爱心
  11.                   {0xFF,0xDB,0x81,0x81,0xC3,0xE7,0xFF,0xFF,},  //小爱心                                //1
  12.                                  {0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7,0xFF,},   //环心 中空外圈
  13.                                                                
  14.                  {0x99,0x81,0x81,0xC3,0xE7,0xFF,0xFF,0xFF,},   // 小心上                              //4
  15.                {0xFF,0x99,0x81,0x81,0xC3,0xE7,0xFF,0xFF,},      //   小心下                         //5
  16.                             {0x99,0x81,0x81,0xC3,0xE7,0xFF,0xFF,0xFF,},   // 小心上                              //4
  17.                {0xFF,0x99,0x81,0x81,0xC3,0xE7,0xFF,0xFF,},      //   小心下                         //5

  18.                                  {0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7,0xFF,},   //环心 中空外圈
  19.                                   {0x99,0x00,0x00,0x00,0x81,0xc3,0xe7,0xff,},  //大爱心
  20.                                           //10
  21.                                            //注意:数组第一个要移到最后


  22.                                    {0xE7,0xE7,0x81,0x99,0x99,0xFF,0xFF,0xFF,},  //坦克
  23.                                          {0xFF,0xE7,0xE7,0x81,0x99,0x99,0xFF,0xFF,},   //坦克下移一位
  24.                                              {0xFF,0xFF,0xE7,0xE7,0x81,0x99,0x99,0xFF,},   // 坦克再下移一位  
  25.                                                  //13
  26.                                                                    
  27.                {0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF,},      // 中间亮4点                       //5
  28.                             {0xEF,0xEF,0xE0,0x7,0xF7,0xF7,0xF7,0xEF,},   // 四点加翅膀                           //4
  29.               {0xF7,0x6F,0xA3,0xC5,0xF6,0xEF,0xDF,0xFB,},      //  翅膀转一度
  30.                            {0xBD,0xDB,0xE7,0xE7,0xD3,0xBD,0x7E,0x7E,},         //  翅膀打直
  31.                                           //17
  32.                                 {0xBD,0xDB,0xE7,0xE7,0xDB,0xBD,0xFF,0xFF,},   //   翅膀收一格
  33.                                 {0xFF,0xDB,0xE7,0xE7,0xDB,0xFF,0xFF,0xFF,},           //   翅膀再收格
  34.                                 {0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF,},            //   翅膀收完  只亮中间四点
  35.                                            //20         //注意:数组第一个要移到最后


  36.                             {0x7E,0x7E,0x66,0x66,0x7E,0x7E,0x0,0x0,},         //中间四点,  外面一圈
  37.                                  {0x81,0xBD,0xA5,0xA5,0xBD,0x81,0xFF,0xFF,}, //中间四点, 第二圈
  38.                                  {0xFF,0xC3,0xDB,0xDB,0xC3,0xFF,0xFF,0xFF,},   //小内圈
  39.                                                   //23
  40.                                         {0xBD,0xFF,0xE7,0xE7,0xFF,0xBD,0xFF,0xFF,},        //中间四点  中圈四点
  41.                                    {0x9D,0xFD,0xE7,0xE7,0xBF,0xB9,0xFF,0xFF,},         //中间四点  中圈8点
  42.                                    {0xCF,0xFD,0xE5,0xA7,0xBF,0xF3,0xFF,0xFF,},           //中间四点  中圈8点移动一位
  43.                                    {0xE7,0xFF,0xA5,0xA5,0xFF,0xE7,0xFF,0xFF,} ,            //中间四点  中圈8点再移动一位
  44.                                    {0xFF,0xE7,0xC3,0xC3,0xE7,0xFF,0xFF,0xFF,},                 //中间四点   中圈向中聚拢
  45.                                                    //28
  46.                                     {0xFF,0xE7,0xDB,0xDB,0xE7,0xFF,0xFF,0xFF,},           //显示空心小圆
  47.                                         {0xC3,0xBD,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF,}, //显示空心中圆
  48.                                         {0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x81,0x81,},    //显示空心大圆
  49.                                                                         {0x99,0x00,0x00,0x00,0x81,0xc3,0xe7,0xff,},  //大爱心
  50.                  // {0xFF,0xDB,0x81,0x81,0xC3,0xE7,0xFF,0xFF,},  //小爱心                                //1
  51.                                  {0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7,0xFF,},   //环心 中空外圈
  52.                                         //33
  53.                                          };                                  //9

  54. unsigned int count,i=1,weiyi,timer,shu,n=1;
  55. unsigned int YS,YS2;

  56. void main()
  57. {
  58.         Init_time();
  59.       
  60.         while(1)
  61.         {}
  62. }

  63. void Init_time()                                   //定时器初始化
  64. {
  65.         TMOD|=0x01;
  66.         TH0=0xff;
  67.         TL0=0x1F;
  68.         TR0=1;
  69.         ET0=1;
  70.         EA=1;      
  71. }



  72. void time() interrupt 1                          //定时器函数
  73. {        //        uchar xx;
  74.         TH0=0xfE;                     //50微秒
  75.         TL0=0xFF;
  76.         count++;
  77.         if(count>8)
  78.         {        //        i=0;
  79.                 count=0;
  80.                // if(xx==0){display(i,i);}
  81.                                 //if(xx!=1){ display(i-1,i);}
  82.                                  display(i-1,i);
  83.                 i++;  
  84.                 if(i>8)        //改变的是右边显示的亮灭
  85.                 i=1;  // xx=1;
  86.         }  
  87.         timer++;
  88.         if(timer>1250)
  89.         {
  90.                 timer=0;
  91.                 //weiyi++;
  92.                                 weiyi=3; //让位停在5,字就不会变了
  93.                                      shu++;
  94.                         if(shu>32)
  95.                                                  shu=0; //此行反馈的数,就是显示的信息,让SHU=0,就是一直显示0
  96.                                
  97.                                                     if((shu>=0)&&(shu<12))YS=0;
  98.                                                         if((shu>=12)&&(shu<23))YS=1;
  99.                                                         if((shu>=23)&&(shu<40))YS=2;
  100.                        
  101.         }
  102. }
  103. void display(int yin,int yang)                   //显示函数
  104. {
  105. switch (YS)
  106. {
  107.                 case(0): //初次颜色值
  108.                   {
  109.                           P1=P3=0XFF;//亮此色时,其他色关闭
  110.                 P2 = ~(~num_num[shu][yin]<<weiyi);
  111.                 if(weiyi<3)
  112.                 {
  113.                         P2 = ~(~num_num[shu][yin]>>3-weiyi);               
  114.                 }
  115.                 else
  116.                 {
  117.                         P2 = ~(~num_num[shu][yin]<<weiyi-3);
  118.                 }
  119.                 switch(yang)
  120.                 {
  121.                         case 0 : P0 = 0x01;break;
  122.                         case 1 : P0 = 0x02;break;
  123.                         case 2 : P0 = 0x04;break;
  124.                         case 3 : P0 = 0x08;break;
  125.                         case 4 : P0 = 0x10;break;
  126.                         case 5 : P0 = 0x20;break;
  127.                         case 6 : P0 = 0x40;break;
  128.                         case 7 : P0 = 0x80;break;
  129.                         default : P0 = 0x01; break;
  130.                 }
  131.                         }          break;//显示第0位               
  132.                
  133.                
  134.                
  135.                 case(1):       
  136.                   {
  137.                                                      P2=P3=0XFF;//亮此色时,其他色关闭
  138.                                         P1 = ~(~num_num[shu][yin]<<weiyi);
  139.                 if(weiyi<3)
  140.                 {
  141.                         P1 = ~(~num_num[shu][yin]>>3-weiyi);               
  142.                 }
  143.                 else
  144.                 {
  145.                         P1 = ~(~num_num[shu][yin]<<weiyi-3);
  146.                 }
  147.                 switch(yang)
  148.                 {
  149.                         case 0 : P0 = 0x01;break;
  150.                         case 1 : P0 = 0x02;break;
  151.                         case 2 : P0 = 0x04;break;
  152.                         case 3 : P0 = 0x08;break;
  153.                         case 4 : P0 = 0x10;break;
  154.                         case 5 : P0 = 0x20;break;
  155.                         case 6 : P0 = 0x40;break;
  156.                         case 7 : P0 = 0x80;break;
  157.                         default : P0 = 0x01; break;
  158.                         }          
  159.                   
  160.                   }        break;//显示第0位


  161.                 case(2):        //亮红灯,P3红灯
  162.                   {
  163.                                                      P1=P2=0Xff;//亮此色时,其他色关闭
  164.                                         //        P0=0X00;//COM口重新打开
  165.                                         P3 = ~(~num_num[shu][yin]<<weiyi);
  166.                 if(weiyi<3)
  167.                 {
  168.                         P3 = ~(~num_num[shu][yin]>>3-weiyi);               
  169.                 }
  170.                 else
  171.                 {
  172.                         P3 = ~(~num_num[shu][yin]<<weiyi-3);
  173.                 }
  174.                 switch(yang)
  175.                 {
  176.                         case 0 : P0 = 0x01;break;
  177.                         case 1 : P0 = 0x02;break;
  178.                         case 2 : P0 = 0x04;break;
  179.                         case 3 : P0 = 0x08;break;
  180.                         case 4 : P0 = 0x10;break;
  181.                         case 5 : P0 = 0x20;break;
  182.                         case 6 : P0 = 0x40;break;
  183.                         case 7 : P0 = 0x80;break;
  184.                         default : P0 = 0x01; break;
  185.                         }          
  186.                   
  187.                   }        break;//显示第0位








  188. }
  189. }
复制代码
Keil代码下载,以及实物的视频:
Desktop.rar (3.31 MB, 下载次数: 7)

评分

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

查看全部评分

回复

使用道具 举报

ID:977804 发表于 2022-1-11 19:56 | 显示全部楼层
不小心复制了东西进去,怎么修改呀,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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