一、项目介绍……………………………………… 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分别是放大器的输入端和输出端。单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。ATC52的时钟产生方式有两种:内部时钟电方式和外部时钟方式。由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。
内部时钟方式:利用其内部的振荡电路在XTAL1和XTAL2引线上外接定时元件,内部振荡电路产生自激振荡。最常用的是在 XTAL1和XTAL2之间接晶体振荡器与电路构成稳定的自激振荡器,如图2-1电路所示为单片机最常用的时钟振荡电路的接法,其中晶振可选用振荡频率为6MHz的石英晶体,电容器一般选择30PF左右。
XTAL1
XTAL2
图2-1使用片内振荡电路的时钟电路
2 单片机的复位电路
本设计中ATC52是采用上电自动复位和按键复位两种方式。最简单的复位电路如图2-2所示。上电瞬间,RC电路充电,RST引线端出现正脉冲,只要RST端保持10ms以上的高电平,就能使单片机有效地复位。其中R1和R2分别选择200Ω和1KΩ的电阻,电容器一般选择22μF。
Vcc
RST
Vcc
+
C
22uF
RESET
R1
200
R2
1K
图2-2 AT89C52的复位电路
3 AT89C52的最小应用系统
ATC52是片内有程序存储器的单片机,要构成最小应用系统时只要将单片机接上外部的晶体或时钟电路和复位电路即可,如图2-3所示。这样构成的最小系统简单可靠,其特点是没有外部扩展,有可供用户使用的大量的I∕O线。
XTAL1
XTAL2
RES
EA
ATC52
+5V
+5V
C1
C2
C3
R1
R2
图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显示器组成原理图
8×8点阵LED
r1
r2
r3
r4
r5
r6
r7
r8
c1
c2
c3
c4
c5
c6
c7
c8
图2-5 8×8点阵LED引脚的排列图
电路图如下所示:
四、程序
/*
必要操作:正确连接点阵到学习板
*/
#include 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 };//心形1 unsigned char bxin1[8]={ 0x0,0x0,0x0,0x6C,0x82,0x0,0x28,0x10 };//半心形1 unsigned char xin2[8]={ 0x0,0x36,0x49,0x22,0x14,0x8,0x0,0x0 };//心形2 unsigned char bxin2[8]={ 0x0,0x36,0x41,0x0,0x14,0x8,0x0,0x0 };//半心形2 unsigned char xin[8]={ 0x0,0x36,0x41,0x6E,0x96,0x4C,0x28,0x10 };//双心形2 unsigned char zimu0[8]={ 0x38,0x24,0x22,0x22,0x22,0x22,0x24,0x38 };//D unsigned char zimu1[8]={ 0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x3C };//I unsigned char zimu2[8]={ 0x1E,0x20,0x40,0x40,0x4E,0x42,0x22,0x1E };//G unsigned char zimu3[8]={ 0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x3C };//I unsigned char zimu4[8]={ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3E };//L unsigned char zimu5[8]={ 0x7E,0x40,0x40,0x7E,0x7E,0x40,0x40,0x7E };//E unsigned char zimu6[8]={ 0x0,0x42,0x62,0x52,0x4A,0x46,0x42,0x0 };//N unsigned char zimu7[8]={ 0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18 };//T unsigned 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 };//I unsigned 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 };//U unsigned char xie0[8]={ 0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x0 };//T unsigned char xie1[8]={ 0x0,0x24,0x24,0x24,0x3C,0x24,0x24,0x24 };//H unsigned char xie2[8]={ 0x0,0x8,0x14,0x3E,0x41,0x41,0x0,0x0 };//A unsigned char xie3[8]={ 0x0,0x0,0x22,0x26,0x2A,0x32,0x22,0x0 };//N unsigned char xie4[8]={ 0x22,0x24,0x28,0x30,0x28,0x24,0x22,0x0 };//K unsigned char xie5[8]={ 0x1C,0x22,0x20,0x10,0xC,0x2,0x22,0x1C };//S void 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]; ﻩﻩﻩif(mode1==2) ﻩ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 ﻩ ﻩ{ ﻩ if(mode2==0) ﻩ //模式0-3分别对应4种表情,根据模式选择表情所对应的显示码 ﻩ ﻩﻩP0=name0[i];ﻩ ﻩﻩﻩif(mode2==1) ﻩﻩ ﻩP0=name1[i]; ﻩ ﻩ ﻩ if(mode2==2) ﻩﻩﻩ P0=name2[i]; ﻩﻩ ﻩﻩ P1=~(1< ﻩﻩ 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];ﻩﻩ ﻩ if(mode3==2) ﻩﻩ ﻩ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];ﻩﻩ ﻩﻩ if(mode4==2) ﻩﻩﻩﻩP0=xie2[i]; ﻩ ﻩif(mode4==3) ﻩP0=xie3[i]; ﻩﻩ if(mode4==4) ﻩﻩP0=xie4[i]; ﻩ ﻩif(mode4==5) ﻩ ﻩ P0=xie5[i];ﻩ ﻩﻩﻩﻩP1=~(1<ﻩﻩ ﻩdelay();ﻩﻩ //延时 ﻩﻩ} ﻩmode4++; ﻩﻩﻩif(mode4>5) ﻩ mode4=0; ﻩ} ﻩ P0=0X00; ﻩ P1=0XFF; } }下载本文