看到51hei的壇子有壇友做的16X16LED漢字顯示屏,作為生日禮物表情意,我也想著做一個!以滿足動手愛好!
用AT89C52的,驅動電路復雜得不得了,32個三極管,32個電阻啊!焊得頭到暈啊!還要個4-16譯碼電路!!!!!!
幸好有愛情的力量,為那個哥們辛苦為感動!
我呢,有STC12C5A60S2這個單片機的"神器",比AVR的還好.價不貴,才7元/片!有AD,PWM,端口四態,可最大驅動20MA電流!60KB的程序FLASH ROM.爽YY啊.一個簡單電路就可以做成16X16的LED了. 8X8的雙色是我2元/片淘來的!只用到了紅色的!
電路簡潔無比,就是一個單片機,四片8*8LED點陣,一個12M晶振,2個30P電容,(12M晶振,2個30P電容,可以省的.,便為了能在線下載,加上去方便下載程序)
電路這么簡單,也是受到杜洋老師的影響,我這個還是列驅動,實測電流35MA,運行一個晚上,芯片安全.就不費心思研究杜老師的點驅動了!!!
程序也是學別人的,改了下就能用,C就是好啊!匯編的話,估計沒那么方便!
不用那么多了,上圖說話!
// 本程序演示 STC12C5A60S2 系列直驅四個8*8LED點陣組成16X16點陣
//
//改編:桃源客, 日期:2010-9-19
//---------------------------------------------------------------------
//#include <REG52.H>
#include <intrins.H>
#include "STC12C5A60s2.H"
//---------------------------------------------------------------------
typedef unsigned char uchar;
typedef unsigned int uint;
//以下字模為PC2LCD2000生成,選"陰碼,逆向"方式.
uchar code zimo1[1088]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
x00,0x00, //留一行空白16X16字符,作流動開始用.
0x20,0x04,0x20,0x04,0x22,0x42,0x22,0x82,
0xFE,0x7F,0x21,0x01,0x21,0x01,0x20,0x10,
0x20,0x10,0xFF,0x08,0x20,0x07,0x22,0x1A,
0xAC,0x21,0x20,0x40,0x20,0xF0,0x00,0x00,/*"我",0*/
/* (16 X 16 , 宋體 ) */
0x00,0x40,0x40,0x20,0xB2,0xA0,0x96,0x90,
0x9A,0x4C,0x92,0x47,0xF6,0x2A,0x9A,0x2A,
0x93,0x12,0x91,0x1A,0x99,0x26,0x97,0x22,
0x91,0x40,0x90,0xC0,0x30,0x40,0x00,0x00,/*"愛",1*/
/* (16 X 16 , 宋體 ) */
0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,
0x29,0x09,0x2E,0x09,0x2A,0x09,0xF8,0xFF,
0x28,0x09,0x2C,0x09,0x2B,0x09,0x2A,0x09,
0xF8,0x0B,0x00,0x08,0x00,0x08,0x00,0x00,/*"單",2*/
/* (16 X 16 , 宋體 ) */
0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,
0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x01,
0x10,0x01,0x1F,0x01,0x10,0x01,0x10,0xFF,
0x10,0x00,0x18,0x00,0x10,0x00,0x00,0x00,/*"片",3*/
/* (16 X 16 , 宋體 ) */
0x08,0x04,0x08,0x03,0xC8,0x00,0xFF,0xFF,
0x48,0x00,0x88,0x41,0x08,0x30,0x00,0x0C,
0xFE,0x03,0x02,0x00,0x02,0x00,0x02,0x00,
0xFE,0x3F,0x00,0x40,0x00,0x78,0x00,0x00,/*"機",4*/
/* (16 X 16 , 宋體 ) */
0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",5*/
/* (16 X 16 , 宋體 ) */
0x20,0x04,0x20,0x04,0x22,0x42,0x22,0x82,
0xFE,0x7F,0x21,0x01,0x21,0x01,0x20,0x10,
0x20,0x10,0xFF,0x08,0x20,0x07,0x22,0x1A,
0xAC,0x21,0x20,0x40,0x20,0xF0,0x00,0x00,/*"我",6*/
/* (16 X 16 , 宋體 ) */
0x00,0x40,0x40,0x20,0xB2,0xA0,0x96,0x90,
0x9A,0x4C,0x92,0x47,0xF6,0x2A,0x9A,0x2A,
0x93,0x12,0x91,0x1A,0x99,0x26,0x97,0x22,
0x91,0x40,0x90,0xC0,0x30,0x40,0x00,0x00,/*"愛",7*/
/* (16 X 16 , 宋體 ) */
0x10,0x42,0x92,0x42,0x54,0x2A,0x38,0x2E,
0xFF,0x13,0x38,0x1A,0x54,0x26,0x52,0x02,
0x80,0x40,0xF0,0x20,0x1F,0x13,0x12,0x0C,
0x10,0x33,0xF0,0x60,0x10,0x20,0x00,0x00,/*"數",8*/
/* (16 X 16 , 宋體 ) */
0x02,0x01,0x82,0x00,0xE2,0x7F,0x5E,0x10,
0x42,0x10,0xC2,0x3F,0x00,0x00,0x02,0x04,
0xFA,0x04,0x82,0x04,0x82,0x44,0x82,0x84,
0xFE,0x40,0x80,0x3F,0x00,0x00,0x00,0x00,/*"碼",9*/
/* (16 X 16 , 宋體 ) */
0x00,0x20,0x08,0x60,0x08,0x30,0x08,0x08,
0x08,0x18,0x08,0x24,0x09,0x24,0x0A,0x22,
0x0C,0x41,0x88,0x40,0x48,0x40,0x28,0x40,
0x1C,0x40,0x08,0x40,0x00,0x40,0x00,0x00,/*"之",10*/
/* (16 X 16 , 宋體 ) */
0x00,0x00,0x18,0x29,0x04,0x29,0x14,0x15,
0x94,0x14,0x94,0x4A,0xD5,0x89,0xB6,0x44,
0x14,0x3F,0x14,0x06,0x94,0x09,0x04,0x09,
0x14,0x10,0x0C,0x30,0x04,0x10,0x00,0x00,/*"家",11*/
/* (16 X 16 , 宋體 ) */
0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",12*/
/* (16 X 16 , 宋體 ) */
0x20,0x04,0x20,0x04,0x22,0x42,0x22,0x82,
0xFE,0x7F,0x21,0x01,0x21,0x01,0x20,0x10,
0x20,0x10,0xFF,0x08,0x20,0x07,0x22,0x1A,
0xAC,0x21,0x20,0x40,0x20,0xF0,0x00,0x00,/*"我",13*/
/* (16 X 16 , 宋體 ) */
0x80,0x00,0x40,0x00,0xF0,0x7F,0x1C,0x00,
0x03,0x00,0xF0,0x7F,0x01,0x00,0x0E,0x00,
0x04,0x00,0x00,0x00,0x04,0x00,0x04,0x20,
0x04,0x40,0xFC,0x3F,0x00,0x00,0x00,0x00,/*"們",14*/
/* (16 X 16 , 宋體 ) */
0x00,0x04,0x04,0x02,0x04,0x01,0xC4,0x7F,
0x64,0x00,0x9C,0x20,0x87,0x20,0x84,0x20,
0x84,0x20,0xE4,0x3F,0x84,0x20,0x84,0x20,
0x84,0x20,0x84,0x20,0x04,0x20,0x00,0x00,/*"在",15*/
/* (16 X 16 , 宋體 ) */
0x40,0x80,0x42,0x40,0x44,0x20,0xCC,0x1F,
0x00,0x20,0x08,0x40,0x28,0x50,0x48,0x48,
0x89,0x44,0x0E,0x43,0xCA,0x44,0x38,0x48,
0x08,0x50,0x08,0x40,0x00,0x40,0x00,0x00,/*"這",16*/
/* (16 X 16 , 宋體 ) */
0x00,0x40,0x00,0x40,0xFF,0x44,0x91,0x44,
0x91,0x44,0x91,0x44,0x91,0x44,0xFF,0x7F,
0x91,0x44,0x91,0x44,0x91,0x44,0x91,0x44,
0xFF,0x44,0x00,0x40,0x00,0x40,0x00,0x00,/*"里",17*/
/* (16 X 16 , 宋體 ) */
0x00,0x02,0x10,0x02,0x10,0x82,0x10,0x42,
0x10,0x32,0xFE,0x1F,0x10,0x0A,0x10,0x02,
0x10,0x02,0x10,0x06,0xFE,0x0B,0x10,0x32,
0x10,0xE2,0x10,0x42,0x00,0x02,0x00,0x00,/*"共",18*/
/* (16 X 16 , 宋體 ) */
0x00,0x00,0xFE,0xFF,0x02,0x00,0x12,0x00,
0x92,0x1F,0x92,0x08,0x92,0x08,0x92,0x08,
0x92,0x08,0x92,0x08,0x92,0x1F,0x12,0x40,
0x02,0x80,0xFE,0x7F,0x00,0x00,0x00,0x00,/*"同",19*/
/* (16 X 16 , 宋體 ) */
0x00,0x08,0x04,0x08,0x04,0x09,0x74,0x09,
0x54,0x09,0x54,0x29,0x55,0x49,0x56,0x89,
0x54,0x7D,0x54,0x0B,0x54,0x0B,0x74,0x09,
0x04,0x08,0x04,0x08,0x00,0x08,0x00,0x00,/*"享",20*/
/* (16 X 16 , 宋體 ) */
0x80,0x00,0x62,0x80,0x26,0x80,0x2A,0x41,
0x32,0x43,0x22,0x25,0x26,0x29,0x3A,0x11,
0x2B,0x11,0x21,0x2D,0x31,0x23,0x2F,0x40,
0xA5,0xC0,0x60,0x40,0x20,0x00,0x00,0x00,/*"受",21*/
/* (16 X 16 , 宋體 ) */
0x10,0x42,0x92,0x42,0x54,0x2A,0x38,0x2E,
0xFF,0x13,0x38,0x1A,0x54,0x26,0x52,0x02,
0x80,0x40,0xF0,0x20,0x1F,0x13,0x12,0x0C,
0x10,0x33,0xF0,0x60,0x10,0x20,0x00,0x00,/*"數",22*/
/* (16 X 16 , 宋體 ) */
0x02,0x01,0x82,0x00,0xE2,0x7F,0x5E,0x10,
0x42,0x10,0xC2,0x3F,0x00,0x00,0x02,0x04,
0xFA,0x04,0x82,0x04,0x82,0x44,0x82,0x84,
0xFE,0x40,0x80,0x3F,0x00,0x00,0x00,0x00,/*"碼",23*/
/* (16 X 16 , 宋體 ) */
0x80,0x00,0x64,0x00,0x24,0x00,0x24,0x3F,
0x3F,0x01,0x24,0x01,0x24,0x01,0xFF,0xFF,
0x24,0x01,0x24,0x11,0x24,0x21,0x3F,0x1F,
0xA4,0x00,0x64,0x00,0x24,0x00,0x00,0x00,/*"帶",24*/
/* (16 X 16 , 宋體 ) */
0x20,0x22,0x30,0x23,0xAC,0x22,0x63,0x12,
0x10,0x12,0x40,0x00,0x20,0x00,0x50,0x7E,
0x4C,0x42,0x43,0x42,0x44,0x42,0x48,0x42,
0x30,0x7E,0x60,0x00,0x20,0x00,0x00,0x00,/*"給",25*/
/* (16 X 16 , 宋體 ) */
0x20,0x04,0x20,0x04,0x22,0x42,0x22,0x82,
0xFE,0x7F,0x21,0x01,0x21,0x01,0x20,0x10,
0x20,0x10,0xFF,0x08,0x20,0x07,0x22,0x1A,
0xAC,0x21,0x20,0x40,0x20,0xF0,0x00,0x00,/*"我",26*/
/* (16 X 16 , 宋體 ) */
0x80,0x00,0x40,0x00,0xF0,0x7F,0x1C,0x00,
0x03,0x00,0xF0,0x7F,0x01,0x00,0x0E,0x00,
0x04,0x00,0x00,0x00,0x04,0x00,0x04,0x20,
0x04,0x40,0xFC,0x3F,0x00,0x00,0x00,0x00,/*"們",27*/
/* (16 X 16 , 宋體 ) */
0x00,0x00,0xF8,0x7F,0x8C,0x10,0x8B,0x10,
0x88,0x10,0xF8,0x3F,0x40,0x00,0x30,0x00,
0x8F,0x00,0x08,0x03,0x08,0x26,0x08,0x40,
0x08,0x20,0xF8,0x1F,0x00,0x00,0x00,0x00,/*"的",28*/
/* (16 X 16 , 宋體 ) */
0x70,0x00,0x00,0x00,0xFF,0xFF,0x08,0x00,
0xB0,0x80,0x88,0x40,0x88,0x30,0x88,0x0E,
0xFF,0x01,0x88,0x06,0x88,0x08,0x88,0x30,
0xF8,0x60,0x80,0xC0,0x80,0x40,0x00,0x00,/*"快",29*/
/* (16 X 16 , 宋體 ) */
0x00,0x00,0x00,0x20,0x40,0x18,0xFC,0x0C,
0x44,0x07,0x44,0x12,0x44,0x20,0x46,0x40,
0xFA,0x3F,0x42,0x00,0x43,0x00,0x43,0x02,
0x42,0x0C,0x40,0x38,0x00,0x10,0x00,0x00,/*"樂",30*/
/* (16 X 16 , 宋體 ) */
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x5F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"!",31*/
/* (16 X 16 , 宋體 ) */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
x00,0x00, //最后留一空白字符.
};
uchar code tab[]=
{0x7f,0xff,0xbf,0xff,0xdf,0xff,0xef,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,
0xfe, 0xff,
0xff,
0x7f,0xff,0xbf,0xff,0xdf,0xff,0xef,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,0
xfe };
//16列掃描分時輸出,從右到左每次輸出1列
,低電平有效.
bit SHAN; //以下變量作為時鐘計數用,本程序單顯漢字,未用到.
uchar second,minute,hour;
void init(); //初始化函數.
#define HAN1 P1 //定義p1口為行0-行7數據口
#define HAN2 P3 //定義p3口為行8-行15數據口
#define LIE1 P2 //定義p2口為列1-行7數據口
#define LIE2 P0 //定義p0口為列8-列15數據口
void delay(uchar delay_time); //延時函數
//---------------------------------------------------------------------
void main()
{uchar i ,speed;
uint k ;
init(); //初始化STC12C5A60S2的P0-P3端口為強推輸出,每端
口輸出可輸出20MA電流,可直驅8X8LED點陣.
while(1)
{ for( k = 0 ; k <1056 ;k += 2 ) //以下的循
環體為流動顯示16X16字符.
{
for( speed = 0 ; speed <10 ; speed++) //改
變這行參數可以改速度.
{
for(i=0 ;i <16 ; i++)
{ LIE1=0xff; LIE2=0xff;
HAN1 = zimo1[2*i + k ] ;
HAN2 = zimo1[2*i+1+ k] ;
LIE2=tab[2*i];
LIE1=tab[2*i+1];
delay(20) ;
LIE1=0xff; LIE2=0xff;
}
}
}
};
}
//---------------------------------------------------------------------
void delay(uchar t) // 延時函數
{
uchar i; //定義變量
for(;t>0;t--) //如果t大于0,t減1(外層循環)
for(i=124;i>0;i--); //i等于124,如果i大于0,i減1
}
//---------------------------------------------------------------------
/***************************************
函 數 名:init
功 能:初始化函數
說 明:初始化定時器及中斷
入口參數:無
返 回 值:無
***************************************/
void init()
{
TMOD=1;TH0=0X3C;TL0=0XB0; //定時器0模式1,50毫秒
ET0=1;TR0=1;EA=1; //開定時器0中斷、啟動定時器0、開總中斷
P4SW=0xff; //定義P4口為I/O口
P0M1=0x00;
P0M0=0xff; //定義P0為強上拉輸出.
P1M1=0x00;
P1M0=0xff; //定義P1為強上拉輸出.
P2M1=0x00;
P2M0=0xff; //定義P2為強上拉輸出.
P3M1=0x00;
P3M0=0xff; //定義P3為強上拉輸出.
P4M1=0x00;
P4M0=0xff; //定義P4為強上拉輸出.
}
/**********************************************************************
******
函數功能:定時器中斷延時程序 這一段的作用計時用,程序中沒有用到,保留作為
計時時鐘或延時用.
入口參數:
出口參數:
***********************************************************************
*****/
void timer0(void) interrupt 1
{ uchar tim1,tim2; //定義臨時變量
TL0=TL0+0XB0;TH0=0X3C; //重裝定時器初值
tim1++; //每中斷一次tim1加1
if(tim1==10) //中斷10(0.5秒)
{
SHAN=!SHAN; //閃爍標志取反
tim1=0;tim2++; //tim1清零,tim2加1
if(tim2==2) //到了1秒
{
tim2=0;second++; //tim2清零,秒加1
if(second==60) //如果秒到60
{
second=0;minute++; //秒變0,分加1
if(minute==60) //如果分到60
{
minute=0;hour++; //分變0,時加1
if(hour==24) hour=0; //如果時到24,時變0
}
}
}
}
}
