大家好,欢迎来到IT知识分享网。
1. 基本介绍
LED点阵
LED点阵是由发光二极管排列组成的显示器件,通常应用较多的是88点阵,然后通过多个88点阵组成不同分辨率的LED点阵显示屏,如4个88组成的1616点阵
8*8点阵由64个LED组成,每个LED是放置在行线和列线的交叉点上,因此通过横纵坐标就可以实现对任何一个LED亮和灭。
74CH595芯片
74HC595芯片是串转并移位锁存器,即芯片通过一个IO口串行接收8bit的数据,然后将8bit数据转为并行输出的移位缓存器。
单片机可以只通过1个IO口串行的输出8bit数据,通过这个芯片转为并行的8bit数据,就可以控制led点阵中的8条阳极,此时在加一个相同的芯片控制阴极,就可以实现两个IO口控制8*8的led点阵,节省了IO口的数量。
- QA~QH:并行数据输出,即将串行输入的数据通过8个引脚并行输出出去
- SER:串行数据输入,芯片通过这个引脚逐位接收数据
- SCK:移位寄存器时钟输入,芯片在每个SCK上升沿时,通过SER读取1bit数据
- RCK:存储寄存器时钟输入,芯片在每个RCK上升沿时,将SER读取到的数据通过QA-QH并行端口输出
- Q‘H:串行数据输出,在芯片中存满8位数据后,再输入数据时,就会将原来存的8bit数据通过该引脚逐位挤出去
- ^G:输出有效
- ^SCLR:低电平复位引脚
2. 电路原理图
16*16LED点阵
74HC595模块
由原理图可知,74HC595的C和D是直接与LED点阵的阴极连接在一起的,因此只要将LED点阵的阳极(J28、J34)与74HC595的A和B输出(J27、J32)连接在一起即可。同时将J24与单片机上的引脚连接。
3. 软件编程
单独显示
sbit SER = p1^0; sbit SCK = p1^1; sbit RCK = p1^2; /*传入4个595模块的值*/ void SendLedData(u8 Neg9to16, u8 Neg1to8, u8 Pos9to16, u8 Pos1to8) {
int i = 0; SCK = 0; RCK = 0; /*第一个595芯片工作,数据为Negative 9-16引脚*/ for(i = 0; i < 8; i++) {
SER = Neg9to16 >> 7; //数据最高位 SCK = 0; SCK = 1; //制造上升沿读取数据 Neg9to16 = Neg9to16 << 1;//移到下一位 } for(i = 0; i < 8; i++) {
SER = Neg1to8>> 7; SCK = 0; SCK = 1; Neg1to8 = Neg1to8<< 1; } /*第三个595芯片工作,数据为Positive9-16引脚*/ for(i = 0; i < 8; i++) {
SER = Pos9to16>> 7; SCK = 0; SCK = 1; Pos9to16= Pos9to16<< 1; } for(i = 0; i < 8; i++) {
SER = Pos1to8>> 7; SCK = 0; SCK = 1; Pos1to8= Pos1to8<< 1; } RCK = 0; //制造上升沿,595芯片并行输出 RCK = 1; } void main() {
SendLedData(0x00, 0x00, 0x00, 0x01); //只亮第一行 SendLedData(0xff, 0xfe, 0xff, 0xff); //只亮第一列 }
字模显示
/*“姜”字横向取模*/ u8 colData[] = {
0x10,0x04,0x20,0x02,0xFE,0x3F,0x80,0x00,0xFC,0x1F,0x80,0x00,0xFF,0x7F,0x40,0x00, 0x20,0x00,0xFF,0x7F,0x10,0x04,0x08,0x04,0x38,0x02,0xC0,0x01,0x30,0x0E,0x0E,0x10, }; u8 rowData[32] = {
0x01,0x00, 0x02,0x00, 0x04,0x00, 0x08,0x00, 0x10,0x00, 0x20,0x00, 0x40,0x00, 0x80,0x00, 0x00,0x01, 0x00,0x02, 0x00,0x04, 0x00,0x08, 0x00,0x10, 0x00,0x20, 0x00,0x40, 0x00,0x80, }; sbit SER = P3^4; sbit RCK = P3^5; sbit SCK = P3^6; void sendLedData(u8 n1, u8 n0, u8 p1, u8 p0) {
int i; RCK = 0; SCK = 0; for(i = 0; i < 8; i++) {
SER = n1>>7; SCK = 0; SCK = 1; n1= n1 << 1; } for(i = 0; i < 8; i++) {
SER = n0>>7; SCK = 0; SCK = 1; n0= n0 << 1; } for(i = 0; i < 8; i++) {
SER = p1>>7; SCK = 0; SCK = 1; p1= p1 << 1; } for(i = 0; i < 8; i++) {
SER =p0>>7; SCK = 0; SCK = 1; p0= p0 << 1; } RCK = 0; RCK = 1; } void displayLedData(u8 row[], u8 col[]) {
int i; //按行显示,共显示16行 for(i = 0; i < 16; i++) {
sendLedData(~colData[2*i+1], ~colData[2*i], rowData[2*i+1], rowData[2*i]); } } void main(void) {
displayLedData(rowData, colData); }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/149068.html