LED动态显示方式+C代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LED动态显示方式
在多位LED显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个8位I/O口控制,形成段选线的多路复用。

而各位的共阳极或共阴极分别由相应的I/O口线控制,实现各位的分时选通。

其中段选线占用一个8位I/O口,而位选线占用一个4位I/O口。

由于各位的段选线并联,段选码的输出对各位来说都是相同的。

因此,同一时刻,如果各位位选线都处于选通状态的话,4位LED将显示相同的字符。

若要各位LED能够显示出与本位相应的显示字符,就必须采用扫描显示方式,即在同一时刻,只让某一位的位选线处于选通状态,而其它各位的位选线处于关闭状态,
同时,段选线上输出相应位要显示字符的字型码,这样同一时刻,4位LED中只有选通的那一位显示出字符,而其它三位则是熄灭的。

同样,在下一时刻,只让下一位的位选线处于选通状态,而其它各位的位选线处于关闭状态时,在段选线上输出相应位将要显示字符的字型码,则同一时刻,只有选通位显示出相应的字符,而其它各位则是熄灭的。

如此循环下去,就可以使各位显示出将要显示的字符,
虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于人眼有视觉暂留现象,
只要每位显示间隔足够短便可造成多位同时亮的假象,达到显示的目的。

LED不同位显示的时间间隔可以通过定时中断完成。

如对8位LED显示器,扫描显示频率为50Hz,
假若显示一位保持1ms时间.则显示完所有8位之后,只需8ms,于是另外12msCPU完全可以处理其它工作。

上述保持1ms的时间应根据实际情况而定。

不能太小,因为发光二极管从导通到发光有一定的延时,导通时间太小,发光太弱人眼无法看清。

但也不能大大,因为毕竞要受限于临界闪烁频率,而且此时间越长,占用CPU时间也越多。

另外,显示位增多,也将占用大量的CPU时间,因此动态显示实质是以牺牲CPU时间换取元件和能耗的减少。

#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar code ddata[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xc0,0xf9,0xa4
}; //0,1,2,3,4....F,0,1,2,3的段码
/****延时函数*******************************/
void delayms(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
main()
{
while(1)
{
uint i,j,k;
for(k=1;k<17;k++) //16个字符
{
for(j=0;j<50;j++)//反比于字符显示变化速度
{
for(i=1;i<5;i++) //4位
{
P0=ddata[k+i-2];
switch(i)
{
case 1:P2=0XFE;break; //点亮第1位
case 2:P2=0XFD;break; //点亮第2位
case 3:P2=0XFB;break; //点亮第3位
case 4:P2=0XF7;break; //点亮第4位
}
delayms(5);
P2=0XFF; // 熄灭
}
}
}
}
}。

相关文档
最新文档