项目名称:基于51单片机的LED点阵显示器目录一、项目介绍 (2)1.1 项目背景1.2 功能介绍二、电路结构 (3)三、实现模块 (5)四、运行程序 (7)一、项目介绍1.1项目背景当今世界,电子技术迅猛发展,点阵式显示器件作为现代信息显示的重要媒体,在金融证券、体育、机场、交通、商业、广告宣传、邮电电信、指挥调度、国防军事等许多领域中得到了广泛应用。
因此点阵式显示器件的研制、生产也的到了迅速的发展,并逐步形成产业,成为光电子行业的新兴产业领域。
目前,点阵式显示器件具体包括LED显示模块和LCD显示模块等。
现在发展的LCD比较先进,LCD的优点较为明显,他体积小,容易控制,功能强,价格适宜,能够适应显示器的发展方向,因而在通信、家电、大屏幕投影等领域得到了越来越广泛的应用;随着社会经济的迅猛发展,工业生产逐渐实现了自动化,其中,设备的工作状态和生产过程状态的显示与监控起到了非常重要的作用,对于那些需要显示的信息量不是很大,分辨率不是很高,又需要制造成本相对比较低的场合,使用大、小屏幕LED点阵显示器是比较经济适用的,他可以显示字符、数字、汉字和简单图形,可以根据需要使用不同字号、字型,显示亮度较高,并且对环境条件要求比较低。
LED显示又可以分为单色显示和双色显示,可以按照需要的大小、形状和颜色进行组合,并用单片机控制实现各种文字或图形的变化,达到宣传和提示的目的。
1.2功能介绍2本次设计的用单片机控制的显示电路使用比较简单,操作方便。
它主要是通过一个8×8点阵来显示图案,通过不同的按键来选择控制图案的种类及显示方式。
在通电以后,显示屏全亮,随后进入逐字显示状态。
按下复位键K1,系统自动复位,显示diligent,随后进入待命状态。
按键1、2、3、4分别控制不同的图案。
另外,我们可以通k5键来控制字符移动速度的快慢。
二、电路结构单片机最小系统设计2.2.1 各部分具体电路1 单片机的时钟电路AT89C52单片机内部的振荡电路是一个高增益反向放大器,引线XTAL1和XTAL2分别是放大器的输入端和输出端。
单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。
AT89C52的时钟产生方式有两种:内部时钟电方式和外部时钟方式。
由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。
内部时钟方式:利用其内部的振荡电路在XTAL1和XTAL2引线上外接定时元件,内部振荡电路产生自激振荡。
最常用的是在 XTAL1和XTAL2之间接晶体振荡器与电路构成稳定的自激振荡器,如图2-1电路所示为单片机最常用的时钟振荡电路的接法,其中晶振可选用振荡频率为6MHz的石英晶体,电容器一般选择30PF左右。
图2-1使用片内振荡电路的时钟电路2 单片机的复位电路本设计中AT89C52是采用上电自动复位和按键复位两种方式。
最简单的复位电路如图2-2所示。
上电瞬间,RC电路充电,RST引线端出现正脉冲,只要RST 端保持10ms以上的高电平,就能使单片机有效地复位。
其中R1和R2分别选择200Ω和1KΩ的电阻,电容器一般选择22μF。
图2-2 AT89C52的复位电路3 AT89C52的最小应用系统AT89C52是片内有程序存储器的单片机,要构成最小应用系统时只要将单片机接上外部的晶体或时钟电路和复位电路即可,如图2-3所示。
这样构成的最小系统简单可靠,其特点是没有外部扩展,有可供用户使用的大量的I∕O线。
图2-3 AT89C52单片机构成的最小系统2.3 按键及接口设计2.3.1 独立式按键接口设计本设计按键较少,采用独立式按键简单而方便。
独立式按键就是各键相互独立,每个按键各接一根输入线,一根输入线上的按键工作状态不会影响其它输入线上的工作状态。
因此,通过检测输入线的电平状态很容易判断哪个按键被按下了。
设计采用的是中断方式的独立式按键工作电路,按键直接与AT89C52的I/O 口线相接,通过读I/O口,判定各I/O口线的电平状态,即可识别出按下的键。
独立式按键电路中,一般采用上拉电阻,这是为了保证在按键断开时,各I/O口线有确定的高电平。
而AT89C52芯片内已有上拉电阻,则外部的上拉电阻可以省去。
三、实现模块1.单片机最小系统2.按键及接口3.显示及接口4.驱动电路5.电源电路8×8点阵LED显示器的组成原理及控制方式本次设计中采用8×8点阵LED显示器,简称LED点阵板或LED矩阵板。
它是以发光二极管为像素,按照行与列的顺序排列起来,用集成工艺制成的显示器件。
有单色和双色之分,这种显示器有共阳极接法和共阴极接法两种,设计中用到的是共阳极的显示器。
共阳极接法的原理图如图2-4所示,图中画出了8×8点阵的二极管。
每一行发光二极管的阳极接在一起,有一个引出端r,每一列发光二极管的阴极接在一起,有一个引出端c。
当给发光二极管阳极引出端r1加高电平,阴极引出端c1加低电平时,左上角的二极管被点亮因此,对于行和列的电平进行扫描控制时,可以达到显示不同汉字的目的。
图2-4 8×8点阵LED显示器组成原理图电路图如下所示:四、程序/*必要操作:正确连接点阵到学习板*/#include <AT89X52.H> //包含头文件unsigned char mode0,mode1,mode2,mode3,mode4; //显示模式sbit k1=P2^7;sbit k2=P2^6;sbit k3=P2^5;sbit k4=P2^4;sbit k5=P2^0;unsigned char xin1[8]={0x0,0x0,0x0,0x6C,0x92,0x44,0x28,0x10};//心形1unsigned char bxin1[8]={0x0,0x0,0x0,0x6C,0x82,0x0,0x28,0x10};//半心形1unsigned char xin2[8]={0x0,0x36,0x49,0x22,0x14,0x8,0x0,0x0};//心形2unsigned char bxin2[8]={0x0,0x36,0x41,0x0,0x14,0x8,0x0,0x0};//半心形2unsigned char xin[8]={0x0,0x36,0x41,0x6E,0x96,0x4C,0x28,0x10};//双心形2unsigned char zimu0[8]={0x38,0x24,0x22,0x22,0x22,0x22,0x24,0x38 };//Dunsigned char zimu1[8]={0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x3C };//Iunsigned char zimu2[8]={0x1E,0x20,0x40,0x40,0x4E,0x42,0x22,0x1E };//Gunsigned char zimu3[8]={0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x3C };//Iunsigned char zimu4[8]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3E };//Lunsigned char zimu5[8]={0x7E,0x40,0x40,0x7E,0x7E,0x40,0x40,0x7E};//Eunsigned char zimu6[8]={0x0,0x42,0x62,0x52,0x4A,0x46,0x42,0x0 };//Nunsigned char zimu7[8]={0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18 };//Tunsigned char name0[8]={0xE9,0x2A,0xEC,0x9F,0xE8,0x2C,0x6A,0x29 };//张unsigned char name1[8]={0x42,0x24,0x7E,0x0,0x3C,0x0,0xFF,0x0 };//兰unsigned char name2[8]={0x26,0x74,0x25,0xFE,0x56,0x55,0x56,0x94 };//郝unsigned char ai0[8]={0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x3C };//Iunsigned char ai1[8]={0x0,0x66,0xFF,0xFF,0x7E,0x3C,0x18,0x0 };//实心unsigned char ai2[8]={0x0,0x66,0x99,0x81,0x42,0x24,0x18,0x0 };//空心unsigned char ai3[8]={0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C };//Uunsigned char xie0[8]={0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x0};//Tunsigned char xie1[8]={0x0,0x24,0x24,0x24,0x3C,0x24,0x24,0x24 };//Hunsigned char xie2[8]={0x0,0x8,0x14,0x3E,0x41,0x41,0x0,0x0 };//Aunsigned char xie3[8]={0x0,0x0,0x22,0x26,0x2A,0x32,0x22,0x0};//Nunsigned char xie4[8]={0x22,0x24,0x28,0x30,0x28,0x24,0x22,0x0 };//Kunsigned char xie5[8]={0x1C,0x22,0x20,0x10,0xC,0x2,0x22,0x1C };//Svoid delay() //延时函数{unsigned int c;c=300;while(c--){}}void main(void) //主函数{unsigned int i,j,k,m;k1=1;k2=1;k3=1;k4=1;k5=1;m=10;mode0=0;for(k=0;k<8;k++){for(j=0;j<30;j++) //调节字母变化速度for(i=0;i<8;i++) //点阵8列动态扫描法显示,每次扫描一列并发送数据码{if(mode0==0) //模式0-3分别对应4种表情,根据模式选择表情所对应的显示码P0=zimu0[i];if(mode0==1)P0=zimu1[i];if(mode0==2)P0=zimu2[i];if(mode0==3)P0=zimu3[i];if(mode0==4)P0=zimu4[i];if(mode0==5)P0=zimu5[i];if(mode0==6)P0=zimu6[i];if(mode0==7)P0=zimu7[i];P1=~(1<<i); //扫描该列delay(); //延时}mode0++;if(mode0>7)mode0=0;}P0=0; //P0口各脚输出高电平,点阵不显示while(1){mode1=0;mode2=0;mode3=0;mode4=0;if(k5==0){//delay(5);if(k4==0) //消抖{m=m+30;if(m>100)m=10;}}while(!k5);//松手检测while(k1==0) //图形1{for(j=0;j<m;j++) //调节表情变化速度for(i=0;i<8;i++) //点阵8列动态扫描法显示,每次扫描一列并发送数据码{if(mode1==0) //模式0-3分别对应4种表情,根据模式选择表情所对应的显示码P0=bxin1[i];if(mode1==1)P0=xin1[i];P0=bxin2[i];if(mode1==3)P0=xin2[i];if(mode1==4)P0=xin[i];P1=~(1<<i); //扫描该列delay(); //延时}mode1++;if(mode1>4)mode1=0;}while(k2==0) //图形2{for(j=0;j<m;j++) //调节表情变化速度for(i=0;i<8;i++) //点阵8列动态扫描法显示,每次扫描一列并发送数据码{if(mode2==0) //模式0-3分别对应4种表情,根据模式选择表情所对应的显示码P0=name0[i];P0=name1[i];if(mode2==2)P0=name2[i];P1=~(1<<i); //扫描该列delay(); //延时}mode2++;if(mode2>2)mode2=0;}while(k3==0) //图形3{for(j=0;j<m;j++) //调节表情变化速度for(i=0;i<8;i++) //点阵8列动态扫描法显示,每次扫描一列并发送数据码{if(mode3==0) //模式0-3分别对应4种表情,根据模式选择表情所对应的显示码P0=ai0[i];if(mode3==1)P0=ai1[i];P0=ai2[i];if(mode3==3)P0=ai3[i];P1=~(1<<i); //扫描该列delay(); //延时}mode3++;if(mode3>3)mode3=0;}while(k4==0) //图形4{for(j=0;j<20;j++) //调节表情变化速度for(i=0;i<8;i++) //点阵8列动态扫描法显示,每次扫描一列并发送数据码{if(mode4==0) //模式0-3分别对应4种表情,根据模式选择表情所对应的显示码P0=xie0[i];if(mode4==1)P0=xie1[i];P0=xie2[i];if(mode4==3)P0=xie3[i];if(mode4==4)P0=xie4[i];if(mode4==5)P0=xie5[i];P1=~(1<<i); //扫描该列delay(); //延时}mode4++;if(mode4>5)mode4=0;}P0=0X00;P1=0XFF;}}。