×
单片机 > 单片机程序设计 > 详情

8x8LED点阵显示数字和汉字

发布时间:2024-05-24 发布时间:
|

8x8LED点阵原理



当 MR 为高电平,OE 为低电平时,数据在 SHCP 上升沿进入移位寄存器,在

STCP 上升沿输出到并行端口。

74595 的数据端:

QA–QH: 八位并行输出端,可以直接控制数码管的 8 个段。

QH’: 级联输出端。我将它接下一个 595 的 SI 端。

SI: 串行数据输入端。74595 的控制端说明:

/SCLR(10 脚): 低点平时将移位寄存器的数据清零。通常我将它接 Vcc。

SCK(11 脚):上升沿时数据寄存器的数据移位。 QA–>QB–>QC–>…–>QH;下

降沿移位寄存器数据不变。(脉冲宽度: 5V 时,大于几十纳秒就行了。)

RCK(12 脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄

存器数据不变。通常我将 RCK 置为低点平,当移位结束后,在 RCK 端产生一

个正脉冲( 5V 时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。


# include

#include


typedef unsigned int u16;

typedef unsigned char u8;


sbit SER=P3^4;

sbit CLK=P3^5;

sbit SRCLK=P3^6;


u8 code ledwidth[][8]={{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0

{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1

{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2

{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3

{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4

{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5

{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6

{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7

{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8

{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00}, //9

{0x00,0x00,0x7F,0x48,0x48,0x30,0x00,0x00}, //P

{0x00,0x00,0x7F,0x48,0x4C,0x73,0x00,0x00}, //R

{0x00,0x00,0x7F,0x49,0x49,0x49,0x00,0x00}, //E

{0x00,0x00,0x3E,0x41,0x41,0x62,0x00,0x00}, //C

{0x00,0x00,0x7F,0x08,0x08,0x7F,0x00,0x00}, //H

{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00}, //I

{0x00,0x7F,0x10,0x08,0x04,0x7F,0x00,0x00}, //N

{0x00,0x12,0x14,0x78,0x14,0x12,0x00,0x00}, //大

{0x00,0x08,0x12,0x01,0xFF,0x00,0x10,0x08}, //小

{0x7F,0x41,0x5D,0x55,0x5D,0x41,0x7F,0x00}, //回


{0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00}}; //中

u16 ledlength[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};



void delay_ms(u16 i)

{

while(i--);

}


void send(u8 n)

{

u8 i;

CLK=0;

SRCLK=0;

for(i=0;i<8;i++)

{

SER=n>>7;

n<<=1;

SRCLK=0;

SRCLK=1;


}

CLK=1;

}


int main()

{

u16 n,i,j=0;

while(1)

{

for(i=0;i<100;i++)

{

for(n=0;n<8;n++)

{


P0=ledlength[n];

send(ledwidth[j][n]);

delay_ms(50);

P0=0xff;

send(0x00);

}

}

j++;

j%=21;

}

return 0;

}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机的数码管动态扫描方法