淘到一个三色点阵,首先网上找引脚图,没有找到,然后就是自己测试。
图123是单独测颜色 ,图4是汇总。
图5是接线图,直接32个IO口全上,没有74hc595,
图6是点亮单色
图7是三色都点亮。
后续有时间再做个动态。
图1
图2
图3
图4
图5
图6
图7
附件里是代码和三色动态测试视频
单片机源程序如下:
- #include "reg52.h"
- //rotuse可以做到的 8*8点阵阳极接P2口,阴极接P1口,用下面的代码就可以实现!
- #define uchar unsigned char
- #define uint unsigned int
- void Init_int();
- void Init_time();
- void display(int yin,int yang);
- uint num_num[33][8]={
- {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, //上电先全灭
- {0x99,0x00,0x00,0x00,0x81,0xc3,0xe7,0xff,}, //大爱心
- {0xFF,0xDB,0x81,0x81,0xC3,0xE7,0xFF,0xFF,}, //小爱心 //1
- {0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7,0xFF,}, //环心 中空外圈
-
- {0x99,0x81,0x81,0xC3,0xE7,0xFF,0xFF,0xFF,}, // 小心上 //4
- {0xFF,0x99,0x81,0x81,0xC3,0xE7,0xFF,0xFF,}, // 小心下 //5
- {0x99,0x81,0x81,0xC3,0xE7,0xFF,0xFF,0xFF,}, // 小心上 //4
- {0xFF,0x99,0x81,0x81,0xC3,0xE7,0xFF,0xFF,}, // 小心下 //5
- {0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7,0xFF,}, //环心 中空外圈
- {0x99,0x00,0x00,0x00,0x81,0xc3,0xe7,0xff,}, //大爱心
- //10
- //注意:数组第一个要移到最后
- {0xE7,0xE7,0x81,0x99,0x99,0xFF,0xFF,0xFF,}, //坦克
- {0xFF,0xE7,0xE7,0x81,0x99,0x99,0xFF,0xFF,}, //坦克下移一位
- {0xFF,0xFF,0xE7,0xE7,0x81,0x99,0x99,0xFF,}, // 坦克再下移一位
- //13
-
- {0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF,}, // 中间亮4点 //5
- {0xEF,0xEF,0xE0,0x7,0xF7,0xF7,0xF7,0xEF,}, // 四点加翅膀 //4
- {0xF7,0x6F,0xA3,0xC5,0xF6,0xEF,0xDF,0xFB,}, // 翅膀转一度
- {0xBD,0xDB,0xE7,0xE7,0xD3,0xBD,0x7E,0x7E,}, // 翅膀打直
- //17
- {0xBD,0xDB,0xE7,0xE7,0xDB,0xBD,0xFF,0xFF,}, // 翅膀收一格
- {0xFF,0xDB,0xE7,0xE7,0xDB,0xFF,0xFF,0xFF,}, // 翅膀再收格
- {0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF,}, // 翅膀收完 只亮中间四点
- //20 //注意:数组第一个要移到最后
- {0x7E,0x7E,0x66,0x66,0x7E,0x7E,0x0,0x0,}, //中间四点, 外面一圈
- {0x81,0xBD,0xA5,0xA5,0xBD,0x81,0xFF,0xFF,}, //中间四点, 第二圈
- {0xFF,0xC3,0xDB,0xDB,0xC3,0xFF,0xFF,0xFF,}, //小内圈
- //23
- {0xBD,0xFF,0xE7,0xE7,0xFF,0xBD,0xFF,0xFF,}, //中间四点 中圈四点
- {0x9D,0xFD,0xE7,0xE7,0xBF,0xB9,0xFF,0xFF,}, //中间四点 中圈8点
- {0xCF,0xFD,0xE5,0xA7,0xBF,0xF3,0xFF,0xFF,}, //中间四点 中圈8点移动一位
- {0xE7,0xFF,0xA5,0xA5,0xFF,0xE7,0xFF,0xFF,} , //中间四点 中圈8点再移动一位
- {0xFF,0xE7,0xC3,0xC3,0xE7,0xFF,0xFF,0xFF,}, //中间四点 中圈向中聚拢
- //28
- {0xFF,0xE7,0xDB,0xDB,0xE7,0xFF,0xFF,0xFF,}, //显示空心小圆
- {0xC3,0xBD,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF,}, //显示空心中圆
- {0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x81,0x81,}, //显示空心大圆
- {0x99,0x00,0x00,0x00,0x81,0xc3,0xe7,0xff,}, //大爱心
- // {0xFF,0xDB,0x81,0x81,0xC3,0xE7,0xFF,0xFF,}, //小爱心 //1
- {0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE7,0xFF,}, //环心 中空外圈
- //33
- }; //9
- unsigned int count,i=1,weiyi,timer,shu,n=1;
- unsigned int YS,YS2;
- void main()
- {
- Init_time();
-
- while(1)
- {}
- }
- void Init_time() //定时器初始化
- {
- TMOD|=0x01;
- TH0=0xff;
- TL0=0x1F;
- TR0=1;
- ET0=1;
- EA=1;
- }
- void time() interrupt 1 //定时器函数
- { // uchar xx;
- TH0=0xfE; //50微秒
- TL0=0xFF;
- count++;
- if(count>8)
- { // i=0;
- count=0;
- // if(xx==0){display(i,i);}
- //if(xx!=1){ display(i-1,i);}
- display(i-1,i);
- i++;
- if(i>8) //改变的是右边显示的亮灭
- i=1; // xx=1;
- }
- timer++;
- if(timer>1250)
- {
- timer=0;
- //weiyi++;
- weiyi=3; //让位停在5,字就不会变了
- shu++;
- if(shu>32)
- shu=0; //此行反馈的数,就是显示的信息,让SHU=0,就是一直显示0
-
- if((shu>=0)&&(shu<12))YS=0;
- if((shu>=12)&&(shu<23))YS=1;
- if((shu>=23)&&(shu<40))YS=2;
-
- }
- }
- void display(int yin,int yang) //显示函数
- {
- switch (YS)
- {
- case(0): //初次颜色值
- {
- P1=P3=0XFF;//亮此色时,其他色关闭
- P2 = ~(~num_num[shu][yin]<<weiyi);
- if(weiyi<3)
- {
- P2 = ~(~num_num[shu][yin]>>3-weiyi);
- }
- else
- {
- P2 = ~(~num_num[shu][yin]<<weiyi-3);
- }
- switch(yang)
- {
- case 0 : P0 = 0x01;break;
- case 1 : P0 = 0x02;break;
- case 2 : P0 = 0x04;break;
- case 3 : P0 = 0x08;break;
- case 4 : P0 = 0x10;break;
- case 5 : P0 = 0x20;break;
- case 6 : P0 = 0x40;break;
- case 7 : P0 = 0x80;break;
- default : P0 = 0x01; break;
- }
- } break;//显示第0位
-
-
-
- case(1):
- {
- P2=P3=0XFF;//亮此色时,其他色关闭
- P1 = ~(~num_num[shu][yin]<<weiyi);
- if(weiyi<3)
- {
- P1 = ~(~num_num[shu][yin]>>3-weiyi);
- }
- else
- {
- P1 = ~(~num_num[shu][yin]<<weiyi-3);
- }
- switch(yang)
- {
- case 0 : P0 = 0x01;break;
- case 1 : P0 = 0x02;break;
- case 2 : P0 = 0x04;break;
- case 3 : P0 = 0x08;break;
- case 4 : P0 = 0x10;break;
- case 5 : P0 = 0x20;break;
- case 6 : P0 = 0x40;break;
- case 7 : P0 = 0x80;break;
- default : P0 = 0x01; break;
- }
-
- } break;//显示第0位
- case(2): //亮红灯,P3红灯
- {
- P1=P2=0Xff;//亮此色时,其他色关闭
- // P0=0X00;//COM口重新打开
- P3 = ~(~num_num[shu][yin]<<weiyi);
- if(weiyi<3)
- {
- P3 = ~(~num_num[shu][yin]>>3-weiyi);
- }
- else
- {
- P3 = ~(~num_num[shu][yin]<<weiyi-3);
- }
- switch(yang)
- {
- case 0 : P0 = 0x01;break;
- case 1 : P0 = 0x02;break;
- case 2 : P0 = 0x04;break;
- case 3 : P0 = 0x08;break;
- case 4 : P0 = 0x10;break;
- case 5 : P0 = 0x20;break;
- case 6 : P0 = 0x40;break;
- case 7 : P0 = 0x80;break;
- default : P0 = 0x01; break;
- }
-
- } break;//显示第0位
- }
- }
复制代码 Keil代码下载,以及实物的视频:
Desktop.rar
(3.31 MB, 下载次数: 7)
|