首页 点阵电子显示屏制作16x32

点阵电子显示屏制作16x32

举报
开通vip

点阵电子显示屏制作16x321 编号:A乙0301 点阵电子显示屏制作 目 录 摘要………………………………………………………………………………2 前言 ……………………………………………………………………………4 一、设计要求……………………………………………………………………4 二、方案论证与比较……………………………………………………………5 1、扫描方式的选择 …………………………………………………………5 2、行列控制方式的方案论证与选择 ………………………………………5 3、数字时钟显示模块的设计方案论证与选择 ………………………...

点阵电子显示屏制作16x32
1 编号:A乙0301 点阵电子显示屏制作 目 录 摘要………………………………………………………………………………2 前言 ……………………………………………………………………………4 一、设计 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 ……………………………………………………………………4 二、方案论证与比较……………………………………………………………5 1、扫描方式的选择 …………………………………………………………5 2、行列控制方式的方案论证与选择 ………………………………………5 3、数字时钟显示模块的设计方案论证与选择 ……………………………6 三、系统硬件电路设计…………………………………………………………6 1、系统总体框图………………………………………………………………6 2、各单元电路设计 …………………………………………………………6 2.1、LED点阵的选择………………………………………………………6 2.2、行列控制和驱动电路设计 ……………………………………………7 2.3、实时时间控制电路的设计……………………………………………11 2.4、系统电源参数的核算…………………………………………………13 2.5、单片机与PC机通信单元设计………………………………………13 2.6、键盘控制电路设计 …………………………………………………14 三、 软件设计……………………………………………………………………15 1、主程序设计…………………………………………………………………15 2、基于CPLD的行列控制逻辑电路的程序设计……………………………16 3. PC机串口通信子程序设计…………………………………………………16 四、 系统测试……………………………………………………………………16 五、设计总结 ……………………………………………………………………17 六、参考文献 ……………………………………………………………………17 点阵电子显示屏制作 摘要: 本设计是以AT-89S52单片机为控制核心,基于CPLD独立扫描的实用、高效的智能型LED大屏幕显示屏系统,该系统实现了按键切换、显示屏亮度连续可调、信息上下左右滚屏显示、预存信息定时循环显示,利用DS1302实现实时时间显示等功能,并能通过PC机串口直接对显示信息进行控制更新,具有刷新速度快、亮度高、功耗低等特点。 关键字:点阵LED CPLD MAX232 DS1302 Abstract:The Design of Graph Matrix Display Screen Based on MCS-51 Microprocessor,consists of Micro Control Unit (MCU) as its core, Base on CPLD carry out self-help scan , this system carry out follow function: using key-press shift the display content, adjust the time , continuum adjust the lightness, roll screen display ,timing circle display the pre-store information , using DS1302 carry out real time display, etc. utilize PC , via serial interface , directly control the display content. This Graph Matrix Display Screen display screen with quick refurbish, high luminance, and Low power consumption , and so on peculiarity. Keywords: MCU, Graph Matrix Display Screen,CPLD, MAX232, DS1302 前 言 社会的信息化,促进了显示技术的发展,LED大屏幕点阵显示系统作为一项高科技产品已经渐渐融入了人们的生活。与传统的显示媒体相比,由于其亮度高、动态影像显示效果好、耗能少、使用寿命长、显示内容多样、显示方式灵活、性价比高等优势,已经开始广泛应用于各行各业。采用单片机控制的LED点阵显示屏显示形式美观大方,显示内容灵活可变,具有低功耗,结构简单,操作方便等优点,已广泛应用于银行,证券,影视,体育和公路交通等各个方面,显示了其良好的市场前景。 1、​ 设计要求 1、 基本要求:设计并制作LED电子显示屏和控制器。 (1)自制一台简易16行*32列点阵显示的LED电子显示屏; (2)自制显示屏控制器,扩展键盘和相应的接口实现多功能显示控制,显示屏显示数字和字母亮度适中,应无闪烁。 (3)显示屏通过按键切换显示数字和字母; (4)显示屏能显示4组特定数字或者英文字母组成的句子,通过按键切换显示内容; (5)能显示4组特定汉字组成的句子,通过按键切换显示内容。 2、 发挥部分 1)​ 自制一台简易16行*64列点阵显示的LED电子显示屏; 2)​ LED显示屏亮度连续可调。 3)​ 实现信息的左右滚屏显示,预存信息的定时循环显示; 4)​ 实现实时时间的显示,显示屏数字显示: 时∶分∶秒(例如 18∶38∶59); 5)​ 增大到10组(每组汉字8个或16个数字和字符)预存信息,信息具有掉电保护; 6)​ 实现和PC机通讯,通过PC机串口直接对显示信息进行更新(须做PC机客户程序); 7)​ 其他发挥功能。 二、方案论证与比较 1、扫描方式的选择 方案一:静态显示,所谓的静态显示就是对LED电子显示屏中的每一像素点都通过硬件单独控制,整个LED显示屏所有的LED的同时显示。此方式最大优点是程序设计简单,且画面无闪烁。但这种设计存在致命的缺点:电路复杂,硬件利用率低,成本巨大。所以此方式一般不被采用。 方案二:采用动态扫描法并行输出数据,所谓的动态扫描法是利用人眼的视觉暂留特点而实现的一种显示方法,即当刷新速率足够高时,人眼就察觉不出显示屏画面更迭的闪烁。若要显示一帧画面,先送出第一行的数据,然后选通并点亮第一行,延时;此后送出第二行的数据,同样选通、点亮并延时;依次将所有行扫描完,即给出了一帧的画面。 方案三:采用动态扫描法串行输出数据,方案二和方案三同样采用动态扫描实现显示过程。但方案二的缺点也是明显的,比较而言,方案二的译码电路比较复杂,相对硬件开销大一些;方案三电路构成简单,译码电路简洁。 为使电路设计简洁易行,我们采用方案三 2、行列控制方式的方案论证与选择 方案一:采用传统方案,应用行扫描和列送数据的方式,横向取模,从AT89C52串口发送出来的数据通过74LS595进行串-并行数据转换输出给LED MATRIX UINT的各个列,从AT89C52出来的输出口的数据通过一级总线驱动器74LS245后进入4-16线译码器74LS154,译码以后通过限流电阻进入驱动管阵列放大,直接驱动LED点阵的各行。但要组成16×64的点阵显示电路,必须采用多片芯片,硬件电路复杂。 方案二:采用超大规模可编程逻辑阵列器CPL构成行扫描和列控制模块,利用VHDL语言设计控制逻辑,可充分发挥CPLD和数字电路EDA设计的优势,只用一片CPLD芯片,通过简单的编程模拟8片74LS595和一片74LS154,就可以代替方案一中利用多块芯片实现的功能,硬件电路设计简单可靠,具有极高的稳定性。本设计采用Altera公司的EPM7128SQC160-10芯片。 3、数字时钟显示模块的设计方案论证与选择 方案一:因为题目中只要求显示时、分、秒,因此可以用门电路组合构成时钟发生器,但此方案硬件复杂,稳定性低,且不易控制。 方案二:本方案完全用软件定时、计数功能实现数字时钟。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电、程序不执行时,时钟将不工作。 方案三:本方案采用实时时钟芯片DS1302,它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿功能,采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据,时钟芯片自备电池,只需要设置初始时间即可。 基于上述分析,本设计采用方案三完成数字时钟部分的功能。 三、系统硬件电路设计 1、系统总体框图 图1 系统总体框图 整个显示系统可以分为①CPU主控电路部分②串行数据的传送和时序控制部分 ③CPLD行列译码扫描部分④实时时钟控制电路部分⑤与PC机串口通讯部分⑥按键控制电路部分⑦三极管驱动电路部分⑧点阵显示部分。 2、各单元电路设计 2.1 LED点阵的选择 LED基本阵列选用6寸的8×8点阵, 16片8×8点阵组成整个显示屏。该种点阵的规格为双列直插, 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 引脚距(2.54mm),LED规格为Ф5,单色红色。 8×8点阵LED结构如下图所示: 图2 8×8点阵LED外观及等效电路图 2.2、扫描控制和驱动电路设计 1. EPM7128SQC160-10简述 EPM7128SQC160-10是Altera公司推出的MAX7000S 系列CPLD(Complex Programmable Logic Device);采用CMOS E2PROM工艺,传输延迟仅为5ns;内部具有丰富的资源--128个触发器、2500个用户可编程门;而且具有102个用户可编程的I/O口,为系统定义输入、输出和双向口提供了极大的方便;为了比较适合混合电压系统,通过配置,输入引脚可以兼容3.3V/5V逻辑电平,输出可以配置为3.3V/5V逻辑电平输出。EPM7128同时还提供了JTAG接口,可进行ISP编程,极大地方便了用户。 2、行列扫描电路的设计 对大型LED点阵显示屏而言,由于其数据量大,必须有很快的刷新频率,如刷新速度跟不上,会造成点阵屏画面晃动和闪烁。解决这个问题有很多方法,例如,采用PC机的DMA控制器来提高数据传输速率,采用并行数据传输方式,分单元多CPU控制方式等等。我们采用CPU控制,利用CPLD(EPM7128SQC160-10)设计扫描逻辑,串行列数据分时传输,行扫描的方式,从而使整个显示屏可以顺序工作,并利用CPU控制扫描频率,实现了屏幕无闪烁显示。 该部分控制电路原理如图3、图4、图5所示,采用行扫描的方式,行扫描与列送数据电路均采用CPLD 芯片编程构成的通用数字电路来控制,在16×64点阵显示时,扫描输出需要大量的I/O端口,因此我们采用具有160个I/O端口的EPM7128SQC160-10芯片,仅用一片即可满足设计要求。 列数据传输控制电路如图3所示,由单片机输出的显示信息串行输入到CPLD,用VHDL语言编写其总线读逻辑,在CPLD芯片中实现八片8位3态串行输入、并行输出,带锁存功能的移位寄存器,完成数据的串并转换,由CPLD的64列数据输出控制LED点阵的64列。图3为由CPLD实现的八片74LS595的示意图,其中,L1-L64为列选通控制信号输出,RCK、SCK、SCLR是由单片机送来得控制信号,RCK为锁存控制信号,SCK为时钟控制信号,SCLR为清零信号,各片的RCK、SCK、SCLR均接在一起, Si接单片机的扫描数据输出,第一片74LS595(由CPLD实现)移位输出端接第二片74LS595的数据输入Si2,八片进行级连,实现一次扫描一个字节即:八位并行输出和串行移位功能。 图3 用CPLD实现的64列数据传输逻辑示意图 行扫描的控制是利用CPLD编程实现四线十六线译码器74LS154的功能,如图4所示,AA、BB、CC、DD接单片机行控制数据输出,H1-H16为CPLD输出的行扫描控制信号,接行三极管驱动电路。 图4 用CPLD实现的行扫描逻辑示意图 图5 CPLD内部逻辑电路图 3、行驱动电路设计 该系统显示部分的点阵采用单色LED共阴点阵模块,16 块8×8点阵模块连接成16×64点阵。因为一个行扫描管同时控制着一行中多个LED的通断,所以它承载较大电流。以每个发光二极管流过的电流为10mA计算,一个64列的点阵屏中,每个行扫描管所承受的电流是10mA×64=0.64A,为此我们选用高速中功率三极管8550,保证了行的驱动能力。由于显示点阵的每一行都需要用一个三极管来控制,所以16×64点阵共需要16个8550。驱动电路如图6所示。 图6 行驱动电路图 4、扫描频率的控制 由于人眼的视觉暂留现象,一个LED发光管如果在一秒钟内亮24次以上的话,人眼就感觉不到闪烁。由此,一屏画面连续以每秒25次的频率循环显示时,给人的感觉是稳定的。为此只要利用CPU控制由CPLD实现的行译码器的译码速度,保证每秒内译码16×25=400次,就可以保证画面的稳定性。设计时,我们使AT89C51的定时/计数器T0工作于方式2(自动重载方式AUTO-RELOAD MODEL)。此时设定M1M0为10,在方式2中16位计数器被拆为两部分,其中TL0用作8bit Counter;TH0用于存放和保持计数初值。当TL0计数溢出时,在溢出标志TF0置1的同时,自动的将TH0的初值重载到TL0中,因此在初始化的过程中,用软件只需一次赋初值。其周期为: T=(2^8-TH0初值)×时钟周期×12 采用11.0592MHZ的晶振时,计数速率约为1MHz,输入脉冲的周期间隔为1uS,通过计算,TH0的初值为243,即为0XF3(OF3H)。采用中断的方式控制行译码扫描频率,就可以保证画面的无闪烁显示。 2.3实时时间控制电路的设计 1、DS1302的结构及工作原理 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据,同时提供了对后背电源进行涓涓细流充电的能力。其引脚功能及结构如图7所示    图7 DS1302引脚功能及结构图 DS1302 的控制字如图8所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 图8 DS1302 的控制字 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。 表1 寄存器 命令字 取值范围 各位内容 名称 写操作 读操作 7 6 5 4 3 2 1 0 秒寄存器 80H 81H 00—59 CH 10SFC SEC 分寄存器 82H 83H 00—59 0 10MIN MIN 时寄存器 84H 85H 01—12或00—13 12/24 0 10 HR HR 日寄存器 86H 87H 00—28.29.30.31 0 0 10DATA DATA 月寄存器 88H 89H 01—12 0 0 0 10M MONTH 周寄存器 8AH 8BH 01—07 0 0 0 0 0 DAY 年寄存器 8CH 8DH 00—99 10YEAR YEAR     此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 2、利用 DS1302的实时时间显示电路硬件设计     DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。图9示出DS1302与89C51的连接图,利用单片机控制,采用显示屏分屏显示年、月、日与时、分、秒,并能进行按键调时。 图9 DS1302与89C52的连接图     实际上,在调试程序时可以不加电容器,只加一个32.768kHz 的晶振即可。只是选择晶振时,不同的晶振,误差也较大。另外,还可以在上面的电路中加入DS18B20,同时显示实时温度。只要占用CPU一个口线即可。 2.4 系统电源参数的核算 对大型LED点阵显示屏而言,由于其发光二极管数量多,在16×64点阵中,以每个发光二极管流过的电流为10mA计算,一个64列的点阵屏中,每个行扫描管所承受的电流是10mA×64=0.64A,16行并联的总电流为0.64×16=10.24 A,要求电源输出大电流,一般的集成稳压芯片均不能满足要求,因此本设计中采用电压为5V,电流为10A的开关稳压电源。 2.5 单片机与PC机通信单元设计 1、​ 通信单元电路组成 本单元主要有两部分组成:上位机、下位机与电缆的接口,中间为电平转换电路。该系统采用三线制,独占 CPU串口方式。RS-232信号的电平和单片机串口信号的电平不一致,必须进行二者之间的电平转换,在此使用的集成电平转换芯片MAX232为RS-232C/TTL电平转换芯片。它只使用单+5V电源,配接4个1μF电解电容即可完成RS-232电平与TTL电平之间的转换。其电路原理如图10所示。转换完毕的串口信号TXD、RXD直接和89C51的串行口连接。 图10 电平转换电路 2、 通信协议 本系统中PC机承担主控任务,单片机接受PC机指令,并根据指令控制显示信息,修改显示内容。我们采用RS-232串口异步通信,1位起始位,8位数据位,1位停止位,无奇偶校验,波特率9600b/s,传输数据采用ASCII模式。PC机传送控制信息和数据,控制信息包括修改显示参数、修改显示方式。同时PC机能向单片机传送显示内容。下位机按接收到的指令工作。如果主控机发出错误的指令,将不做任何控制,并显示Error提示,1秒钟后自动返回。 2.6、键盘控制电路设计 本系统设置三个按键(k1、k2、k3)分别来控制时间、日期、滚屏显示以及时间的调整,系统默认的状态是显示时间。首先进行键盘扫描判断k1键是否按下,如果k1键按下并且只按一下则进入日期显示状态,当按两下则进入信息的顺序滚屏显示状态,如果没有按下则判断k2键是否按下,当k2键按下则进入时间、日期的设置状态。K3键的作用是当调整时间时,完成时间和日期的累加,直到调整到需要的时间和日期为止。 三、 软件设计 1.主程序设计 软件设计采用了模块化设计,全部用C51编程。整个软件系统简洁明了,而且具有良好的扩展性。整个软件系统包括主程序、行列控制逻辑CPLD程序、时钟控制子程序和PC机串行通信子程序四大模块。主程序负责键盘处理、显示刷新、信息调用与传输控制。主程序流程如图11所示。 图11 主程序流程图 2、基于CPLD的行列控制逻辑电路的程序设计 行译码扫描和列数据的串并传输控制的功能较主控电路来讲相对简单,它是将主控电路输出的四位二进制数据译成16行的行选通信号,去控制行驱动管驱动行输出,将主控电路串行输出的数据经CPLD完成数据的串并转换,输出控制64列,完成列数据的传送。这是一个纯组合逻辑电路,使用Verilog HDL 语言描述的always语句和case 多分支语句即可实现此功能。 3、PC机串口通信子程序设计 在与PC机进行通信时,单片机的功能主要是负责通信与数据处理。单片机接收来自PC机的信息,分析后回传信息或数据到PC机,采用串口中断程序,不定时处理与PC机的通信信息。 四、 系统测试 经过系统的测试与分析,得到以下结果: 1、按键切换显示数字、字母与时间: 上电时,系统显示当前时间,按一下k1键,即进入日期显示状态,系统显示当前的日期,按两下k1键,系统进入顺序滚屏显示状态,依次显示“欢迎光临济铁职院”、“happy teacher day”等10组汉字与英文字符,按下k2键则进入时间设置状态,与K3键配合实现了对年、月、日、以及时、分、秒的调整。 2、掉电保护功能测试 为使单片机内部RAM中的数据在电源掉电时不丢失,单片机外部中断0平时是高电平,当掉电时,外部中断口0变为低电平,产生中断,单片机检测到这个中断信号时,转入中断处理程序,及时把有用信息保存起来,因为系统接入470uF的电容,电容的放电时间完全能够保证单片机执行完保护数据的程序,这样就可以避免断电时预存信息的丢失,实现掉电保护功能。经测试,我们设计的系统做到了信息的掉电保护。 3、亮度的调节测试 通过连续调节限流电阻,改变加在LED显示屏上的驱动电流,达到亮度连续可调的目的。经测试,本系统实现了显示亮度的连续可调。 4、结论 经过小组成员的一致努力,完成了本次课题的任务,达到了预期的目的。设计制作的具有多种功能的16×64的点阵LED显示屏,显示画面清晰,无闪烁,很好的完成了基本要求部分和发挥部分的功能。 五、设计总结 通过这次竞赛,我们在硬件设计、软件编程方面得到了极大的提高。同时我们小组的三个成员团结一心,通力合作,体现了很好的团队合作精神。为以后走向工作岗位从事科研或管理工作积累了不可多得的经验。在竞赛中碰到了一个接一个的难题,我们经过不屈不挠的刻苦攻关,一一得到了化解,这种体验为我们走好今后的人生路增添了极大的信心。 六、参考文献 [1] 全国大学生电子设计竞赛组委会.第六届全国大学生电子设计竞赛获奖作品选编(2003).北京:北京理工大学出版社,2005年 [2] 黄智伟,王彦,陈文光,朱卫华.全国大学生电子设计竞赛训练教程.北京:电子工业出版社,2005年 [3] 王松武,于鑫,武思军.电子创新设计与实践.北京:国防工业出版社,2005 [4] 林明权、马维旻:VHDL数字控制系统设计范例[M],北京, 电子工业出版社,2003 [5] 杨恒、卢飞成:FPGA/VHDL快速工程实践入门与提高[M],北京,北京航空航天大学出版社,2003 [6] 顾斌、赵明中:数字电路EDA设计,西安电子科技大学出版社,2005 [7] 赵亮、侯国锐:单片机C语言编程与实例,人民邮电出版社,2003 部分源程序清单: sbit CLK=P2^0; sbit DAT=P2^1; sbit RCLK=P2^2; //sbit CS=P2^3; sbit AA=P3^0; sbit BB=P3^1; sbit CC=P3^2; sbit DD=P3^3; sbit G1=P3^4; sbit dat=P1^1; sbit clk=P1^0; sbit rst=P1^2; uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,全灭 uchar code huan[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x9F,0xFF,0xBB,0x81,0x01,0xF9,0x7B,0xDA,0x97, 0xE9,0x9F,0xE3,0x1F,0xF3,0x2F,0xEB,0x6F,0xD8,0xE7,0xBD,0xF1,0xF3,0xFB,0xFF,0xFF};/*"欢",0*/ uchar code ying[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0x3F,0xE4,0xC1,0xED,0xDD,0xED,0xDD,0x85,0xDD, 0xED,0xDD,0xEC,0x5D,0xE9,0xC1,0xEF,0xDF,0xEF,0xDF,0x90,0x61,0xFE,0x03,0xFF,0xFF};/*"迎",1*/ uchar code guang[]={0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xEF,0xE6,0xE7,0xF2,0xCF,0xFA,0xDF,0xFE,0xBB, 0x80,0x01,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xF3,0xBB,0xF7,0xBB,0x8F,0x81,0xFF,0xFF};/*"光",2*/ uchar code lin[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0x3F,0xDB,0x7B,0xDB,0x01,0xDA,0x5F,0xDA,0xEB, 0xD9,0x03,0xDB,0x5B,0xDB,0x5B,0xDB,0x5B,0xDB,0x5B,0xFB,0x03,0xFB,0x7B,0xFF,0xFF};/*"临",3*/ uchar code Dshuzi[]={0xFF,0xFF,0xFF,0xE1,0xDE,0xDE,0xBF,0xBF,0xBF,0xBF,0xBF,0xDE,0xE1,0xFF,0xFF,0xFF,/*"0",0*/ 0xFF,0xFF,0xFF,0xF3,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xE0,0xFF,0xFF,0xFF,/*"1",1*/ 0xFF,0xFF,0xFF,0xE1,0xDC,0xBE,0xBE,0xFE,0xFC,0xF9,0xF7,0xCF,0x80,0xFF,0xFF,0xFF,/*"2",2*/ 0xFF,0xFF,0xFF,0xE1,0xDE,0xFE,0xFE,0xFD,0xF0,0xFE,0x9F,0xDE,0xE1,0xFF,0xFF,0xFF,/*"3",3*/ 0xFF,0xFF,0xFF,0xFC,0xF8,0xF4,0xF4,0xEC,0xDC,0xC0,0xFC,0xFC,0xF8,0xFF,0xFF,0xFF,/*"4",4*/ 0xFF,0xFF,0xFF,0xC0,0xDF,0xDF,0xDF,0xC1,0xFE,0xFF,0xFF,0x9F,0xC0,0xFF,0xFF,0xFF,/*"5",5*/ 0xFF,0xFF,0xFF,0xF8,0xE7,0xCF,0x9F,0x80,0x9F,0x9F,0x9F,0xDF,0xE0,0xFF,0xFF,0xFF,/*"6",6*/ 0xFF,0xFF,0xFF,0x80,0xBF,0xFE,0xFD,0xF9,0xFB,0xF3,0xF7,0xE7,0xE7,0xFF,0xFF,0xFF,/*"7",7*/ 0xFF,0xFF,0xFF,0xE1,0xDE,0xDE,0xDE,0xE1,0xDC,0xBF,0xBF,0x9E,0xE1,0xFF,0xFF,0xFF,/*"8",8*/ 0xFF,0xFF,0xFF,0xE3,0x9C,0xBE,0xBE,0xBE,0x9C,0xE2,0xFE,0xFC,0xE3,0xFF,0xFF,0xFF,/*"9",9*/ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xDF,0xFF,0xFF,0xFF,0xDF,0xCF,0xFF,0xFF,0xFF};/*冒号*/ uchar code ji[] ={0xFF,0xF7,0x60,0xCB,0xD1,0xAB,0x8B,0xFF};/*"济",0*/ uchar code nan[] ={0xFF,0xED,0x01,0x81,0xA1,0xB5,0xB1,0xFF};/*"南",1*/ uchar code tie[] ={0xFF,0xDB,0xC3,0x80,0x8B,0xD5,0xCE,0xFF};/*"铁",2*/ uchar code dao[] ={0xFF,0xB3,0xC0,0x21,0xA1,0xA1,0x41,0xFF};/*"道",3*/ uchar code zhi[] ={0xFF,0x01,0xA5,0x81,0xA5,0x81,0xEE,0xFF};/*"职",4*/ uchar code ye[] ={0xFF,0xE7,0xE5,0xA5,0xE3,0xE7,0x80,0xFF} ;/*"业",5*/ uchar code jiji[]={0xFF,0xD7,0x81,0xC3,0x93,0xD7,0x89,0xFF};/*"技",6*/ uchar code shu[] ={0xFF,0xF3,0xF6,0x80,0xE3,0xD3,0xB4,0xFF}; /*"术",7*/ uchar code xue[] ={0xFF,0xC5,0xFB,0x80,0x80,0xF7,0xE7,0xFF}; /*"学",8*/ uchar code yuan[]={0xFF,0x9B,0x80,0xA0,0x93,0x91,0x89,0xFF};/*"院",9*/ //定时4ms程序 void dingshi(void) { TMOD=0x01; TL0=(65536-4000)%256; TH0=(65536-4000)/256; EA=1; ET0=1; TR0=1; while(!TF0); TR0=0; } void delay(uint a) { uint j=255; for(;a>0;a--) for(;j>0;j--); } void sendH(uchar *k) { uchar num1,num2,c,i; G1=0; for(i=0;i<16;i++) { num1=k[2*i];num2=k[2*i+1]; for(c=0;c<8;c++) { CLK=0; DAT=num1&0x80; num1=num1<<1; CLK=1; } for(c=0;c<8;c++) { CLK=0; DAT=num2&0x80; num1=num2<<1; CLK=1; } } RCLK=0; RCLK=1; ACC=i; AA=ACC^0;BB=ACC^1;CC=ACC^2,DD=ACC^3; dingshi(); } void sendH1(uchar n,uchar *k) { uchar num1,c,i; G1=0; for(i=n;i<8+n;i++) { num1=k[i]; for(c=0;c<8;c++) { CLK=0; DAT=num1&0x80; num1=num1<<1; CLK=1; } RCLK=0; RCLK=1; ACC=i; AA=ACC^0;BB=ACC^1;CC=ACC^2,DD=ACC^3; dingshi(); } } void sendD(uchar n) { uchar num1,c,i; G1=0; for(i=0;i<16;i++) { num1=Dshuzi[n*16+i]; for(c=0;c<8;c++) { CLK=0; DAT=num1&0x80; num1=num1<<1; CLK=1; } RCLK=0; RCLK=1; ACC=i; AA=ACC^0;BB=ACC^1;CC=ACC^2,DD=ACC^3; dingshi(); } } void InputByte(uchar dd) { uchar i; ACC=dd; for(i=8;i>0;i--) { dat=A0; clk=1; clk=0; ACC=ACC>>=1; } } //------------------------------------------------------- uchar OutputByte(void) { uchar i; dat=1; for(i=8;i>0;i--) { ACC=ACC>>1; A7=dat; clk=1; clk=0; } return(ACC); } //-------------------------------------------------- void Write(uchar addr,uchar num) { rst=0; clk=0; rst=1; InputByte(addr); InputByte(num); clk=1; rst=0; } //------------------------------------------------- uchar Read(uchar addr) { uchar dd=0; rst=0; clk=0; rst=1; InputByte(addr); dd=OutputByte(); clk=1; rst=0; return(dd); } //-------------------------------------------------------------- uchar ReadSec() { uchar dd; dd=Read(0x81); return(dd); } //-------------------------------------------------------------- uchar ReadMin() { uchar dd; dd=Read(0x83); return(dd); } //-------------------------------------------------------------- uchar ReadHr() { uchar dd; dd=Read(0x85); return(dd); } //------------------------------------------------------------ uchar ReadWe() { uchar dd; dd=Read(0x8b); return(dd); } //------------------------------------------------------------ uchar ReadDay() { uchar dd; dd=Read(0x87); return(dd); } //------------------------------------------------------------ uchar ReadMn() { uchar dd; dd=Read(0x89); return(dd); } //------------------------------------------------------------ uchar ReadYs() { uchar dd; dd=Read(0x8d); return(dd); } //------------------------------------------------------------ void WriteSec(uchar num) { Write(0x80,num); } //----------------------------------------------------------- void WriteMin(uchar num) { Write(0x82,num); } //----------------------------------------------------------- void WriteHr(uchar num) { Write(0x84,num); } //----------------------------------------------------------- void WriteDay(uchar num) { Write(0x86,num); } //----------------------------------------------------------- void WriteMn(uchar num) { Write(0x88,num); } //----------------------------------------------------------- void WriteWe(uchar num) { Write(0x8a,num); } //----------------------------------------------------------- void WriteYs(uchar num) { Write(0x8c,num); } //----------------------------------------------------------- void DisableWP(void) { Write(0x8e,0x00); } //---------------------------------------------------------- void EnableWP(void) { Write(0x85,0x80); } unsigned char Key_Scan(void) { unsigned char key_temp=0,i,j; unsigned char scan_code_row=0x01,scan_code_colum=0x80; for(i=0;i<4;i++) { KEY_PORT=scan_code_row; if(KEY_PORT==0) { for(j=0;j<4;j++) { KEY_PORT=scan_code_colum; if(KEY_PORT==0&&key_temp!=0) {KEY_PORT=0xff; return key_temp=0;} else if(KEY_PORT==0) key_temp=scan_code_row|scan_code_colum; scan_code_colum>>=1; } } scan_code_row<<=1; } KEY_PORT=0xff; return key_temp; } void shiy(void) { do{ for (a=0;a<64;) { for(b=0;b<300;b++) {c=0xfe; for(d=0;d<8;d++) { for(e=0;e<500;e++); P1=design[a+d]; P2=c; c=((c<<1)|0x01); } } a=a+8; } for (a=0;a<56;) { for(b=0;b<40;b++) {c=0xfe; for(d=0;d<8;d++) { for(e=0;e<500;e++); P1=design[a+d]; P2=c; c=((c<<1)|0x01); } } a=a+1; } for (a=0;a<64;a++) {design1[a]=design[a];} for(b=0;b<80;b++) {c=0xfe; for(d=0;d<8;d++) { for(e=0;e<500;e++); P1=design1[d]; P2=c; c=((c<<1)|0x01); } } for (a=0;a<64;a+=8) { for (b=0;b<8;b++) { for (d=0;d<8;d++) { if ((a+b+8)<64) { design1[d]=(design1[d])<<1; g=design1[a+d+8]; design2[d]=g>>7; design1[d]=(design1[d]|design2[d]); design1[a+d+8]=(design1[a+d+8])<<1; } } for(f=0;f<40;f++) { c=0xfe; for(d=0;d<8;d++) { for(e=0;e<500;e++); P1=design1[d]; P2=c; c=((c<<1)|0x01); } } }
本文档为【点阵电子显示屏制作16x32】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_609544
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:31
分类:互联网
上传时间:2011-04-13
浏览量:30