|
本帖最后由 xiashan 于 2015-4-5 16:43 编辑
电池部分 ,还弄了个自锁开关,电源 是 3.7V 的锂电池,从小的MP3上拆下的 。
拍摄视频:
使用的 P1 和 P3 口,有个复位的 引脚 去掉,没有复位部分没什么 问题,单片机 能正常工作,把P3口 的引脚 朝 P1 口那边扭弯点。有两排贴片(0805封装)的LED 灯 1和2,1那一排 LED 左为负极,右为正极。2那一排 LED 右为负极,左为正极。
这样 就行了,但是 亮度较低,最好 分别加个 470~1K 的上拉电阻,那样 就比较亮,但单片机 可能 会有点 微热,不过 没事 的 ,没那么容易 坏 。
最好 能 用 12C5A 系列 的 ,它的IO 口 有个 强上拉 达20 mA,那驱动就 足够 了,,,唉 ,只是 我做的 时候 手头没有。
// mini LED摇摇棒
// 显示64*16像素(x*15)- #include <AT89X52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit KeyChoose=P0^3;
- sbit KeyLeft=P2^7;
- sbit KeyRight=P2^6;
- sbit Zero=P2^0;
- uchar Color;
- uchar code LEDDriverTable[]=
- {
- 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, // 1~ 8
- 0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff // 9~15
- };
- /////////////////////////////////////////////////////////////////////////
- // 汉字字模表 //
- // 纵向取模下高位,数据排列:从上到下从左到右 //
- /////////////////////////////////////////////////////////////////////////
- uchar code GB16wo[] = // 数据表
- {
- //"你",
- 0x40,0x00,0x20,0x00,0xF8,0xFF,0x07,0x00,
- 0x40,0x00,0x20,0x08,0x18,0x04,0x0F,0x43,
- 0x08,0x80,0xC8,0x7F,0x08,0x00,0x08,0x01,
- 0x28,0x06,0x18,0x0C,0x00,0x00,0x00,0x00,
- //"爱",
- 0x40,0x00,0xB0,0x00,0x92,0x40,0x96,0x30,
- 0x9A,0x8C,0x92,0x83,0xF2,0x46,0x9E,0x2A,
- 0x92,0x12,0x91,0x2A,0x99,0x26,0x95,0x42,
- 0x91,0xC0,0x50,0x40,0x30,0x00,0x00,0x00,
- //"我",
- 0x20,0x00,0x24,0x08,0x24,0x48,0x24,0x84,
- 0xFE,0x7F,0x23,0x02,0x22,0x21,0x20,0x10,
- 0xFF,0x09,0x20,0x06,0x22,0x1A,0xAC,0x61,
- 0x20,0x80,0x30,0xE0,0x20,0x00,0x00,0x00,
- //"吗",
- 0x00,0x00,0xFC,0x1F,0x04,0x08,0x04,0x08,
- 0xFE,0x1F,0x04,0x08,0x02,0x08,0xFA,0x09,
- 0x02,0x09,0x02,0x09,0x02,0x0D,0xFF,0x49,
- 0x02,0x81,0x80,0x7F,0x00,0x01,0x00,0x00,
- //"?",
- 0x00,0x00,0x00,0x00,0x30,0x00,0x38,0x00,
- 0x28,0x00,0x04,0x00,0x04,0x20,0x04,0x70,
- 0x84,0x73,0x84,0x21,0xC4,0x00,0x4C,0x00,
- 0x78,0x00,0x30,0x00,0x00,0x00,0x00,0x00
- };
- /*****n(us)延时子程序*****/
- void Delay(uint N)
- {
- uint x,y;
- for(x=0; x<=N;x++)
- for(y=0;y<=2;y++);
- }
- void DisplayPoint(uchar LEDChoose, uchar Color)//bit Color)?//,uint DisplayTime) //15(×2)LED //LEDChoose(Up 1~15 Down),Color(0:Green;1:Blue),DisplayTime ()
- {// uchar t;
- //t=(LEDChoose-1)+Color*8;
- if(LEDChoose>=1&LEDChoose<=8)
- {
- P1=LEDDriverTable[(LEDChoose-1)+Color*8];
- P3=(!Color)*0xff; //!or~
- }
- else if(LEDChoose>=9&LEDChoose<=15)
- {
- P3=LEDDriverTable[(LEDChoose-1-8)+(Color*8)];
- P1=(Color)*0xff;
- }
- else
- {
- P1=0xff;
- P3=0xff;
- }
- //Delay(DisplayTime); //
- }
- void YScanDisplay(uchar YDisplay,uint DisplayTime,uchar UorD) //YScanDisplayData(8bit) ;
- {
- //bit PointTable[8];
- // uchar PointTable[8]; //! LEDChoose is (Up 1~15 Down)
- uchar i=0;
- for(i=1;i<=8;i++)
- //{
- // while(YDisplay!=0)
- {
- // PointTable[i]=(bit)(YDisplay&0x01);
- if((bit)(YDisplay&0x01)!=0) //target: (共阴~取反~共阳)
- {
- DisplayPoint(i+UorD*8,Color); //Color
- Delay(DisplayTime);
- }
- YDisplay>>=1;
- // i++;
-
- }
- //}
- // for(i=0;i<=7;i++)
- //while(PointTable[i]!='\0')
- // {
- // i++;
- // }
- }
- void XScanDisplay()
- {
- }
- /*****主函数*****/
- void main(void)
- {
- uchar tt,ccc=1;
- bit cc=0;
- Zero = 0;
- while(520)
- // if(KeyRight=0)
- {
- if(KeyChoose=0)cc=!cc;
- while(KeyLeft);
- Delay(1400);
- for(tt=1;tt<=160;tt++)
- {
- YScanDisplay(GB16wo[tt],2,tt%2);
- if(++ccc==32){
- Color=!Color;
- ccc=0;}
- }
- P1=0xff;
- P3=0xff;
- while(KeyRight);
- Delay(1400);
- for(tt=160;tt>=1;tt--)
- {
- YScanDisplay(GB16wo[tt],2,tt%2);
- if(++ccc==32){
- Color=!Color;
- ccc=0;}
- }
- P1=0xff;
- P3=0xff;
- };
- //////////////////////以下为最开始 的硬件测试程序,用来检测LED 有没有焊接好,有没有焊接烧坏等///////////////////////////
- //效果是 :首先是第一排亮,然后是第二排亮,最后 全亮,当然这只是看起来全亮,但是 LED 不可能真正同时亮,实际上,某一时刻,只有一个被点亮
- /*
- // P1=0x80;
- // P3=0x80;
- for(tt=0;tt<=15;tt++)
- {
- DisplayPoint(tt,1);
- Delay(10000);
- }
- for(tt=0;tt<=15;tt++)
- {
- DisplayPoint(tt,0);
- Delay(10000);
- }
- while(520){
- for(tt=0;tt<=15;tt++)
- {
- DisplayPoint(tt,1);
- Delay(350);
- DisplayPoint(tt,0);
- Delay(700);
- }}
- while(520);
- // while(1)
- // {
- //-----------忧伤的分割线-----------//
- P1=0xfe; //0b
- delay(100);
- P1=0x01; //0r
- delay(100);
- P1=0xfc; //1b
- delay(100);
- P1=0x03; //1r
- delay(100);
- P1=0xf8; //2b
- delay(100);
- P1=0x07;
- delay(100); //2r
- P1=0x; //b
- delay(100);
- P1=0x; //r
- delay(100);
- while(1);
- // }
- */
- }
- /*****END*****/
复制代码
|
|