ui设计方向网站建设目标,上海专业做网站的公司有哪些,制作相册的软件,广州营销优化STC89C52R基于C51嵌入式点阵广告屏的设计 1 概述2 LED点阵介绍2.1 特点和优势2.2 工作原理#xff1a;2.3 使用方法#xff1a; 3 LED点阵原理3.1 Led点阵内部电路3.2 原理图电路3.3 74HC595 4 软件实现点阵图案的滑动4.1 软件工程代码4.2 Protues仿真 5 总结 配套示例程序 1… STC89C52R基于C51嵌入式点阵广告屏的设计 1 概述2 LED点阵介绍2.1 特点和优势2.2 工作原理2.3 使用方法 3 LED点阵原理3.1 Led点阵内部电路3.2 原理图电路3.3 74HC595 4 软件实现点阵图案的滑动4.1 软件工程代码4.2 Protues仿真 5 总结 配套示例程序 1 概述
LED点阵广告牌是利用LED点阵技术制作的大型显示屏通常用于户外广告、商业宣传、活动展示等场合。
2 LED点阵介绍
8x8 LED点阵是一种常见的LED显示器件通常由64个LED灯组成排列成一个8行8列的矩阵。每个LED灯可以独立控制因此可以通过控制不同的灯来显示各种图案、数字和字母。
2.1 特点和优势
灵活性每个LED灯都可以独立控制使得点阵显示器具有很高的灵活性可以显示各种自定义图案和动画效果。 低功耗LED点阵采用LED作为发光元件功耗低适合长时间工作。 易于控制通过微控制器或驱动芯片可以方便地控制整个点阵的显示内容。 广泛应用LED点阵广泛应用于计时器、温度计、电子钟、信息显示牌、小型游戏等领域。
2.2 工作原理
每列LED的阳极连接在一起形成一组每行LED的阴极连接在一起形成一组。 控制时逐行输出低电平同时将要点亮的列输出高电平。循环扫描这些行和列就能实现LED的点亮和熄灭。
2.3 使用方法
通过微控制器比如51单片机、Arduino等来控制LED点阵的显示内容。 编写控制程序根据需要显示的图案、字母或数字设置每个LED的状态实现所需的显示效果。
3 LED点阵原理
3.1 Led点阵内部电路
8x8LED点阵内部结构图如下这两种图片只是接法不同要点亮LED左图需要行置为高电平列置为低电平右图则需要行置为低电平列置为高电平。
8x8LED点阵内部结构图
8x8点阵共由64个发光二极管组成且每个发光二极管是放置在行线和列线的交叉点上当对应的某一行置高电平某一列置低电平则相应的二极管将点亮。
比如对于左图如果要将第一个点点亮则将第一行的⑨脚接高电平第一列的13脚接低电平第一个点就会点亮如果要将第一行点亮则第一行的⑨脚接高电平所有列(13、3、4、10、6、11、15、16脚)接低电平第一行就会点亮如果要将第一列点亮则第一列的13脚接低电平所有行(9、14、8、12、1、7、2、5脚)接高电平第一列就会点亮如果要将对角线点亮可以动态显示首先点亮第一个点然后点亮第2行第2列的点…这样依次循环点亮就可以显示对角线的点。 如果要显示数字或字符在需要的位置点亮比如显示0(如下)可以循环点亮如下位置的LED。
3.2 原理图电路
仿真电路 我们调整点阵的位置使其横着摆放。 3.3 74HC595
74HC595 概述 74HC595 是一款常用的 8 位串行输入并行输出移位寄存器。它可以将串行输入的数据转换为并行输出广泛应用于 LED 显示、数码管驱动等场合。74HC595 具有 8 个并行输出接口可以通过串行方式控制多个 74HC595 级联使用。74HC595 引脚配置 74HC595 总共有 16 个引脚每个引脚的功能如下 Q0 ~ Q7引脚 15, 1-7并行输出位。 DS引脚 14数据输入串行输入。 OE引脚 13输出使能低电平有效。 STCP引脚 12存储寄存器时钟输入上升沿触发。 SHCP引脚 11移位寄存器时钟输入上升沿触发。 MR引脚 10主复位低电平复位。 Q7’引脚 9串行输出。 Vcc引脚 16电源正极。 GND引脚 8电源负极。74HC595 工作原理 74HC595 包含两个寄存器移位寄存器和存储寄存器。数据首先被写入移位寄存器然后通过锁存操作将移位寄存器的内容传输到存储寄存器以实现并行输出。 数据输入 数据通过 DS 引脚串行输入每当 SHCP 引脚收到一个上升沿时移位寄存器中的数据会左移一位新数据位被移入 Q0。通过连续的时钟脉冲可以依次将 8 位数据写入移位寄存器。 数据锁存 完成数据输入后通过在 STCP 引脚上产生一个上升沿脉冲将移位寄存器的数据传输到存储寄存器从而更新并行输出的状态。 输出使能 OE 引脚用于控制并行输出的使能状态。当 OE 为低电平时并行输出有效当 OE 为高电平时并行输出被禁用。 通讯时序图 一个驱动74HC595的标准函数
sbit DS P1^0; // Data Input
sbit SHCP P1^1; // Shift Clock
sbit STCP P1^2; // Store Clock
void HC595SendByte(unsigned char dat)
{
unsigned char i;
for(i 0; i 8; i)
{
DS dat 0x80; // 从高位到低位发送数据
SHCP 0;
dat dat 1;
SHCP 1;
}
STCP 0;
STCP 1;
}4 软件实现点阵图案的滑动
4.1 软件工程代码
//main.c文件
#include includes.h/******************************************************************/
/* 微秒延时函数 //10us */
/******************************************************************/
void delay_us(unsigned int us)//delay us
{while(us--){}
}/******************************************************************/
/* 微秒延时函数 */
/******************************************************************/
void delay_ms(unsigned int Ms)//delay us
{while(Ms--){delay_us(100);}
}sbit DS P2^6; // Data Input
sbit SHCP P2^7; // Shift Clock
sbit STCP P2^5; // Store Clockvoid HC595SendByte(unsigned char dat) {unsigned char i;for(i 0; i 8; i) {DS dat 0x80; // 从高位到低位发送数据SHCP 0;dat dat 1;SHCP 1;}STCP 0;STCP 1;
}// P2 0xFF; //代表列 发光二级管的负端
// P0 0x00; //代表行 发光二级管的正端
//
#define rowp P0
#define colp P2
//0-9字模
code unsigned char disp[][8]{
{0x0c,0x12,0x22,0x44,0x22,0x12,0x0c,0x00},//?
{0x00,0x00,0x3e,0x41,0x41,0x3e,0x00,0x00},//0
{0x00,0x40,0x44,0x7e,0x7f,0x40,0x40,0x00},//1
{0x00,0x00,0x66,0x51,0x49,0x46,0x00,0x00},//2
{0x00,0x00,0x22,0x41,0x49,0x36,0x00,0x00},//3
{0x00,0x10,0x1c,0x13,0x7c,0x7c,0x10,0x00},//4
{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00},//5
{0x00,0x00,0x3e,0x49,0x49,0x32,0x00,0x00},//6
{0x00,0x03,0x01,0x71,0x79,0x07,0x03,0x00},//7
{0x00,0x00,0x36,0x49,0x49,0x36,0x00,0x00},//8
{0x00,0x00,0x26,0x49,0x49,0x3e,0x00,0x00},//9
};// 定义字符模式数组
code unsigned char charPatterns[8] {0x0c,0x12,0x22,0x44,0x22,0x12,0x0c,0x00//0x18, 0x24, 0x42, 0x81, 0x42, 0x24, 0x18, 0x00
};/*------------------------------------------------主函数
------------------------------------------------*/
void main (void)
{unsigned char i, j,m,n;unsigned char displayData[88] {0}; // 初始化显示数据for (i 0; i 88; i) //行的数组更新{displayData[i] disp[i/8][i%8];}delay_ms(2);P20 0;P21 0;P22 0;P23 0;while (1){// 滚动效果for (j 0; j 88; j) {for (i 0; i 88; i) //行的数组更新{n i1;if(n88){n - 88;}displayData[i] displayData[n];}// 逐行扫描点阵屏for(m0;m20;m){for (i 0; i 32; i){P2 0xF0;P2 | ~(1(i/8));HC595SendByte(~(1 (i%8)));P0 displayData[i]; // 发送数据}}for (i 0; i 32; i){P2 0xF0;P2 | ~(1(i/8));HC595SendByte(~(1 (i%8)));P0 0x00; // 发送数据}}}
}/*// 滚动效果for (j 0; j 8; j) {for (i 0; i 8; i) {displayData[i] (displayData[i] 1) | (charPatterns[i] (7 - j));}// 逐行扫描点阵屏for(m0;m20;m){for (i 0; i 8; i){//P2 ~(1 i); // 控制点阵屏的行HC595SendByte(~(1 i));P0 displayData[i]; // 发送数据delay_ms(1); // 延时//P0 0x00; // 清空数据}//delay_ms(500); // 控制滚动速度}for (i 0; i 8; i){//P2 ~(1 i); // 控制点阵屏的行HC595SendByte(~(1 i));P0 0x00; // 发送数据delay_ms(1); // 延时//P0 0x00; // 清空数据}}}
*///includes.h文件
#ifndef __INCLUDES_H__
#define __INCLUDES_H__//#includereg52.h #includeintrins.h //汇编指令_nop_
#includestdio.h //标准输入输出//_nop_(); 产生一条NOP指令
//作用对于延时很短的要求在us级的采用“_nop_”函数这个函数相当汇编NOP指令延时几微秒。
//NOP指令为单周期指令可由晶振频率算出延时时间。//8051 为每个机器周期 12 时钟
//对于12M晶振延时1uS。
//11.0592M晶振延时1.0851uS。//对于延时比较长的要求在大于10us采用C51中的循环语句来实现。//包含头文件一般情况不需要改动头文件包含特殊功能寄存器的定义
#include STC89C5xRC_RDP.h//应用层头文件
//#include c51_gpio.h
//#include c51_ledtube.h
//#include c51_key.h
//#include c51_timer.h
//#include c51_exit.h
//#include c51_lcd1602.h
//#include c51_iic.h
//#include c51_tx1838.h
//#include c51_uart.h
//#include c51_28byj48.h
//#include c51_ds1302.hextern void delay_us(unsigned int us);//delay us;
extern void delay_ms(unsigned int Ms);//delay Ms;#endif$NOMOD51
;------------------------------------------------------------------------------
; This file is part of the C51 Compiler package
; Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
;------------------------------------------------------------------------------
; STARTUP.A51: This code is executed after processor reset.
;
; To translate this file use A51 with the following invocation:
;
; A51 STARTUP.A51
;
; To link the modified STARTUP.OBJ file to your application use the following
; BL51 invocation:
;
; BL51 your object file list, STARTUP.OBJ controls
;
;------------------------------------------------------------------------------
;
; User-defined Power-On Initialization of Memory
;
; With the following EQU statements the initialization of memory
; at processor reset can be defined:
;
; ; the absolute start-address of IDATA memory is always 0
IDATALEN EQU 80H ; the length of IDATA memory in bytes.
;
XDATASTART EQU 0H ; the absolute start-address of XDATA memory
XDATALEN EQU 0H ; the length of XDATA memory in bytes.
;
PDATASTART EQU 0H ; the absolute start-address of PDATA memory
PDATALEN EQU 0H ; the length of PDATA memory in bytes.
;
; Notes: The IDATA space overlaps physically the DATA and BIT areas of the
; 8051 CPU. At minimum the memory space occupied from the C51
; run-time routines must be set to zero.
;------------------------------------------------------------------------------
;
; Reentrant Stack Initilization
;
; The following EQU statements define the stack pointer for reentrant
; functions and initialized it:
;
; Stack Space for reentrant functions in the SMALL model.
IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
IBPSTACKTOP EQU 0FFH1 ; set top of stack to highest location1.
;
; Stack Space for reentrant functions in the LARGE model.
XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
XBPSTACKTOP EQU 0FFFFH1; set top of stack to highest location1.
;
; Stack Space for reentrant functions in the COMPACT model.
PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
PBPSTACKTOP EQU 0FFFFH1; set top of stack to highest location1.
;
;------------------------------------------------------------------------------
;
; Page Definition for Using the Compact Model with 64 KByte xdata RAM
;
; The following EQU statements define the xdata page used for pdata
; variables. The EQU PPAGE must conform with the PPAGE control used
; in the linker invocation.
;
PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
;
PPAGE EQU 0 ; define PPAGE number.
;
PPAGE_SFR DATA 0A0H ; SFR that supplies uppermost address byte
; (most 8051 variants use P2 as uppermost address byte)
;
;------------------------------------------------------------------------------; Standard SFR Symbols
ACC DATA 0E0H
B DATA 0F0H
SP DATA 81H
DPL DATA 82H
DPH DATA 83HNAME ?C_STARTUP?C_C51STARTUP SEGMENT CODE
?STACK SEGMENT IDATARSEG ?STACKDS 1EXTRN CODE (?C_START)PUBLIC ?C_STARTUPCSEG AT 0
?C_STARTUP: LJMP STARTUP1RSEG ?C_C51STARTUPSTARTUP1:IF IDATALEN 0MOV R0,#IDATALEN - 1CLR A
IDATALOOP: MOV R0,ADJNZ R0,IDATALOOP
ENDIFIF XDATALEN 0MOV DPTR,#XDATASTARTMOV R7,#LOW (XDATALEN)IF (LOW (XDATALEN)) 0MOV R6,#(HIGH (XDATALEN)) 1ELSEMOV R6,#HIGH (XDATALEN)ENDIFCLR A
XDATALOOP: MOVX DPTR,AINC DPTRDJNZ R7,XDATALOOPDJNZ R6,XDATALOOP
ENDIFIF PPAGEENABLE 0MOV PPAGE_SFR,#PPAGE
ENDIFIF PDATALEN 0MOV R0,#LOW (PDATASTART)MOV R7,#LOW (PDATALEN)CLR A
PDATALOOP: MOVX R0,AINC R0DJNZ R7,PDATALOOP
ENDIFIF IBPSTACK 0
EXTRN DATA (?C_IBP)MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIFIF XBPSTACK 0
EXTRN DATA (?C_XBP)MOV ?C_XBP,#HIGH XBPSTACKTOPMOV ?C_XBP1,#LOW XBPSTACKTOP
ENDIFIF PBPSTACK 0
EXTRN DATA (?C_PBP)MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIFMOV SP,#?STACK-1
; This code is required if you use L51_BANK.A51 with Banking Mode 4
; EXTRN CODE (?B_SWITCH0)
; CALL ?B_SWITCH0 ; init bank mechanism to code bank 0LJMP ?C_STARTEND#ifndef STC89C5xRC_RDP_H
#define __STC89C5xRC_RDP_H__///包含本头文件后,不用另外再包含REG51.Hsfr P0 0x80;sbit P00 P0^0;sbit P01 P0^1;sbit P02 P0^2;sbit P03 P0^3;sbit P04 P0^4;sbit P05 P0^5;sbit P06 P0^6;sbit P07 P0^7;sfr SP 0x81;
sfr DPL 0x82;
sfr DPH 0x83;
sfr PCON 0x87;sfr TCON 0x88;sbit TF1 TCON^7;sbit TR1 TCON^6;sbit TF0 TCON^5;sbit TR0 TCON^4;sbit IE1 TCON^3;sbit IT1 TCON^2;sbit IE0 TCON^1;sbit IT0 TCON^0;sfr TMOD 0x89;
sfr TL0 0x8A;
sfr TL1 0x8B;
sfr TH0 0x8C;
sfr TH1 0x8D;
sfr AUXR 0x8E;sfr P1 0x90;sbit P10 P1^0;sbit P11 P1^1;sbit P12 P1^2;sbit P13 P1^3;sbit P14 P1^4;sbit P15 P1^5;sbit P16 P1^6;sbit P17 P1^7;sbit T2EX P1^1;sbit T2 P1^0;sfr SCON 0x98;sbit SM0 SCON^7;sbit SM1 SCON^6;sbit SM2 SCON^5;sbit REN SCON^4;sbit TB8 SCON^3;sbit RB8 SCON^2;sbit TI SCON^1;sbit RI SCON^0;sfr SBUF 0x99;sfr P2 0xA0;sbit P20 P2^0;sbit P21 P2^1;sbit P22 P2^2;sbit P23 P2^3;sbit P24 P2^4;sbit P25 P2^5;sbit P26 P2^6;sbit P27 P2^7;sfr AUXR1 0xA2;sfr IE 0xA8;sbit EA IE^7;sbit EC IE^6;sbit ET2 IE^5;sbit ES IE^4;sbit ET1 IE^3;sbit EX1 IE^2;sbit ET0 IE^1;sbit EX0 IE^0;sfr SADDR 0xA9;sfr P3 0xB0;sbit P30 P3^0;sbit P31 P3^1;sbit P32 P3^2;sbit P33 P3^3;sbit P34 P3^4;sbit P35 P3^5;sbit P36 P3^6;sbit P37 P3^7;sbit RD P3^7;sbit WR P3^6;sbit T1 P3^5;sbit T0 P3^4;sbit INT1 P3^3;sbit INT0 P3^2;sbit TXD P3^1;sbit RXD P3^0;sfr IPH 0xB7;
sfr IP 0xB8;sbit PT2 IP^5;sbit PS IP^4;sbit PT1 IP^3;sbit PX1 IP^2;sbit PT0 IP^1;sbit PX0 IP^0;sfr SADEN 0xB9;sfr XICON 0xC0;sbit PX3 XICON^7;sbit EX3 XICON^6;sbit IE3 XICON^5;sbit IT3 XICON^4;sbit PX2 XICON^3;sbit EX2 XICON^2;sbit IE2 XICON^1;sbit IT2 XICON^0;sfr T2CON 0xC8;sbit TF2 T2CON^7;sbit EXF2 T2CON^6;sbit RCLK T2CON^5;sbit TCLK T2CON^4;sbit EXEN2 T2CON^3;sbit TR2 T2CON^2;sbit C_T2 T2CON^1;sbit CP_RL2 T2CON^0;sfr T2MOD 0xC9;
sfr RCAP2L 0xCA;
sfr RCAP2H 0xCB;
sfr TL2 0xCC;
sfr TH2 0xCD;sfr PSW 0xD0;sbit CY PSW^7;sbit AC PSW^6;sbit F0 PSW^5;sbit RS1 PSW^4;sbit RS0 PSW^3;sbit OV PSW^2;sbit F1 PSW^1;sbit P PSW^0;sfr ACC 0xE0;sfr WDT_CONTR 0xE1;
sfr ISP_DATA 0xE2;
sfr ISP_ADDRH 0xE3;
sfr ISP_ADDRL 0xE4;
sfr ISP_CMD 0xE5;
sfr ISP_TRIG 0xE6;
sfr ISP_CONTR 0xE7;sfr P4 0xE8;sbit P40 P4^0;sbit P41 P4^1;sbit P42 P4^2;sbit P43 P4^3;sbit P44 P4^4;sbit P45 P4^5;sbit P46 P4^6;sbit P47 P4^7;sfr B 0xF0;/#endif4.2 Protues仿真
Led点阵屏上数字一直扫描移动在实际应用时也是扫描移动显示。 配套示例程序
5 总结
LED点阵广告牌作为一种现代化、高效能的广告展示工具已经成为城市景观、商业广告和活动展示中不可或缺的一部分。其高亮度、高清晰度和多功能性使其在各种场合中展现出色彩斑斓的效果吸引眼球、传递信息。商业广告牌用于商业广告、品牌宣传、产品推广等。交通指示牌用于道路交通指示、公共交通站点显示等。活动场馆广告用于体育场馆、演艺场所、会展中心等的广告宣传和信息展示。城市景观工程用于城市建筑、广场、公园等的景观照明和信息展示。活动现场背景用于大型活动现场的背景布置和互动展示。
配套示例程序