基于Arduino的LED广告屏
- 格式:docx
- 大小:452.43 KB
- 文档页数:15
基于单片机控制的无线电子广告牌的设计随着现代社会生活方式的不断发展,各种广告信息也日益丰富和多样化。
作为商家、餐饮店和相关广告行业的从业人员,我们必须要采用更加有效的广告营销手段来进行推广。
而基于单片机控制的无线电子广告牌则成为了一个非常好的选择。
本文将介绍基于单片机控制的无线电子广告牌的设计和实现方法。
一、设计概述基于单片机控制的无线电子广告牌广告,它的核心部分是由单片机、LED灯光模块、无线模块、应用控制系统、电源管理系统等部分组成的一个模块化系统。
通过无线信号,将广告信息传输到广告牌的控制单元,控制单元通过单片机的程序实现广告信息的显示。
二、设计流程1.电路设计方案电路部分采用单片机AT89C52作为主控芯片,配合LED点阵,通过MAX485芯片完成数据的转换和传输。
同时,我们还使用了无线模块ESP8266来实现无线传输。
可以使用电池或者DC/DC电源来提供电源。
2.蓝牙与无线信号的传输本系统采用ESP8266作为无线模块。
在应用控制系统内,使用一个特定的命令将广告信息传输到无线模块上,然后再由无线模块通过Wi-Fi信号或者蓝牙信号将广告内容传输到单片机控制单元。
在具体实现时,可以通过手机APP、PC端或者要展示广告信息的客户进行信号传输,实现方便灵活。
3. LED点阵的显示控制LED灯光模块使用多个点阵组成,可以根据需要设计点阵数量和结构,然后将点阵与单片机的控制单元连接,通过AT89C52控制LED的亮灭,从而实现广告内容的显示。
4. 应用控制系统的实现应用控制系统的设计依据实现方案和展示需求进行。
一般来说,我们可以采用自己开发的APP、PC端软件,或者是使用市场上已经存在的广告牌控制软件等等。
具体需要视实际情况而定。
三、实现技术1. 单片机的程序设计单片机的程序设计是实现整个系统的核心部分。
我们可以采用芯片厂家提供的Keil C等开发工具来进行程序编写。
首先需要了解单片机的数据存储、常用寄存器、定时器和中断等基本知识,然后再根据具体的需要进行编码实现。
arduino oled 亮度标题:Arduino OLED亮度调节方式详解引言:OLED(Organic Light Emitting Diode)技术作为一种新兴的显示技术,具备自发光、超薄、快速响应等优点,并且在Arduino开发领域内得到了广泛的应用。
在使用Arduino开发板控制OLED显示屏时,如何合理地调节亮度是一个常见的问题。
本文将会一步一步地详细回答关于Arduino OLED亮度调节的问题。
第一步:了解Arduino OLED显示屏的亮度控制原理在了解如何调节Arduino OLED显示屏的亮度之前,我们首先需要了解OLED 显示屏的亮度控制原理。
OLED显示屏的亮度主要由两个因素决定:电流和时间。
电流的大小决定了OLED发光元素的亮度,时间则影响了亮度的持续时间。
因此,要控制OLED显示屏的亮度,我们需要调整这两个因素中的一个或两个。
第二步:使用PWM调整电流Pulse Width Modulation(PWM)是一种调制方式,可以通过调整高电平和低电平的时间比例来控制电流的平均值,从而实现亮度调节。
Arduino的各个引脚中,有一些引脚是支持PWM输出的,我们可以利用这些引脚来控制OLED 显示屏的亮度。
具体实现方法如下:1. 将OLED的电源引脚(VCC)连接到Arduino的电源引脚。
2. 将OLED的地引脚(GND)连接到Arduino的地引脚。
3. 将OLED的SCK引脚连接到Arduino的PWM引脚(例如Pin 9)。
4. 在Arduino代码中,使用analogWrite()函数将PWM引脚输出的占空比(0-255)传递给OLED的亮度控制引脚。
这样,通过调整analogWrite()函数传递的占空比,即可实现OLED亮度的调节。
第三步:软件调整亮度除了使用PWM来调整OLED亮度之外,我们还可以通过软件来实现亮度的调整。
软件调整亮度的原理是利用Arduino对OLED每一个像素点进行控制,通过改变每个像素点的亮度值来达到调整整个显示屏亮度的目的。
Arduino与OLED显示屏之间的通信通常采用以下两种主流协议:1.SPI (Serial Peripheral Interface) 协议o SPI是一种高速全双工同步串行通信协议,允许数据同时在多个从设备和一个主设备之间传输。
o在Arduino与OLED模块之间使用SPI时,一般需要如下连线:▪MOSI(主出从入):从Arduino发送数据到OLED显示屏。
▪MISO(主入从出):在某些支持双向通信的OLED模块上可能会用到,但大多数基本OLED模块并不需要这个引脚。
▪SCK(时钟):提供同步时钟信号,所有设备都根据这个信号的上升沿或下降沿同步数据传输。
▪SS/CS(Slave Select / Chip Select):用于选择特定的从设备,当对应的SS信号拉低时,选定的OLED开始接收或发送数据。
o使用SPI时,Arduino需要配置SCK、MOSI和SS引脚,并设置合适的SPI模式和速率。
2.I²C (Inter-Integrated Circuit) 协议o I²C是一种多主从设备通信协议,仅需两条线路:SDA(数据线)和SCL(时钟线)。
o Arduino与OLED显示屏通过I²C接口连接时:▪SDA:数据线上数据在时钟脉冲的控制下进行双向传输。
▪SCL:由主设备(通常是Arduino)控制的时钟线,决定数据传输的节奏。
▪地址线:虽然I²C没有明确的地址引脚,但在协议层面上,每个I²C设备都有一个唯一的地址,这样单总线上可以挂载多个设备。
o配置I²C通信时,Arduino需要初始化Wire库并指定正确的I²C 速度,然后通过I²C地址与OLED显示屏通信。
使用库进行通信在实际编程中,为了简化操作,通常会使用像U8g2这样的库来与OLED显示屏交互,该库支持多种OLED型号以及不同的通信协议(包括SPI和I²C)。
arduino案例Arduino案例。
Arduino是一款开源的电子原型平台,可以用来制作各种互动的项目。
它的设计理念是简单易用,适合初学者和专业人士使用。
在本文中,我们将介绍一些基于Arduino的实际案例,希望能够给大家带来一些灵感和启发。
首先,我们来看一个简单的Arduino案例,LED闪烁。
LED是一种常见的电子元件,可以用来显示各种信息。
在这个案例中,我们将通过Arduino控制LED的闪烁频率,从而实现一个简单的可视化效果。
通过编写简单的代码,我们可以让LED以不同的频率闪烁,从而实现各种有趣的效果。
接下来,让我们来看一个更复杂的案例,温度监控系统。
在这个案例中,我们将使用Arduino连接温度传感器,并通过编写代码实现对环境温度的实时监测。
当温度超过一定阈值时,Arduino将通过蜂鸣器或者LCD显示屏等设备发出警报,提醒用户注意环境温度的变化。
这个案例展示了Arduino在实际生活中的应用,可以帮助我们实现对环境的监测和控制。
除了以上案例,Arduino还可以应用于各种领域,比如智能家居、机器人、无人机等。
通过连接各种传感器和执行器,我们可以实现各种有趣的项目,比如智能灯光控制系统、自动浇水系统、避障小车等。
这些项目不仅可以帮助我们学习电子技术和编程,还可以为我们的生活带来便利和乐趣。
总之,Arduino是一款功能强大的电子原型平台,可以帮助我们实现各种有趣的项目。
通过学习和实践,我们可以掌握电子技术和编程知识,同时也可以享受到创造的乐趣。
希望本文介绍的Arduino案例能够给大家带来一些启发,激发大家的创造力和想象力。
让我们一起动手,实现更多有趣的Arduino项目吧!。
基于Arduino控制的OLED显示模块的电子实践教学研究*王红敏1,王燕1,刘军强2,宁生科1(1.西安工业大学工业中心,陕西西安710021;2.西安工业大学机电工程学院,陕西西安710021)Arduino开源平台[1]的应用为我校电子类专业创新人才的培养提供了新的方向。
其具有价格低廉、编程简单、应用方便、强扩展能力,且不需要过于深厚的理论知识作为开发基础等诸多优点,使得项目开发过程中的原型制作更加快捷简单。
因此,在实践应用中,学生可以自主挖掘日常生活或工业生产中的潜在需求,完全不会受到理论知识的限制,通过Arduino开源平台快速制作原型来进行验证,并在此基础上进行方案的持续优化。
整个实践[2]形成一个新鲜有趣的创新思维的迭代过程,从而激发学生的学习兴趣,培养创新工程实践能力。
OLED被称为有机发光显示器(Organic lighting emitting device,OLED),其具有自发光、响应时间短、低功耗、高亮度、工作温度范围宽、抗震性好以及轻薄等特点,已经在中小尺寸显示领域得到快速的发展。
并且OLED与以CRT为代表的第一代显示器和以LCD为代表的第二代显示器相比,有着明显的技术优势,已逐渐取代传统LCD显示屏在电子实践教学环节的主流地位,并广泛应用于智能家电、通信、军工、工业仪器仪表及大学生科技竞赛等领域。
针对OLED显示屏的广泛应用及适用前沿技术的发展,我校对传统电子工艺实习课程进行转型优化,对课程内容、实验设置等方面进行了调整。
2018年开始应用0.96寸OLED显示模块等实验装置,并开设出利用Arduino开源平台控制OLED显示屏的综合性、设计性实践项目[3],为学生提供了多样性选择,提高了综合性、设计性实验内容的比例,培养了学生的自主创新能力。
一、OLED显示模块的工作原理在基于Arduino的实验教学中开发的液晶显示主要采用支持众多图形显示的OLED显示模块[4],0.96寸OLED 是目前最常见的图形液晶显示器,该模块分辨率为128像素伊64像素,也称为12864OLED。
编号本科生毕业设计基于单片机的LED点阵广告牌设计LED dot matrix billboard design based on singlechip学生姓名专业学号指导教师学院二〇一五年六月毕业设计(论文)原创承诺书1.本人承诺:所呈交的毕业设计(论文)《基于单片机的LED点阵广告牌设计》,是认真学习理解学校的《理工大学本科毕业设计(论文)工作条例》后,在教师的指导下,保质保量独立地完成了任务书中规定的容,不弄虚作假,不抄袭别人的工作容。
2.本人在毕业设计(论文)中引用他人的观点和研究成果,均在文中加以注释或以参考文献形式列出,对本文的研究工作做出重要贡献的个人和集体均已在文中注明。
3.在毕业设计(论文)中对侵犯任何方面知识产权的行为,由本人承担相应的法律责任。
4.本人完全了解学校关于保存、使用毕业设计(论文)的规定,即:按照学校要求提交论文和相关材料的印刷本和电子版本;同意学校保留毕业设计(论文)的复印件和电子版本,允许被查阅和借阅;学校可以采用影印、缩印或其他复制手段保存毕业设计(论文),可以公布其中的全部或部分容。
以上承诺的法律结果将完全由本人承担!作者签名:年月日摘要本设计使用AT89C51单片机作为主控制模块,利用简单的外围电路来驱动64×16的LED点阵显示屏。
利用其本身强大的功能,可以很方便的实现单片机与PC机间的数据传输及存储,并能用软件方便的进行显示容的变化,另一方面点阵显示屏广泛的应用于公共场所,所以本设计具有很强的实用性。
本LED显示屏能够以动态扫描的方式同时显示4个16×16点阵汉字,并能通过软件修改显示容和效果。
把字符码存储在空闲的单片机程序存储器空间,使本LED显示系统能掉电存储1024个字符。
设计中采用了SPI接口的GB2312标准字库。
因为采用串行传输方式,使本系统的可扩展性得到提升,便于多个显示单元的级联。
本文从LED的显示原理入手,详细阐述了LED动态显示的过程以及硬件电路的设计。
一直想搞搞LED屏玩玩,呵,正好捡了块单元板,顺手玩了一把:用arduino驱动的,程序如下:/*显示流程:1:传送595数据2:关闭EN 1,关闭显示3:切换行信息4:刷新595,STB5:开EN 06:延时 (刷新率调整)*/#define RowA 2 //行信号,驱动138#define RowB 3#define RowC 4#define RowD 5int hc138en=6; //138 使能//使用了硬件SPI,以下脚不能更改#define R1 11 //数据出 MOSI#define CLK 13 //时钟 SCK#define STB 10 //595 刷新显示 SS#define DA TAIN 12 //数据入,读FLASH时有用 MISObyte row=0;byte hz[] ={//智[16*16]横排0x20,0x00,0x22,0x04,0x3F,0x7E,0x48,0x44,0x08,0x44,0xFF,0xC4,0x10,0x44,0x14,0x7C,0x22,0x44,0x42,0x10,0x9F,0xF8,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,//和[16*16]横排0x02,0x00,0x07,0x00,0x78,0x00,0x08,0x04,0x0A,0xFE,0xFF,0x84,0x08,0x84,0x18,0x84,0x1C,0x84,0x2A,0x84,0x2A,0x84,0x48,0x84,0x88,0xFC,0x08,0x84,0x08,0x00,0x08,0x00,//科[16*16]横排0x04,0x10,0x0E,0x10,0xF8,0x90,0x08,0x50,0x08,0x10,0xFE,0x90,0x08,0x50,0x1C,0x14,0x1A,0x1E,0x29,0xF0,0x28,0x10,0x48,0x10,0x88,0x10,0x08,0x10,0x08,0x10,0x08,0x10,//技[16*16]横排0x10,0x40,0x10,0x40,0x10,0x48,0x13,0xFC,0xFC,0x40,0x10,0x40,0x10,0x40,0x13,0xF8,0x1A,0x08,0x31,0x10,0xD1,0x10,0x10,0xA0,0x10,0x40,0x10,0xB0,0x51,0x0E,0x26,0x04};void spi_transfer(volatile char data){SPDR = data; // Start the transmissionwhile (!(SPSR & (1<<SPIF))) // Wait the end of the transmission {};//return SPDR; // return the received byte}void hc138sacn(byte r){ //输出行线状态ABCD (A低,D高)digitalWrite(RowA,(r & 0x01));digitalWrite(Row B,(r & 0x02));digitalWrite(RowC,(r & 0x04));digitalWrite(RowD,(r & 0x08));}void hc595senddata(byte data){// 高位在前反相(1亮0灭)for (byte i=0; i<8;i++) {digitalWrite(CLK,0);if (data & 0x80) {digitalWrite(R1, 0);} else {digitalWrite(R1, 1);}data=data<<1;digitalWrite(CLK,1);}}void setup () {pinMode(RowA, OUTPUT);pinMode(RowB, OUTPUT);pinMode(RowC, OUTPUT);pinMode(RowD, OUTPUT); //138片选pinMode(hc138en, OUTPUT); //138 使能pinMode(R1, OUTPUT);//595 数据pinMode(CLK, OUTPUT); //595 时钟pinMode(STB, OUTPUT); //595 使能pinMode(DA TAIN, INPUT); //595 使能//digitalWrite(hc138d, HIGH);Serial.begin(19200);//SPI硬件设置// SPCR = 01010000//interrupt disabled,spi enabled,msb 1st,master,clk low when idle, //sample on leading edge of clk,system clock/4 rate (fastest)SPCR = (1<<SPE)|(1<<MSTR);delay(10);}void loop () {if (Serial.available() > 0) {// read the incoming byte:row = Serial.read();// say what you got:Serial.print("I received: ");Serial.println(row, DEC);}for(row=0;row<16;row++){for (int i=0;i<4;i++){//8片595//硬件SPI 发送8字节耗时:22USspi_transfer(~(hz[i*32+row*2])); //硬件SPIspi_transfer(~(hz[i*32+row*2+1])); //硬件SPI//软件SPI 发送8字节耗时:770US// hc595senddata(hz[i*32+row*2]);// hc595senddata(hz[i*32+row*2+1]);}digitalWrite(hc138en, 1); //关闭显示hc138sacn(row); //换行digitalWrite(STB, 0); //595刷新digitalWrite(STB, 1);delayMicroseconds(500) ; //节电用,digitalWrite(hc138en, 0); //开启显示delayMicroseconds(500) ; //刷新频率调,差不多60HZ,1/16间隔}}接线图:。
arduino点亮led灯实验原理Arduino是一种开源的电子原型平台,可以用于快速、简单地构建各种物联网设备和交互式项目。
它基于易于使用的硬件和软件,并且非常适合初学者和专业人士使用。
在本文中,我们将学习如何使用Arduino来点亮LED灯。
LED(Light Emitting Diode)是一种半导体器件,可以将电能转化为可见光。
它是一种常用的光源,具有低功耗、长寿命、高亮度等优点,在各种电子设备中被广泛应用。
我们需要准备以下材料:1. Arduino开发板2. 一块面包板3. 一颗LED灯4. 一根220欧姆电阻5. 杜邦线若干接下来,我们按照以下步骤进行实验:步骤一:连接电路将Arduino开发板和面包板相连接。
在面包板上插入一根电阻,然后将LED灯的长脚(正极)插入电阻的一端,将LED灯的短脚(负极)插入面包板的负极列。
然后将Arduino的数字引脚13连接到电阻的另一端。
步骤二:编写代码打开Arduino IDE(集成开发环境)并新建一个空白文件。
然后输入以下代码:```void setup() {pinMode(13, OUTPUT);}void loop() {digitalWrite(13, HIGH);delay(1000);digitalWrite(13, LOW);delay(1000);}```以上代码首先通过`pinMode()`函数将数字引脚13设置为输出模式。
然后在`loop()`函数中,使用`digitalWrite()`函数将数字引脚13的电平设置为高(即将LED灯点亮),然后延迟1秒钟。
接着再将数字引脚13的电平设置为低(即将LED灯熄灭),再延迟1秒钟。
这样就实现了循环点亮和熄灭LED灯的效果。
步骤三:上传代码将Arduino开发板通过USB线连接到计算机上。
在Arduino IDE 中选择正确的开发板和串口,并点击上传按钮将代码上传到Arduino开发板上。
基于单片机的Led点阵广告牌设计在当今数字化的时代,广告宣传的方式多种多样,而 Led 点阵广告牌以其独特的显示效果、灵活的设计和广泛的应用场景,成为了广告领域的重要组成部分。
基于单片机的 Led 点阵广告牌更是凭借其低成本、高可靠性和易于控制的特点,受到了广泛的关注和应用。
一、Led 点阵广告牌的基本原理Led 点阵广告牌是由多个 Led 灯按照一定的排列方式组成的矩阵。
通过控制每个Led 灯的亮灭状态,可以显示出各种文字、图形和图像。
Led 点阵广告牌通常分为单色、双色和全彩三种类型,其中单色 Led点阵广告牌最为常见,成本也相对较低。
在基于单片机的 Led 点阵广告牌中,单片机作为核心控制器,负责接收外部输入的信息,并根据预设的程序控制 Led 点阵的显示内容。
单片机通过向驱动电路发送控制信号,来实现对每个 Led 灯的精确控制。
二、单片机的选择在设计基于单片机的 Led 点阵广告牌时,单片机的选择至关重要。
常见的单片机有 51 系列、AVR 系列和 STM32 系列等。
51 系列单片机是经典的 8 位单片机,具有成本低、开发简单的优点,但处理能力相对较弱。
AVR 系列单片机具有较高的性能和丰富的功能,适用于对性能要求较高的应用。
STM32 系列单片机是 32 位的单片机,具有强大的处理能力和丰富的外设资源,适用于复杂的系统设计。
对于一般的 Led 点阵广告牌设计,51 系列单片机通常能够满足需求。
例如,STC89C52 单片机具有 8K 的 Flash 存储器和 512 字节的 RAM,能够存储一定规模的显示数据和程序代码。
三、Led 点阵模块Led 点阵模块是组成 Led 点阵广告牌的基本单元。
常见的 Led 点阵模块有 8×8、16×16 和 32×32 等规格。
在选择 Led 点阵模块时,需要考虑显示效果、分辨率和成本等因素。
8×8 的Led 点阵模块结构简单,成本较低,但显示的内容相对较少。
【方案概述】LED显示屏采用了低电压扫描驱动,具有耗电省、使用寿命长、成本低、亮度高、视角大、可视距离远、防水、规格品种多等优点,可以满足各种不同应用场景的需求,发展前景非常广阔,被公认为最具增长潜力也是发展最快的的LED应用市场。
2008年LED显示屏市场规模约100亿元。
随着北京奥运会、上海世博会、广州亚运会等重大赛会的举办和筹备,体育场馆、机场、车站、银行、医院、公共广场、商业场所、居民社区的大面积应用,LED 显示屏的市场应用空间不断扩大。
此外,已架设的大型LED显示屏幕每10年将历经一次换机潮,随着人们生活水平的提高,户外led显示屏将逐渐应用于各个行业。
这里采用Arduino 来驱动LED显示屏,具体系统设计原理图如图:LED模块设计原理框图说明:1、LED模块为大小为16*64LED点阵显示屏,采用74HC154和74HC595级联驱动方式2、主控制器采用Arduino 328主板【物料清单】【照片】【程序代码1(静态显示)】复制内容到剪贴板代码:int DS=1;int ST_CP=2;int SH_CP=3;int A=4;int B=5;int C=6;int D=7;//unsigned char display_1[]={//0x10,0x04,0x60,0x04,0x02,0x7E,0x8C,0x01,0x00,0x00,0x88,0x1F,0x88,0x 08,0xFF,0x08,//0x88,0x08,0x88,0x9F,0x00,0x60,0xFE,0x1F,0x22,0x42,0x22,0x82,0xFE,0x 7F,0x00,0x00,/*"湖",0*/////0x00,0x20,0x20,0x60,0x20,0x20,0x20,0x10,0x20,0x10,0xFF,0xFF,0x00,0x 00,0x00,0x00,//0x00,0x00,0xFF,0x3F,0x40,0x40,0x20,0x40,0x10,0x40,0x08,0x40,0x00,0x 78,0x00,0x00,/*"北",1*/////0x00,0x00,0xFC,0x87,0x00,0x40,0x00,0x30,0xFF,0x0F,0x00,0x00,0x02,0x 00,0xE2,0x1F,//0x22,0x00,0x22,0x00,0xFE,0xFF,0x22,0x08,0x22,0x10,0xE2,0x0F,0x02,0x 00,0x00,0x00,/*"师",2*/////0x00,0x00,0xFE,0xFF,0x22,0x04,0x5A,0x08,0x86,0x07,0x10,0x80,0x0C,0x 41,0x24,0x31,//0x24,0x0F,0x25,0x01,0x26,0x01,0x24,0x3F,0x24,0x41,0x14,0x41,0x0C,0x 71,0x00,0x00,/*"院",3*///};unsigned char display_1[]={0x40,0x80,0x48,0x60,0x48,0x1F,0x48,0x20,0xFF,0x7F,0x48,0x44,0x48,0x44 ,0x00,0x40,0xC4,0x4F,0x44,0x50,0x44,0x50,0x44,0x50,0xFC,0x50,0x00,0x5C,0x00,0x40 ,0x00,0x00,/*"起",0*/0x80,0x80,0xFC,0x7F,0x96,0x02,0xE5,0x4C,0x84,0x80,0xFC,0x7F,0x00,0x80 ,0x08,0x60,0xC8,0x1F,0x49,0x00,0x4A,0x00,0xC8,0x3F,0x08,0x40,0x08,0x40,0x00,0x78 ,0x00,0x00,/*"航",1*/0x00,0x00,0x00,0x00,0xF8,0x1F,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08 ,0xFF,0x7F,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xF8,0x9F,0x00,0x80,0x00,0xF0 ,0x00,0x00,/*"电",2*/0x80,0x00,0x82,0x00,0x82,0x00,0x82,0x00,0x82,0x00,0x82,0x40,0x82,0x80 ,0xE2,0x7F,0xA2,0x00,0x92,0x00,0x8A,0x00,0x86,0x00,0x82,0x00,0x80,0x00,0x80,0x00 ,0x00,0x00,/*"子",3*/};void hc595_senddat(unsigned char dat)unsigned char i;for(i=0;i<8;i++){digitalWrite(DS,dat&0x80);// DS=dat&0x80;digitalWrite(SH_CP,HIGH);// SH_CP=1;digitalWrite(SH_CP,LOW);// SH_CP=0;dat<<=1;}}void setup(){unsigned char i;for(i=1;i<=7;i++)//依次设置1~7个数字引脚为输出模式pinMode(i,OUTPUT);//设置第i个引脚为输出模式}void loop(){unsigned char i;char j;digitalWrite(SH_CP,LOW); //SH_CP=0;digitalWrite(ST_CP,LOW); //ST_CP=0;while(1){for(i=0;i<16;i++){for(j=3;j>=0;j--){hc595_senddat(~display_1[32*j+2*i+1]);hc595_senddat(~display_1[32*j+2*i]);}switch(i){case0:digitalWrite(A,LOW);digitalWrite(B,LOW);digitalWrite(C,LOW);digital Write(D,LOW); break; //译码器ABCD地址端为0000case1:digitalWrite(A,HIGH);digitalWrite(B,LOW);digitalWrite(C,LOW);digita lWrite(D,LOW); break; //1000case2:digitalWrite(A,LOW);digitalWrite(B,HIGH);digitalWrite(C,LOW);digita lWrite(D,LOW); break; //0100case3:digitalWrite(A,HIGH);digitalWrite(B,HIGH);digitalWrite(C,LOW);digit alWrite(D,LOW); break; //1100case4:digitalWrite(A,LOW);digitalWrite(B,LOW);digitalWrite(C,HIGH);digita lWrite(D,LOW); break; //0010case5:digitalWrite(A,HIGH);digitalWrite(B,LOW);digitalWrite(C,HIGH);digit alWrite(D,LOW); break; //1010case6:digitalWrite(A,LOW);digitalWrite(B,HIGH);digitalWrite(C,HIGH);digit alWrite(D,LOW); break; //0110case7:digitalWrite(A,HIGH);digitalWrite(B,HIGH);digitalWrite(C,HIGH);digi talWrite(D,LOW); break; //1110case8:digitalWrite(A,LOW);digitalWrite(B,LOW);digitalWrite(C,LOW);digital Write(D,HIGH); break; //0001case9:digitalWrite(A,HIGH);digitalWrite(B,LOW);digitalWrite(C,LOW);digita lWrite(D,HIGH); break; //1001case10:digitalWrite(A,LOW);digitalWrite(B,HIGH);digitalWrite(C,LOW);digit alWrite(D,HIGH); break; //0101case11:digitalWrite(A,HIGH);digitalWrite(B,HIGH);digitalWrite(C,LOW);digi talWrite(D,HIGH); break; //1101case12:digitalWrite(A,LOW);digitalWrite(B,LOW);digitalWrite(C,HIGH);digit alWrite(D,HIGH); break; //0011case13:digitalWrite(A,HIGH);digitalWrite(B,LOW);digitalWrite(C,HIGH);digi talWrite(D,HIGH); break; //1011case14:digitalWrite(A,LOW);digitalWrite(B,HIGH);digitalWrite(C,HIGH);digi talWrite(D,HIGH); break; //0111case15:digitalWrite(A,HIGH);digitalWrite(B,HIGH);digitalWrite(C,HIGH);dig italWrite(D,HIGH); break; //1111}digitalWrite(ST_CP,HIGH);//ST_CP=1;digitalWrite(ST_CP,LOW);//ST_CP=0;}}}【程序代码2(滚动显示)】复制内容到剪贴板代码:int DS=1;int ST_CP=2;int SH_CP=3;int A=4;int B=5;int C=6;int D=7;unsigned char display_1[]={0x20,0x80,0x20,0x80,0x20,0x40,0x20,0x20,0x20,0x10,0x20,0x0C,0x20,0x03 ,0xFF,0x00,0x20,0x03,0x20,0x0C,0x20,0x10,0x20,0x20,0x20,0x40,0x20,0x80,0x20,0x80 ,0x00,0x00,/*"大",0*/0x40,0x04,0x30,0x04,0x11,0x04,0x96,0x04,0x90,0x04,0x90,0x44,0x91,0x84 ,0x96,0x7E,0x90,0x06,0x90,0x05,0x98,0x04,0x14,0x04,0x13,0x04,0x50,0x04,0x30,0x04 ,0x00,0x00,/*"学",1*/0x80,0x40,0x40,0x40,0x30,0x42,0x1E,0x42,0x10,0x42,0x10,0x42,0x10,0x42 ,0xFF,0x7F,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x40,0x00,0x40 ,0x00,0x00,/*"生",2*/0x00,0x00,0x00,0x00,0xF8,0x1F,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08 ,0xFF,0x7F,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xF8,0x9F,0x00,0x80,0x00,0xF0 ,0x00,0x00,/*"电",3*/0x80,0x00,0x82,0x00,0x82,0x00,0x82,0x00,0x82,0x00,0x82,0x40,0x82,0x80 ,0xE2,0x7F,0xA2,0x00,0x92,0x00,0x8A,0x00,0x86,0x00,0x82,0x00,0x80,0x00,0x80,0x00 ,0x00,0x00,/*"子",4*/0x10,0x04,0x0C,0x84,0x04,0x84,0x84,0x44,0x14,0x47,0x64,0x24,0x05,0x14 ,0x06,0x0C,0xF4,0x07,0x04,0x0C,0x04,0x14,0x04,0x24,0x04,0x44,0x14,0x84,0x0C,0x04 ,0x00,0x00,/*"实",5*/0x02,0x08,0xFA,0x18,0x82,0x48,0x82,0x84,0xFE,0x44,0x80,0x3F,0x40,0x40,0x20,0x44,0x50,0x58,0x4C,0x41,0x43,0x4E,0x4C,0x60,0x50,0x58,0x20,0x47,0x40,0x40 ,0x00,0x00,/*"验",6*/0x10,0x40,0x0C,0x40,0x24,0x48,0x24,0x49,0xA4,0x49,0x64,0x49,0x25,0x49 ,0x26,0x7F,0x24,0x49,0x24,0x49,0xA4,0x49,0x24,0x4B,0x24,0x48,0x14,0x40,0x0C,0x40 ,0x00,0x00,/*"室",7*/0x40,0x00,0x50,0x00,0x4E,0x3E,0x48,0x02,0x48,0x02,0xFF,0xFF,0x48,0x12 ,0x48,0x22,0x48,0x1E,0x40,0x00,0xF8,0x0F,0x00,0x40,0x00,0x80,0xFF,0x7F,0x00,0x00 ,0x00,0x00,/*"制",8*/0x00,0x01,0x80,0x00,0x60,0x00,0xF8,0xFF,0x07,0x00,0x40,0x00,0x30,0x00 ,0x0F,0x00,0xF8,0xFF,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x08,0x08,0x08,0x00 ,0x00,0x00,/*"作",9*/0x08,0x20,0xF8,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F ,0x00,0x20,/*"h",10*/0x00,0x00,0x80,0x00,0x80,0x00,0xE0,0x1F,0x80,0x20,0x80,0x20,0x00,0x00 ,0x00,0x00,/*"t",11*/0x00,0x00,0x80,0x00,0x80,0x00,0xE0,0x1F,0x80,0x20,0x80,0x20,0x00,0x00 ,0x00,0x00,/*"t",12*/0x80,0x80,0x80,0xFF,0x00,0xA1,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E ,0x00,0x00,/*"p",13*/0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0xC0,0x30,0x00,0x00,0x00,0x00 ,0x00,0x00,/*":",14*/0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x80,0x01,0x60,0x00,0x18,0x00 ,0x04,0x00,/*"/",15*/0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x80,0x01,0x60,0x00,0x18,0x00 ,0x04,0x00,/*"/",16*/0x80,0x0F,0x80,0x30,0x00,0x0C,0x80,0x03,0x00,0x0C,0x80,0x30,0x80,0x0F ,0x80,0x00,/*"w",17*/0x80,0x0F,0x80,0x30,0x00,0x0C,0x80,0x03,0x00,0x0C,0x80,0x30,0x80,0x0F ,0x80,0x00,/*"w",18*/0x80,0x0F,0x80,0x30,0x00,0x0C,0x80,0x03,0x00,0x0C,0x80,0x30,0x80,0x0F ,0x80,0x00,/*"w",19*/0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,/*".",20*/0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x80,0x20,0x00,0x11 ,0x00,0x00,/*"c",21*/0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x13 ,0x00,0x00,/*"e",22*/0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x13 ,0x00,0x00,/*"e",23*/0x00,0x00,0x80,0x00,0x80,0x00,0xE0,0x1F,0x80,0x20,0x80,0x20,0x00,0x000x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,/*".",25*/0x08,0x20,0xF8,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F ,0x00,0x20,/*"h",26*/0x08,0x00,0xF8,0x3F,0x00,0x11,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E ,0x00,0x00,/*"b",27*/0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F ,0x00,0x20,/*"n",28*/0x80,0x00,0x80,0x1F,0x00,0x20,0x00,0x20,0x00,0x20,0x80,0x10,0x80,0x3F ,0x00,0x20,/*"u",29*/0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,/*".",30*/0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x13 ,0x00,0x00,/*"e",31*/0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x88,0x10,0xF8,0x3F ,0x00,0x20,/*"d",32*/0x80,0x00,0x80,0x1F,0x00,0x20,0x00,0x20,0x00,0x20,0x80,0x10,0x80,0x3F ,0x00,0x20,/*"u",33*/0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,/*".",34*/0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x80,0x20,0x00,0x11 ,0x00,0x00,/*"c",35*/0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F ,0x00,0x20,/*"n",36*/0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x80,0x01,0x60,0x00,0x18,0x00 ,0x04,0x00,/*"/",37*/0x08,0x00,0xF8,0x3F,0x00,0x11,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E ,0x00,0x00,/*"b",38*/0x08,0x00,0xF8,0x3F,0x00,0x11,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E ,0x00,0x00,/*"b",39*/0x00,0x00,0x00,0x33,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x19 ,0x00,0x00,/*"s",40*/0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x80,0x01,0x60,0x00,0x18,0x00 ,0x04,0x00,/*"/",41*/0x00,0x00,0x80,0x20,0x98,0x20,0x98,0x3F,0x00,0x20,0x00,0x20,0x00,0x00 ,0x00,0x00,/*"i",42*/0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F ,0x00,0x20,/*"n",43*/0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x88,0x10,0xF8,0x3F ,0x00,0x20,/*"d",44*/0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x13 ,0x00,0x00,/*"e",45*/0x00,0x00,0x80,0x20,0x80,0x31,0x00,0x2E,0x80,0x0E,0x80,0x31,0x80,0x200x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,/*".",47*/0x80,0x80,0x80,0xFF,0x00,0xA1,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E ,0x00,0x00,/*"p",48*/0x08,0x20,0xF8,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F ,0x00,0x20,/*"h",49*/0x80,0x80,0x80,0xFF,0x00,0xA1,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E ,0x00,0x00,/*"p",50*/0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01 ,0x00,0x01,/*"-",51*/0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01 ,0x00,0x01,/*"-",52*/0x40,0x80,0x48,0x60,0x48,0x1F,0x48,0x20,0xFF,0x7F,0x48,0x44,0x48,0x44 ,0x00,0x40,0xC4,0x4F,0x44,0x50,0x44,0x50,0x44,0x50,0xFC,0x50,0x00,0x5C,0x00,0x40 ,0x00,0x00,/*"起",53*/0x80,0x80,0xFC,0x7F,0x96,0x02,0xE5,0x4C,0x84,0x80,0xFC,0x7F,0x00,0x80 ,0x08,0x60,0xC8,0x1F,0x49,0x00,0x4A,0x00,0xC8,0x3F,0x08,0x40,0x08,0x40,0x00,0x78 ,0x00,0x00,/*"航",54*/0x00,0x00,0x00,0x00,0xF8,0x1F,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08 ,0xFF,0x7F,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xF8,0x9F,0x00,0x80,0x00,0xF0 ,0x00,0x00,/*"电",55*/0x80,0x00,0x82,0x00,0x82,0x00,0x82,0x00,0x82,0x00,0x82,0x40,0x82,0x80 ,0xE2,0x7F,0xA2,0x00,0x92,0x00,0x8A,0x00,0x86,0x00,0x82,0x00,0x80,0x00,0x80,0x00 ,0x00,0x00,/*"子",56*/};void hc595_senddat(unsigned char dat){unsigned char i;for(i=0;i<8;i++){digitalWrite(DS,dat&0x80);// DS=dat&0x80;digitalWrite(SH_CP,HIGH);// SH_CP=1;digitalWrite(SH_CP,LOW);// SH_CP=0;dat<<=1;}}void setup(){unsigned char i;for(i=1;i<=7;i++)//依次设置1~7个数字引脚为输出模式pinMode(i,OUTPUT);//设置第i个引脚为输出模式}void loop(){unsigned char i,n;unsigned int k,m;char j;m=sizeof(display_1);digitalWrite(SH_CP,LOW); //SH_CP=0;digitalWrite(ST_CP,LOW); //ST_CP=0;while(1){for(k=0;k<m;k=k+2)for(n=0;n<2;n++)for(i=0;i<16;i++){for(j=3;j>=0;j--){hc595_senddat(~display_1[(32*j+2*i+1+k)%m]);hc595_senddat(~display_1[(32*j+2*i+k)%m]);}switch(i){case0:digitalWrite(A,LOW);digitalWrite(B,LOW);digitalWrite(C,LOW);digital Write(D,LOW); break; //译码器ABCD地址端为0000case1:digitalWrite(A,HIGH);digitalWrite(B,LOW);digitalWrite(C,LOW);digita lWrite(D,LOW); break; //1000case2:digitalWrite(A,LOW);digitalWrite(B,HIGH);digitalWrite(C,LOW);digita lWrite(D,LOW); break; //0100case3:digitalWrite(A,HIGH);digitalWrite(B,HIGH);digitalWrite(C,LOW);digit alWrite(D,LOW); break; //1100case4:digitalWrite(A,LOW);digitalWrite(B,LOW);digitalWrite(C,HIGH);digita lWrite(D,LOW); break; //0010case5:digitalWrite(A,HIGH);digitalWrite(B,LOW);digitalWrite(C,HIGH);digit alWrite(D,LOW); break; //1010case6:digitalWrite(A,LOW);digitalWrite(B,HIGH);digitalWrite(C,HIGH);digitalWrite(D,LOW); break; //0110case7:digitalWrite(A,HIGH);digitalWrite(B,HIGH);digitalWrite(C,HIGH);digi talWrite(D,LOW); break; //1110case8:digitalWrite(A,LOW);digitalWrite(B,LOW);digitalWrite(C,LOW);digital Write(D,HIGH); break; //0001case9:digitalWrite(A,HIGH);digitalWrite(B,LOW);digitalWrite(C,LOW);digita lWrite(D,HIGH); break; //1001case10:digitalWrite(A,LOW);digitalWrite(B,HIGH);digitalWrite(C,LOW);digit alWrite(D,HIGH); break; //0101case11:digitalWrite(A,HIGH);digitalWrite(B,HIGH);digitalWrite(C,LOW);digi talWrite(D,HIGH); break; //1101case12:digitalWrite(A,LOW);digitalWrite(B,LOW);digitalWrite(C,HIGH);digit alWrite(D,HIGH); break; //0011case13:digitalWrite(A,HIGH);digitalWrite(B,LOW);digitalWrite(C,HIGH);digi talWrite(D,HIGH); break; //1011case14:digitalWrite(A,LOW);digitalWrite(B,HIGH);digitalWrite(C,HIGH);digi talWrite(D,HIGH); break; //0111case15:digitalWrite(A,HIGH);digitalWrite(B,HIGH);digitalWrite(C,HIGH);dig italWrite(D,HIGH); break; //1111}digitalWrite(ST_CP,HIGH);//ST_CP=1;digitalWrite(ST_CP,LOW);//ST_CP=0;}}}。