历史上的今天
返回首页

历史上的今天

今天是:2025年03月13日(星期四)

正在发生

2020年03月13日 | 51单片机【五】LED点阵屏

2020-03-13 来源:eefocus

关于显示器的分辨率,像素,清晰度这些概念不再赘述


讲一下pitch这个比较陌生的概念:指的是两个像素点的圆心之间的距离,通常默认单位是毫米 例如:p10指的是间距10毫米的led点阵

LED的P00-P07是直接接在处理器上但是因为处理器针脚有限所以需要下面的74HC595(处理器使用3个引脚经过这个芯片产生8个并行的信号等效于使用了8个引脚)

J13如果跳线OE和GND HC595将无法工作也为没有电压 而跳线OE和VCC才可以工作


74HC595是一个移位寄存器74HC595是将串行信号转为并行信号 其中P34是处理器输入串行信号 P36是串行时钟 P35是工作时钟 然后经过这个芯片处理生成8个并行的信号 接在LED点阵的D0-D7上 


这里这个芯片还可以控制一排LED是通过将图中的J14跳线帽连接后 LED一端为高电压另一端为HC595输出的8个串行的高低电压将LED点亮


void Hc595SendByte(u8 dat)

{

u8 i = 0, j = 0;

 

SCK = 0; // 将SCK置为初始状态

RCK = 0; // 将RCK置为初始状态

 

for (i=0; i<8; i++)     //使用for循环将数字信号分8次发送出去也就是一个串行信号

{

SER = dat >> 7;

dat <<= 1;

 

SCK = 1;

j++;   // 延时代码,等同于nop指令

j++; // 延时代码,等同于nop指令

SCK = 0;

}

 

RCK = 1;

j++; // 延时代码,等同于nop指令

j++; // 延时代码,等同于nop指令

}

 

LED点阵显示图像原理与数码管动态显示类似


首先选择出每个要点亮的LED像素点 然后反复循环刷新即可


链接:https://pan.baidu.com/s/1-RGR0v9WUH7LWmOaUTpSbQ 

提取码:pmw2 


这是字模提取软件 也就是帮你选择那些LED管需要去点亮

注意的是:要管理员身份运行 

                  字模由光盘中:工具软件/88字模提取软件/LEDDOT V0.2.exe生成

                  注意取模软件菜单栏设置中,设置为:

                  字模显示方式:单行

                  字模提取方式:逐列

                  字模提取格式:C51格式


void main(void)

{

MatrixDisplay(gZhu);

}

void MatrixDisplay(u8 *zimo)

{

u8 i = 0;

 

while (1)

{

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

{

MATRIX_PORT = gLineCode[i];   // 位选

Hc595SendByte(zimo[i]); // 发送段选数据

Hc595SendByte(0x00);  // 消隐

}

}

}


 


void Hc595SendByte(u8 dat)

{

u8 i = 0, j = 0;

 

SCK = 0; // 将SCK置为初始状态

RCK = 0; // 将RCK置为初始状态

 

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

{

SER = dat & (0x01);

dat >>= 1;

 

SCK = 1;

j++;   // 延时代码,等同于nop指令

j++; // 延时代码,等同于nop指令

SCK = 0;

}

 

RCK = 1;

j++; // 延时代码,等同于nop指令

j++; // 延时代码,等同于nop指令

}

 

/*

// 由于取模软件只能选择横向纵向,但是不能选择纵向从上向下还是从下向上

// 实际测试取模软件的模式,适合先发LSB而不是MSB

void Hc595SendByte(u8 dat)

{

u8 i = 0, j = 0;

SCK = 0; // 将SCK置为初始状态

RCK = 0; // 将RCK置为初始状态

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

{

SER = dat >> 7;

dat <<= 1;

SCK = 1;

j++;   // 延时代码,等同于nop指令

j++; // 延时代码,等同于nop指令

SCK = 0;

}

这里和前面发送串行码的顺序不同 这个需要实际测试 因为这个顺序可能导致LED现实的字是反的


**********************************************************************

*                         头文件包含

**********************************************************************

*/

#include

#include

/*

**********************************************************************

*                         本地宏定义

**********************************************************************

*/

typedef unsigned char u8; // 重命名类型u8简化代码编写

typedef unsigned int u16;

 

#define MATRIX_PORT P0 // 点阵LED负极端口

 

/*

**********************************************************************

*                         本地全局变量

**********************************************************************

*/

sbit SCK = P3^6; // SCK上升沿移位

sbit RCK = P3^5; // RCK上升沿串行输出寄存器锁存

sbit SER = P3^4; // SER引脚送字节数据进去

 

// 点阵列选值,数组每个元素的值选中其中一列

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

 

/* 字模

 * 字模由光盘中:工具软件/88字模提取软件/LEDDOT V0.2.exe生成

 * 注意取模软件菜单栏设置中,设置为:

 * 字模显示方式:单行

 * 字模提取方式:逐列

 * 字模提取格式:C51格式

 */

 

u8 gZhu[] = {0x73,0xD6,0x58,0xFF,0x58,0x54,0x52,0x12}; // 汉字 朱

u8 gSi[]  = {0x0,0x4,0x1C,0x24,0x7E,0x4,0x0,0x0}; // 数字 4

u8 gK[]   = {0x0,0x0,0x7E,0x38,0x66,0x0,0x0,0x0}; // 字模 K

 

/*

**********************************************************************

*                         函数原型声明

**********************************************************************

*/

void Hc595SendByte(u8 dat);

void MatrixDisplay(u8 *zimo);

 

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

* 函 数 名       : main

* 函数功能 : 主函数

* 参数列表       : 无

* 函数输出    : 无

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

void main(void)

{

MatrixDisplay(gZhu);

}

 

 

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

* 函 数 名       : MatrixDisplay

* 函数功能 : 循环刷新显示字模到点阵上

* 参数列表       : zimo - 待显示的字模数组

* 函数输出    : 无

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

void MatrixDisplay(u8 *zimo)

{

u8 i = 0;

 

while (1)

{

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

{

MATRIX_PORT = gLineCode[i];   // 位选

Hc595SendByte(zimo[i]); // 发送段选数据

Hc595SendByte(0x00);  // 消隐

}

}

}

 

 

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

* 函 数 名       : Hc595SendByte

* 函数功能 : 通过74HC595串行移位发送一个字节出去

* 参数列表       : dat - 待发送的字节数据

* 函数输出    : 无

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

void Hc595SendByte(u8 dat)

{

u8 i = 0, j = 0;

 

SCK = 0; // 将SCK置为初始状态

RCK = 0; // 将RCK置为初始状态

 

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

{

SER = dat & (0x01);

dat >>= 1;

 

SCK = 1;

j++;   // 延时代码,等同于nop指令

j++; // 延时代码,等同于nop指令

SCK = 0;

}

 

RCK = 1;

j++; // 延时代码,等同于nop指令

j++; // 延时代码,等同于nop指令

}

 

/*

// 由于取模软件只能选择横向纵向,但是不能选择纵向从上向下还是从下向上

// 实际测试取模软件的模式,适合先发LSB而不是MSB

void Hc595SendByte(u8 dat)

{

u8 i = 0, j = 0;

SCK = 0; // 将SCK置为初始状态

RCK = 0; // 将RCK置为初始状态

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

{

SER = dat >> 7;

dat <<= 1;

SCK = 1;

j++;   // 延时代码,等同于nop指令

j++; // 延时代码,等同于nop指令

SCK = 0;

}

RCK = 1;

j++; // 延时代码,等同于nop指令

j++; // 延时代码,等同于nop指令

}

推荐阅读

史海拾趣

恒连电子(EVERCOM)公司的发展小趣事

在恒连电子的发展历程中,技术突破和产品创新始终是公司发展的核心动力。公司投入大量资金和资源进行技术研发,不断推出具有竞争力的新产品。其中,一款具有自主知识产权的智能芯片成为了公司的明星产品,不仅提升了产品的整体性能,还为公司带来了可观的利润。此外,恒连电子还注重产品的多元化发展,不断拓展产品线,满足市场的多样化需求。

灿科盟(Ckmtw)公司的发展小趣事

面对国内外市场变化及成本增长的压力,灿科盟在2012年决定在江西省九江市设立新的生产基地。这一基地主要负责产品的生产组装,有效降低了生产成本,提高了交货速度。同时,公司也加强了与当地供应商的合作,确保原材料的稳定供应。

FEI Microwave Inc公司的发展小趣事

随着5G技术的商用化,微波通信市场迎来了新的发展机遇。为了满足市场需求,FEI Microwave Inc公司迅速调整研发策略,加大投入力度,成功研发出了一系列针对5G应用的微波通信产品。这些产品以其高性能、高可靠性和高性价比迅速在市场上获得了认可,为FEI Microwave Inc公司赢得了更多的市场份额。

Chyao Shiunn Electronic Industrial Ltd公司的发展小趣事

随着市场竞争的加剧,Chyao Shiunn意识到品质管理的重要性。公司开始加强产品质量的控制,从原材料的采购到生产流程的每一个环节都严格把关。同时,公司还加大了品牌宣传力度,通过参加行业展会、举办技术研讨会等方式提升品牌知名度。这些举措不仅提高了公司的市场份额,也增强了客户对公司的信任。

FILTRONIC公司的发展小趣事

FILTRONIC公司成立于上世纪90年代初,正值通信技术快速发展的时期。公司初创时便聚焦于滤波器技术的研发与生产,针对当时市场对高性能滤波器的迫切需求,FILTRONIC的研发团队通过不断试验与优化,成功开发出了一款具有创新性的高性能滤波器产品。这款滤波器在频率选择性和插入损耗方面表现出色,迅速获得了市场的认可,为FILTRONIC在电子行业中站稳脚跟奠定了坚实的基础。

Brilliance公司的发展小趣事

在国内市场取得一定成功后,Brilliance公司开始将目光投向国际市场。公司制定了详细的国际化战略,积极寻求与国际知名企业的合作机会。通过与国外合作伙伴的共同努力,Brilliance的产品逐渐打入国际市场,并获得了良好的口碑。同时,公司还积极参加国际电子展会和交流活动,提升了品牌知名度和影响力。

问答坊 | AI 解惑

晶闸管调压控温的问题

用热电偶测温,经单片机pid调节,触发固态继电器实现线性升温 但当电网电压变化时,升温曲线不稳定,很不线性 原因到底出在哪里呢,高次谐波?继电器?pid参数?还是其它因素,希望大家各抒己见,十分希望能得到各位的帮助,谢谢!…

查看全部问答>

FPGA验证一个UART控制器,加载之后,不能全部发送数据,什么原因引起的?如何解决?

设计了一个UART控制器,Modelsim前仿真后仿真都正确,但是加载到板子上的FPGA之后,通过PC上的串口调试程序进行数据的发送和接受,串口调试程序发送过来的数据,FPGA都能全部正确接受,但是FPGA却不能把全部数据发送回PC上的串口调试程序,一共发送 ...…

查看全部问答>

急...三星6410 nboot 失敗.. 連debug prot 都無回應!

如題:三星6410 nboot 失敗.. 連debug prot 都無回應! 測量flash 信號都有動作 僅在第一次.. 而後 整個板子 都無回應了.. >< 現在真的不知要怎麼辦了.. 上頭要求在十二月份要出來送樣了!! 請求 有人幫忙嗎?…

查看全部问答>

WinCE 系统下WinCE 自导recorder.exe 文件录音功能无法实现

WinCE 系统下WinCE 自导recorder.exe 文件录音功能无法实现。 问题描述如下 WinCE系统能够启动,我在NK里面添加了一个MP3文件,(把mp3文件编译到内核)能播放,说明音频驱动加载成功,耳机的输出口硬件也没有问题,可是打开那个recorder文件的时 ...…

查看全部问答>

PPC2003用的操作系统是ce5还是6啊?

想安装ce5,谁能给个能下的地址?…

查看全部问答>

给PCF8563写数据,程序出错,麻烦大家给瞧瞧

#include <msp430x54x.h> #define SDA_1       P3OUT |=  BIT7             //SDA = 1#define SDA_0       ...…

查看全部问答>

求教 可用于测量播种的种子的精确位置的技术

      如题,本人菜鸟,专业不是测控或者传感器,今年考上了农业机械化的研究生,导师给我一个任务就是寻找可以测量种子的具体位置的技术或者装置。      我有过的一些想法:      1、类似蝙蝠或者海 ...…

查看全部问答>