单片机点阵制作心得_单片机制作心得

2020-02-27 其他心得体会 下载本文

单片机点阵制作心得由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机制作心得”。

点阵制作心得

本来上学期就准备做点阵的,由于其他事情的耽误,做到一半就没做了,最近终于把点阵搞定了,再次和大家分享一下制作点阵的心得,希望对想了解点阵和制作点阵的朋友有点帮助,不多说了,进入正题。

最后的效果首先来看看

感觉还行吧!介绍一下点阵的工作原理,一般的都是8*8点阵做在一块板子上,要做分辨率16*32的点阵就要8块点阵模块组合起来,点阵说白了就是很多个二级管焊在一起,分别焊在行线和列线的交叉点上。如下图所示:

实际的应用中,LED点阵分为共阴和共阳型,共阴型指的是行输入低电平,列输入高电平时点阵点亮,共阳型就刚好相反,图示的是共阳型结构,有行输入高电平点亮。

上图所示的点阵单元只是原理图,在实际加工生产中,点阵的行和列不是按照规则排列的,所以就需要自己测出点阵的行列编号,首先确定点阵是共阴还是共阳的,用一节干电池,将负极接到其中的一个脚上,用正极去捧碰其他的脚,确定其编号,不知道用万用表的二极管档能不能测,没试过,感兴趣的可以一试。下面是我测出的LG12088BH型点阵单元的引脚排列顺序,经供参考。

行(从上到下为)行1 行2 行3 行4 行5 行6 行7 行8 引脚号 9 14 8 12 1 7 2 5 列(从左到右为)列1 列2 列3 列4 列5 列6 列7 列8 引脚号 13 3 4 10 6 11 15 16 测出引脚编号之后,就是巨量的工作了,要飞线将相应的教连在一起,最后用排针引出行和列的规则编号引脚,下图是焊好后点阵显示屏,一共飞了132跳线,工作量很大,当时焊这个用了不少时间,背面有点乱,目前市场上好像有做好的16*32点阵屏,之就不用自己飞线了,不过想挑战焊接难度的童鞋们,可以自飞线做,做出来之后很有成就感的,哈。

现实的部分搞定了,接下来就是控制部分,控制部分的主芯片我选用的是STC12C5AS60这款51单片机,看重的就是其内存大有64k,学过单片机的都知到单片机的i/o口可以直接驱动一些负载,像led发光二极管之类的,那这样能不能直接用单片机来驱动点阵呢?开始时我就有些疑问,在网上看别人做的点阵都没有直接用单片机驱动的,要知道发光二极管的点亮电流在5-10mA,按最大电流算,点阵每一行都要亮起来就是10*32=320mA,远远超出了单片机的负载能力,所以要加一些驱动能力强的逻辑芯片。由于逻辑芯片的驱动能力有限,为了保护电路,在行线上加了pnp型的8550三极管,让大电流到地上。

其中R为限流电阻,三极管起到开关作用,由于逻辑电平的0并非是最对的0v,一般都是稍高于0v,故B端为低电平是三极管导通。

接下来就是行列驱动芯片的选取,网上很多高手们用的都是移位寄存器74HC595这款芯片,采用的是数据串口发送方式,这样占用的i/o资源非常少,接线也少。但对于595的操作方式不太习惯,以及减少编程的复杂度,就没有采用595这个芯片,而是采用行驱动用的是两片74HC245锁存器,操作简单,由于51单片机i/o资源不丰富,只有P0P1P2P3四组i/o口,列驱动要是也采用245,那么接口远远不够,所以就采用两片74HC145四到十六线译码器作为列驱动,这样列控制端仅占用一组i/o口,请看下面的原理图,图中只画出了接线图,单片机最小系统就没画,大家凑合着看吧。

图中可能大家注意了在154的两个使能端及cs1和cs2是接到单片机的引脚上,先留个悬念,后面解答。以上介绍了点阵的工作原理及引脚连接图,现在说说硬件制作方面要注意的地方吧

在飞线焊显示屏时,最好将行和列用不同颜色的线加以区分,万一焊错了,也好检查电路,制作过程要求有足够的细心和耐心,千万不要急于求成,每天花点时间做,这样可以保证自己不会因疲倦而导致频繁出错。尽量做到零错误,否则检查起来会很麻烦。单个的点阵之间最好不要留缝隙,要注意点阵单元的平整,为了显示的美观。最好控制和显示部分分别放在两块板子上,在点阵显示的时候就只看到点阵屏,更加美观,为追求简洁美观,我采用两块一样的板子叠在一起

一边用排针=引出接口,一块用排插引出接口,两块板子刚好可以插进去叠在一起,避免了使用杜邦线连接,这样简洁美观,正面是点阵屏,背面是控制部分,背面只留两个接口,一个5v电源插口,和一个下载接口。下面给大家展示一下最后成品。

说完了硬件部分,再说说软件部分,首先行发送高电平信号,通过控制列B01~B32来使得在任何时刻只有唯一的列导通以点亮该列,当列切换的速度足够快时,由于人眼的视觉暂留现象,看上去整个屏都是亮的,这就是动态扫描的基本原理。一个国标汉字是由16X16即256个点(像素)来构成的,显示一个汉字该亮哪些点这些复杂的工作都交给取模软件来完成(PCtoLCD2002这个取摸软件还可以),同时,取模软件也负责把要显示的汉字转化成程序中要用到的显示代码,代码以一定的规律表征了该亮的点(一般用“1”表示)与不该亮的点(一般用“0”表示),一共256位。单片机负责将这些代码一段一段有规律地送到LED屏,比如第一次输出表示第1列的16位代码点亮第1列、紧接着再输出16位代码去点亮第2列„„直到点亮第16列然后再重新点亮第1列„„,如此循环,就完成了这个汉字的显示。单片机输出的速度足够快时,由于视觉暂留现象使得人眼在同一时刻感受到了这16列输出的信息,也就是看到了这个汉字。由于AT89S52单片机是8位总线结构,一次不能输出16位代码以显示完整的一列,这样我们把一个字拆分为上下两部分,一次送8位,一共送32次,这样同样完成了一个汉字的显示。事实上这个汉字区域也可以是在256象素范围内的任何图形。

点阵有三种扫描方式,分别是列扫描,行扫描,和点扫面,顾名思义,列扫描就是一列一列的进行扫描,行扫描就是一行一行的扫描,点扫描就不用说了,由于我硬件电路的选取是列采用145译码器,故列扫描较容易实现,写程序时还是采用列扫描。

再结合硬件电路来理解本文的LED屏:显示代码是通过驱动电路送至LED屏的,列的切换则是通过译码器控制三极管VT1~VT32依次轮流导通来实现的,也就是列扫描。

由于译码器每次只能将输出口的一位置0,所以在显示完左半屏的字后,假如不关闭左半屏,而右半屏要接着显示后面的字,在滚动显示时,左半屏会出现乱码,所以要通过cs2置高电平,来关闭左半屏,同样在左半屏显示时要关闭右半屏,扫描的速度很快,加上人眼的视觉停留作用,看起来就是连续显示的。

下面附上我写的滚动显示汉字的程序程序,程序有一点小问题,希望对大家有所帮助。

/**************************************************************************************

16*32点阵滚滚动显示代码

行驱动采用两片74hc245锁存器,控制端接到P2,P0口;列驱动采用两片74hc154 4-16线译码器,控制端接到P1口;

***************************************************************************************/ #include #define uintint #define uchar char sbit cs1=P3^2;sbit cs2=P3^3;code unsigned char date[1200]=

0x48,0x14,0x48,0x64,0x48,0x04,0xC8,0x07,0x08,0x10,0x08,0xE0,0x00,0x00,0x00,0x00,/*“

0x00,0x00,0xFE,0xFF,0x02,0x08,0x22,0x10,0xDA,0x08,0x06,0x07,0x08,0x08,0xC8,0x08,0xB8,0x08,0x8F,0x08,0xE8,0xFF,0x88,0x08,0x88,0x08,0x88,0x08,0x08,0x08,0x00,0x00,/*”

阵点“,0*/ {0x00,0x80,0x00,0x40,0xC0,0x37,0x40,0x04,0x40,0x04,0x40,0x14,0x7F,0x64,0x48,0x04, ”,1*/

0x10,0x04,0x60,0x04,0x02,0x7E,0x8C,0x01,0x00,0x20,0x24,0x10,0x94,0x08,0xCC,0xFC,0xA5,0x42,0x96,0x24,0xC4,0x08,0x8C,0x15,0x14,0x22,0x24,0x40,0x00,0x40,0x00,0x00,/*“

0x40,0x10,0x44,0x3C,0xC4,0x13,0x44,0x10,0x44,0x14,0x44,0xB8,0x40,0x40,0x10,0x30,0x10,0x0E,0xFF,0x01,0x10,0x40,0x10,0x80,0x10,0x40,0xF0,0x3F,0x00,0x00,0x00,0x00,/*”

0x40,0x80,0x48,0x60,0x48,0x1F,0x48,0x20,0xFF,0x7F,0x48,0x44,0x48,0x44,0x00,0x40,0xC4,0x4F,0x44,0x50,0x44,0x50,0x44,0x50,0xFC,0x50,0x00,0x5C,0x00,0x40,0x00,0x00,/*“

0x00,0x21,0x08,0x21,0x08,0x11,0x28,0x11,0xC8,0x09,0x08,0x05,0x08,0x03,0xFF,0xFF,0x08,0x03,0x08,0x05,0x88,0x09,0x68,0x11,0x08,0x11,0x08,0x21,0x00,0x21,0x00,0x00,/*”

0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x40,0x02,0x80,0xE2,0x7F,0x22,0x00,0x12,0x00,0x0A,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“

0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*” 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“

*/

0*/

1*/ 0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01,0xF0,0x00,0x00,0x00,/*”P“,10x00,0x20,0x00,0x3C,0xC0,0x23,0x38,0x02,0xE0,0x02,0x00,0x27,0x00,0x38,0x00,0x20,/*”A“,10x08,0x20,0xF8,0x3F,0x08,0x21,0x00,0x01,0x00,0x01,0x08,0x21,0xF8,0x3F,0x08,0x20,/*”H“,9”,8*/

!“,7*/

了”,6*/

来“,5*/

起”,4*/

动“,3*/

滚”,2*/ 2*/ 0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01,0xF0,0x00,0x00,0x00,/*“P”,1

3*/ 0x08,0x00,0x38,0x00,0xC8,0x20,0x00,0x3F,0xC8,0x20,0x38,0x00,0x08,0x00,0x00,0x00,/*“Y”,1

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“ ”,14*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“ ”,15*/

0x80,0x40,0x40,0x40,0x30,0x42,0x1E,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0xFF,0x7F,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x40,0x00,0x40,0x00,0x00,/*“”,16*/

0x10,0x80,0x10,0x41,0xF0,0x22,0x1F,0x14,0x10,0x08,0x10,0x16,0xF0,0x61,0x00,0x00,0x00,0x00,0xF8,0x7F,0x08,0x20,0x08,0x20,0x08,0x20,0xF8,0x7F,0x00,0x00,0x00,0x00,/*“”,17*/

0x00,0x80,0x01,0x90,0x01,0x88,0xFD,0x45,0x55,0x4F,0x55,0x55,0x57,0x25,0x55,0x25,0x55,0x25,0x55,0x55,0x55,0x4D,0xFD,0x45,0x01,0x80,0x01,0x80,0x00,0x80,0x00,0x00,/*“”,18*/

0x04,0x04,0x04,0x02,0x04,0x01,0x84,0xFF,0x6F,0x00,0x04,0x10,0x04,0x08,0x04,0x04,0xE4,0x3F,0x04,0x41,0x8F,0x40,0x44,0x40,0x24,0x40,0x04,0x40,0x04,0x78,0x00,0x00,/*“”,19*/

0x00,0x00,0x10,0x40,0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x28,0x11,0x44,0x16,0x42,0x10,0x41,0x90,0x40,0x50,0x40,0x30,0x40,0x10,0x40,0x00,0x40,0x00,0x40,0x00,0x00,/*“”,20*/

0x20,0x22,0x30,0x67,0xAC,0x22,0x63,0x12,0x10,0x12,0x20,0x00,0xD0,0x1F,0x4C,0x12,0x4B,0x12,0x48,0x12,0xC8,0x5F,0x08,0x80,0x08,0x40,0xF8,0x3F,0x00,0x00,0x00,0x00,/*“”,21*/ 0x80,0x80,0x70,0x60,0x00,0x18,0xFF,0x07,0x10,0x08,0x08,0x10,0x20,0x40,0x22,0x42,生

绚 0x2C,0x42,0x20,0x42,0x20,0x42,0x28,0x42,0x26,0x42,0x20,0x42,0x20,0x40,0x00,0x00,/*“”,22*/

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,/*“”,23*/

0x02,0x02,0x02,0x81,0xC2,0x40,0x3E,0x21,0x22,0x1A,0x22,0x06,0xE2,0x01,0x02,0x00,0xFE,0x3F,0x02,0x41,0x82,0x40,0x42,0x40,0x22,0x40,0x12,0x78,0x00,0x00,0x00,0x00,/*“”,24*/

0x10,0x80,0x10,0x41,0xF0,0x22,0x1F,0x14,0x10,0x08,0x10,0x16,0xF0,0x61,0x00,0x00,0x00,0x00,0xF8,0x7F,0x08,0x20,0x08,0x20,0x08,0x20,0xF8,0x7F,0x00,0x00,0x00,0x00,/*“”,25*/

0x24,0x08,0x24,0x06,0xA4,0x01,0xFE,0xFF,0x23,0x01,0x22,0x86,0x80,0x40,0x70,0x30,0x00,0x0E,0xFF,0x01,0x00,0x06,0x80,0x18,0x40,0x20,0x30,0x40,0x00,0x80,0x00,0x00,/*“”,26*/

0x00,0x00,0xFC,0x0F,0x04,0x04,0x04,0x04,0xFC,0x0F,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0xFF,0xFF,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,/*“”,27*/

0x00,0x00,0x10,0x40,0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x28,0x11,0x44,0x16,0x42,0x10,0x41,0x90,0x40,0x50,0x40,0x30,0x40,0x10,0x40,0x00,0x40,0x00,0x40,0x00,0x00,/*“”,28*/

0x44,0x00,0x54,0xFF,0x54,0x15,0x7F,0x55,0x54,0x95,0x54,0x7F,0x44,0x00,0x20,0x09,0x28,0x49,0x27,0x89,0xE4,0x7F,0x34,0x09,0x2C,0x09,0xE0,0x1F,0x00,0x01,0x00,0x00,/*“”,29*/

0x00,0x81,0x04,0x89,0x24,0x89,0x24,0x49,0x25,0x49,0x26,0x29,0x24,0x19,0xFC,0x0F,0x24,0x19,0x26,0x29,0x25,0x49,0x24,0x49,0x24,0x89,0x04,0x89,0x00,0x81,0x00,0x00,/*“”,30*/ 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0x88,0x44,0x8C,0x44,0x8A,0x44,0x89,0x44,烂,死

美 0x88,0x44,0x88,0x44,0x88,0x44,0xF8,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*“

0x40,0x10,0x44,0x3C,0xC4,0x13,0x44,0x10,0x44,0x14,0x44,0xB8,0x40,0x40,0x10,0x30,0x10,0x0E,0xFF,0x01,0x10,0x40,0x10,0x80,0x10,0x40,0xF0,0x3F,0x00,0x00,0x00,0x00,/*”

0x00,0x01,0x80,0x00,0x60,0x00,0xF8,0xFF,0x07,0x00,0x00,0x04,0x00,0x02,0x00,0x01,0xFF,0x3F,0x40,0x40,0x20,0x40,0x10,0x40,0x08,0x40,0x04,0x40,0x00,0x78,0x00,0x00,/*“

0x00,0x00,0x00,0x08,0x00,0x04,0x00,0x42,0x7F,0x23,0xC9,0x12,0x49,0x8E,0x49,0x42,0x49,0x32,0x49,0x0E,0x49,0x42,0x7F,0x82,0x00,0x42,0x00,0x3E,0x00,0x00,0x00,0x00,/*”

0x00,0x60,0xFE,0x1F,0x22,0x22,0xFE,0xBF,0x00,0x40,0xFE,0x3F,0x22,0x82,0xFE,0xFF,0x00,0x00,0xFC,0x13,0x16,0x12,0x25,0x12,0x84,0x52,0xFC,0x82,0x00,0x7E,0x00,0x00,/*“

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

ucharcodescan[32]={0xff,0xee,0xdd,0xcc,0xbb,0xaa,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,/* void delay(z){ uintx,y;

0xff,0xee,0xdd,0xcc,0xbb,0xaa,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00};};

//消除所有字显示完之后出现乱码

鹏”,4*/

易“,3*/

化”,2*/

动“,1*/

自”,0*/

} for(x=z;x>=0;x--)for(y=110;y>=0;y--);void danxian(){ uinti,j,s=0,a,e;

}

//滚动显示函数 for(i=0;i

{

} for(j=0;j

for(a=0;a

{

}

delay(6);P2=date[i+a];a++;

P0=date[i+a];a++;

P1=scan[s++];

if(s==16){cs2=1;cs1=0;} if(s==32){cs2=0;cs1=1;s=0;}

// for(e=0;e

// if(a==32)a=0;} i=i+32;*/ void liudong()

for(i=0;i

{

for(j=0;j

for(a=0;a

{

for(b=0;b

//发送汉字上半部分编码

//显示两个汉字,么个汉字占用32个字节

//汉字显示的时间

//有效汉字编码1120个 { uinti,j,s=0,a,e,b;

}

}

P0=date[i+a];a++;

P1=scan[s++];

//发送汉字下半部分编码,//字上下部分编码相邻 //从左到右进行列扫描

//左半屏字显示完后,关 闭左半屏,选中右半屏

if(s==16){cs2=1;cs1=0;}

} {

}

if(s==32){cs2=0;cs1=1;s=0;} //右半屏字显示完后,关、闭右半屏,选中左半屏

//定位到扫描编码的首地址

} e++;

//中间变量自加运算

//显示完两个汉字后,将汉字上半部分编码起始地址后移

一位,等效看做将每个汉字向前移动一位

if(e==559)e=0;//i指向所有有效编码组后一位上半部分编码,中间变量置零

i =2*e;

void main()cs2=0;cs1=1;TMOD=0x01;

//设置定时器工作方式

TH0=(65536-3000)/256;//赋初值,即定时器定时的时间 TL0=(65536-3000)%256;TR0=1;ET0=1;EA=1;while(1)

{ // danxian();}

//开总中断

void t0(void)interrupt 1 using 0 {

P0=0x00;P2=0x00;TH0=(65536-3000)/256;TL0=(65536-3000)%256;liudong();

//定时器0中断函数

51单片机教程__led点阵

led点阵的正确打开方法__51单片机作者:Moby 2014/08/11 这是典型的led点阵屏幕的硬件原理图: 假设我要显示这个图案:我们来测试一下就显示第一行的效果: ↓这里是实际的显示......

单片机16点阵汉字显示课程设计

一、前言 1.1设计制作产品的背景、目的及设计要求本项目为16x16点阵汉字显示“新年快乐”的设计,首先将本次实训的电路图在仿真软件上绘制完成,将点阵文件存入ROM,形成汉字编码......

基于单片机的Led点阵lunwen(推荐)

基于单片机的Led点阵广告牌设计【摘要】本设计使用AT89C51系列高速单片机作为主控制模块,利用简单的外围电路来驱动64×16的点阵LED显示屏。利用AT89C51系列高速单片机本身强......

基于单片机的LED点阵广告牌设计

基于单片机的LED点阵广告牌设计摘要:单片机作为LED主控制模块,利用简单的外围电路来驱动64×16的点阵LED显示屏。利用多个系列高速单片机本身强大的功能,可以很方便的实现单片......

单片机实习报告 LED点阵汉字显示

广东纺织职业技术学院广东纺织职业技术学院 单片机与接口技术实习报告题目 16*16 LED点阵汉字显示院 (系)机电工程系专业学生姓名指导教师 起始日期: 2009年12月16日广东纺织职......

《单片机点阵制作心得.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
单片机点阵制作心得
点击下载文档
相关专题 单片机制作心得 心得 点阵 单片机 单片机制作心得 心得 点阵 单片机
[其他心得体会]相关推荐
[其他心得体会]热门文章
下载全文