找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2574|回復(fù): 1
收起左側(cè)

單片機(jī)+三色點(diǎn)陣的測(cè)試 附源程序

[復(fù)制鏈接]
ID:977804 發(fā)表于 2022-1-11 19:54 | 顯示全部樓層 |閱讀模式
淘到一個(gè)三色點(diǎn)陣,首先網(wǎng)上找引腳圖,沒(méi)有找到,然后就是自己測(cè)試。
圖123是單獨(dú)測(cè)顏色 ,圖4是匯總。
圖5是接線圖,直接32個(gè)IO口全上,沒(méi)有74hc595,
圖6是點(diǎn)亮單色
圖7是三色都點(diǎn)亮。
后續(xù)有時(shí)間再做個(gè)動(dòng)態(tài)。

圖1

圖1

圖2

圖2

圖3

圖3

圖4

圖4

圖5

圖5

圖6

圖6

圖7

圖7

附件里是代碼和三色動(dòng)態(tài)測(cè)試視頻

單片機(jī)源程序如下:
  1. #include "reg52.h"


  2. //rotuse可以做到的 8*8點(diǎn)陣陽(yáng)極接P2口,陰極接P1口,用下面的代碼就可以實(shí)現(xiàn)!
  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,},  //大愛(ài)心
  11.                   {0xFF,0xDB,0x81,0x81,0xC3,0xE7,0xFF,0xFF,},  //小愛(ài)心                                //1
  12.                                  {0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7,0xFF,},   //環(huán)心 中空外圈
  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,},   //環(huán)心 中空外圈
  19.                                   {0x99,0x00,0x00,0x00,0x81,0xc3,0xe7,0xff,},  //大愛(ài)心
  20.                                           //10
  21.                                            //注意:數(shù)組第一個(gè)要移到最后


  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點(diǎn)                       //5
  28.                             {0xEF,0xEF,0xE0,0x7,0xF7,0xF7,0xF7,0xEF,},   // 四點(diǎn)加翅膀                           //4
  29.               {0xF7,0x6F,0xA3,0xC5,0xF6,0xEF,0xDF,0xFB,},      //  翅膀轉(zhuǎn)一度
  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,},            //   翅膀收完  只亮中間四點(diǎn)
  35.                                            //20         //注意:數(shù)組第一個(gè)要移到最后


  36.                             {0x7E,0x7E,0x66,0x66,0x7E,0x7E,0x0,0x0,},         //中間四點(diǎn),  外面一圈
  37.                                  {0x81,0xBD,0xA5,0xA5,0xBD,0x81,0xFF,0xFF,}, //中間四點(diǎn), 第二圈
  38.                                  {0xFF,0xC3,0xDB,0xDB,0xC3,0xFF,0xFF,0xFF,},   //小內(nèi)圈
  39.                                                   //23
  40.                                         {0xBD,0xFF,0xE7,0xE7,0xFF,0xBD,0xFF,0xFF,},        //中間四點(diǎn)  中圈四點(diǎn)
  41.                                    {0x9D,0xFD,0xE7,0xE7,0xBF,0xB9,0xFF,0xFF,},         //中間四點(diǎn)  中圈8點(diǎn)
  42.                                    {0xCF,0xFD,0xE5,0xA7,0xBF,0xF3,0xFF,0xFF,},           //中間四點(diǎn)  中圈8點(diǎn)移動(dòng)一位
  43.                                    {0xE7,0xFF,0xA5,0xA5,0xFF,0xE7,0xFF,0xFF,} ,            //中間四點(diǎn)  中圈8點(diǎn)再移動(dòng)一位
  44.                                    {0xFF,0xE7,0xC3,0xC3,0xE7,0xFF,0xFF,0xFF,},                 //中間四點(diǎn)   中圈向中聚攏
  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,},  //大愛(ài)心
  50.                  // {0xFF,0xDB,0x81,0x81,0xC3,0xE7,0xFF,0xFF,},  //小愛(ài)心                                //1
  51.                                  {0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7,0xFF,},   //環(huán)心 中空外圈
  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()                                   //定時(shí)器初始化
  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                          //定時(shí)器函數(shù)
  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,字就不會(huì)變了
  93.                                      shu++;
  94.                         if(shu>32)
  95.                                                  shu=0; //此行反饋的數(shù),就是顯示的信息,讓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)                   //顯示函數(shù)
  104. {
  105. switch (YS)
  106. {
  107.                 case(0): //初次顏色值
  108.                   {
  109.                           P1=P3=0XFF;//亮此色時(shí),其他色關(guān)閉
  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;//亮此色時(shí),其他色關(guān)閉
  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;//亮此色時(shí),其他色關(guān)閉
  164.                                         //        P0=0X00;//COM口重新打開(kāi)
  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. }
復(fù)制代碼
Keil代碼下載,以及實(shí)物的視頻:
Desktop.rar (3.31 MB, 下載次數(shù): 7)

評(píng)分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:977804 發(fā)表于 2022-1-11 19:56 | 顯示全部樓層
不小心復(fù)制了東西進(jìn)去,怎么修改呀,
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表