《基于STC89C52单片机的8乘8点阵LED电子显示屏的设计(21页).docx》由会员分享,可在线阅读,更多相关《基于STC89C52单片机的8乘8点阵LED电子显示屏的设计(21页).docx(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于STC89C52单片机的8乘8点阵LED电子显示屏的设计-第 17 页沈阳工业大学课程设计报告课程名称: 专业综合课程设计 设计题目: 点阵式LED显示器 专业班级:测控技术与仪器1102班 姓名: 何鹏举 学号: 110401215 指导教师: 刘博 目 录摘 要IIAbstractII1 绪论11.1背景及设计目的11.2选题目的和意义12 设计方案简述22.1 LED驱动显示方案22.2数据传输和显示方案32.3.系统模块框图43.详细系统电路设计43.1单片机系统及外围电路43.2 74HC595列锁存电路73.4 8乘8点阵104系统软件设计114.1 显示驱动程序114.2系
2、统主程序125.调试135.1 硬件调试135.2软件调试145.3 系统总电路146总结.15参考文献16附录:软件C代码17摘 要文章介绍了基于STC89C52单片机的8乘8点阵LED电子显示屏的设计。分别阐述设计方案的方案论证、51单片机的最小系统及其外围电路、显示屏显示的基本原理、硬件仿真设计、控制方法及其程序的实现。系统的设计和实现流程大体按照模块设计、硬件仿真、元件焊接、硬件调试、软件代码设计、程序调试。设计的结果能够实现对汉字和图形的静态和动态显示,动态显示的方式有多种方式。关键词:单片机;点阵;硬件调试;软件调试;动态显示AbstractThis paper introduce
3、s the microcontroller based STC89C52 8 by 8 dot matrix LED electronic display design. Elaborate design of the program were demonstrated, 51 the microcontroller system and its peripheral circuits, the display shows the basic principle, the hardware simulation design, control methods and procedures fo
4、r implementation. System design and implementation process in general accordance with the modular design, hardware simulation, welding components, hardware debugging, software code, design, program debugging. Result of the design of Chinese characters and graphics to achieve static and dynamic displ
5、ay, dynamic display mode in several ways. Keywords:microcontroller; lattice; hardware debugging; software debugging; dynamic display 1 绪论1.1背景及设计目的现代社会,信息的更新速度达到了前所未有的程度。信息的显示方式传统上有LED发光管,LED数码管,虽然两者应用很广泛,但是只能单一地显示电平状态和数码。LED点阵集两者特点于一身,更加由于能显示汉字字符、图形、符号等而广泛应用于人们的日常生活中。它具有发光效率高、使用寿命长、组态灵活、色彩丰富以及对室内外环
6、境适应能力强等特点,被广泛应用在公交车站、码头、商店、学校和银行等公共场合用于信息的发布和广告宣传。目前,国内的LED点阵显示屏大部分是单显示型,其显示的内容相对较少,显示的花样较单一。一般在产品出厂时,显示的内容就已写入显示屏的控制系统中的EPROM芯片内,当需要更换显示内容时就非常困难,这样使该类型的显示屏使用范围受到了限制。国内的另一种LED显示屏可编程序型LED显示屏,虽然增加了显示屏系统的编程能力,现实的内容和显示的花样都有所增加,但也存在着显示内容不便的缺点。随着社会经济的迅速发展,如今的广告牌都存在着显示内容丰富。信息量大。信息更换速度快等特点。一次传统的LED显示屏控制系统已经
7、越来越不能满足现代广告宣传业的需求,而利用PC机通信技术控制LED显示屏,则具有显示丰富,信息更换灵活等优点。国内从事LED显示屏生产的企业众多,同时,受到外资企业LED显示屏价格过高的影响,在中国LED显示屏市场上多以本土企业为主。目前,本土LED显示屏生产企业除供应国内需求外,还不断把产品出口到国外市场。随着国际LED显示屏生产大厂不断把生产基地转移至国内, 加之国内众多的LED显示屏本土企业,中国正在成为全球LED显示屏的主要生产基地。因此研究LED汉字滚动显示屏的设计方法具有重要的理论和现实意义。1.2选题目的和意义通过这次毕业设计,掌握51单片机的接口电路、点阵显示原理、自动控制等原
8、理。了解简单的16乘16点阵显示图像、汉字、符号的原理,提高动手实践和软编程件调试的能力。同时通过本课题研究、设计、装配、调试、提高自己的独立开发项目和动手能力,巩固已学的单片机及自动控制原理的知识。了解并分析系统各电路模块之间的组成与相互关系和影响。本次毕业设计的完成也为以后学习16位,甚至32位单片机和嵌入式系统等在自动控制方面的应用奠定一定的理论与实际基础,也为以后独立开发单片机系统、嵌入式系统等工业控制打下坚实的基础。2 设计方案简述2.1 LED驱动显示方案按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分为硬件译码和软件译码之分。静态显示就是显示驱动电路具有输出锁存功能,单
9、片机将所要显示的数据送出后就不再管,知道下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间。但每个显示单元都要单独的显示驱动电路,使用的硬件较多;动态显示需要CPU时刻对显示器进行数据刷新,显示数据有闪烁感,占用的CPU时间多,但使用硬件少,能节省线路和单片机I/O空间。若使用静态显示方式,8乘8点阵共有64个发光二极管,单片机没有这么多的端口,如果用锁存器来扩展端口,按8位锁存器来计算,也需要8个锁存器。因此,在实际应用中显示屏几乎都不采用静态显示,而是采用动态扫描的显示方法。考虑到成本的减少,以及显示的完整性,此次设计使用4块8乘8共阳型点阵拼成16乘16点阵,采
10、用行扫描法,先送出对应点阵第一行发光二极管亮灭的数据并锁存,然后选通第一行使其亮的时间,然后熄灭;再送第二行的数据,依次下去,直到第十六行、整个来回的时间只要达到每秒24次以上,利用人的视觉暂留,就可以看到显示屏上显示出的稳定的图像了。具体的点阵屏的电路如图2-1所示。图2-1 16乘16点阵2.2数据传输和显示方案采用扫描方式显示时,显示数据通常存储在单片机的存储器中,以字节形式顺序排放。显示时要把一行中各列的数据都传送到相应的列驱动器上,这就存在着一个显示数据传输的问题。数据传输可以采用并行方式或串行方式。并行数据传输方式具有操作简单,外围电路少等优点,同时存在占用资源大、控制时间长、扩展
11、性差等缺点;串行方式具有占用资源少,控制简便易行,良好的扩展性等诸多方面的有点,考虑到点阵屏的扩展及其电路走线等问题,本次设计的十六乘十六点阵屏系统的数据传输方式采用串行传输的方法。采用此方法,控制电路可以只用一根信号线,将列数据一位一位传送到列驱动器,但是,串行传输过程较长导致列数据传输和显示的时间矛盾,针对此问题,可以采用重叠处理的方法。即在显示本行各列数据的同时,传送下一行的数据。为了达到重叠处理的目的,列数据的显示就需要具有所存的功能。经过上述分析,归纳出列驱动器电路应具备串入并出的移位功能和并行锁存功能。2.3.系统模块框图STC89C52单片机系统74HC595行驱动74HC595
12、列驱动16乘16点阵图2-2 系统模块图3.详细系统电路设计3.1 单片机系统及外围电路单片机采用了STC89C52,选用了12M晶振,用P1口低四位作为行选通线,高四位作为列控制线,两个串行口分别用作列数据输入和移位时钟。设计的界面可以显示一个汉字,需要4个8*8点阵模块,组成16*16点阵。STC89C52是51系列单片机的一个型号, 是标准的40引脚双列直插式集成电路芯片,STC89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用宏晶公司的高密度、非易失性存储技术生产,
13、兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的STC89C52单片机可为您提供许多较复杂系统控制应用场合。STC89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个RW口线,STC89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。 主要功能特性: 兼容MCS51指令系统 8k可反复擦写(1000次)Flash ROM 32个双向I/O口 256x8bit内部RAM
14、 3个16位可编程定时/计数器中断 时钟频率0-24MHz 1个串行中断 可编程UART串行通道 2个外部中断 2个定时计数器中断 共5个中断源 2个读写中断口线 3级加密位 看门狗电路 低功耗空闲和掉电模式 软件设置睡眠和唤醒功能 合适尺寸 实际尺寸 主要引脚功能1 电源和晶振 Vcc 运行和程序校验时加+5V Vss 电源地 XTAL1 输入到振荡器的反相放大器XTAL2 反相放大器的输出,输入到内部时钟发生器如果使用外部振荡器时,外接12MHZ晶振,同时加上两个30pF的电容来辅助稳定外部振荡器的频率,减少频率偏差。2 I/O口P0-P3 为可编程通用I/O 脚,其功能用途由软件定义P0
15、口为开漏输出结构,在输出的时候通常加以上拉电阻配合使用,提高IO口携带负载的能力。3 控制线 RST 复位输入信号,高电平有效,两个机器周期以上的高电平即可。 EA/Vpp 片外程序存储器访问允许信号,低电平有效。 ALE/PROG 地址锁存允许信号,输出。PSEN 片外程序存储器选通信号,低电平有效。图3-1 单片机系统电路3.2 74HC595列锁存电路3.2.1 74HC59574HC595是一款漏极开路输出的CMOS移位寄存器,输出端口为可控的输出端,亦能串行输出控制下一级联芯片。74595的引脚分布:QA-QH: 八位并行输出端,可以直接控制数码管的8个段。QH: 级联输出端。我将它
16、接下一个595的SI端。SI: 串行数据输入端。/SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。SCK(11脚):上升沿时数据寄存器的数据移位。QA-QB-QC-.-QH;下降沿移位寄存器数据不变。RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低点平,当移位结束后,在RCK端产生一个正脉冲,更新显示数据。/G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。表3-1-1 74HC595管脚定义管脚编号管脚名说明
17、15、1、2、34、5、6、7QA-QH三态并行输出管脚8GND电源地9SQH串行输出级联端10SCLR移位寄存器清零端11SCK移位时钟线12RCK输出锁存线13OE输出使能14SI串行数据输入端15VCC电源正表3-1-2 74HC595真值表输入管脚输出管脚SISCKSCLRRCKOEHQAQH高阻LQAQH有效值L移位寄存器清零L上沿H移位寄存器存储LH上沿H移位寄存器存储H下沿H移位寄存器状态保持上沿移位寄存器锁存输出下沿输出存储器状态保持3.2.2. 595列输出电路图3-2 74HC595列锁存电路点阵的十六列由两片74HC595并行输出提供。引脚SI为串行数据输入端,与单片机串
18、口RXD(P3.0)相连,用来传送数据;引脚SCK为移位寄存器的移位时钟脉冲线,与单片机串口TXD(P3.1)相连;引脚SCLR信号是移位寄存器的清零输入端,低电平有效,接单片机P1.5口;RCK是输出寄存器的输出锁存信号,与单片机P1.6口连接。 3.3 8乘8点阵点阵内部结构如下,8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,
19、那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。因此,要在点阵屏幕上显示出设计好的汉字、图像、字符等就必需采用扫描亮点的方式,利用人的视觉暂留,显示出清晰、稳定的画面。图3-4 8乘8点阵内部组成4系统软件设计显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。可把显示屏的软件系统分成两大层:第一层是底层的显示驱动程序,第二层是上层的系统应用程序。显示驱动程序负责向屏体送显示数据,并负责产生扫描信号和其他控制信号,配合LED显示屏的扫描显示工作。显示驱动程序由定时器T0中断程序实现
20、,系统的显示效果处理等工作,由主程序来实现。4.1 显示驱动程序进入中断扫描程序后,对单片机重新赋初值,读取当前所在行号,并使其加一,通过串口取出缓冲区的列数据到移位寄存器。为消除在切换下一行时发生拖尾现象,驱动程序先要关掉显示屏,等显示数据经过移位寄存器输出并锁存,再输出新的行号,再打开显示屏。图4-1中断程序流程图4.2系统主程序进入主程序后,首先对系统进行初始化,包括设置定时器工作方式,串口,中断,以及显示效果,包括左移,上移等。通过一维数组dispram32来实现列驱动数据的存储,二维数组Bmp存储所有要显示汉字图形的列代码。系统上电后,汉字以上移的形式显示,当显示到第五个汉字时,停顿
21、三秒,汉字再以左移的形式显示,到最后一个字时停止。从上至下显示汉字开始从左至右显示汉字是否显示到第五个汉字结束YN图4-2 主程序流程图5.调试5.1 硬件调试由于点阵需要16行和16列来驱动,所以点阵模块线路比较复杂,当元件都焊接好以后,应先从较简单的模块进行检查调试:单片机最小系统,74LS154译码电路,74HC595列驱动电路,最后才是点阵的连接。具体检测单片机晶振能否正常起振,30脚是否有1Mhz的方波输出,74LS154的各行输出的电平是否逐位变化,74HC595的SI端是否有数据输入,其他控制引脚的脉冲和时序是否正常,都没有问题后细心检查点阵的各行各列的连接。总的来说,硬件的调试
22、是比较麻烦的。对点阵显示屏系统进行测试,所用测试仪表仪器如表5-1所示。表5-1 测试仪表测试仪表名称 型号 模拟示波器 LS3102B 20MHz 信号发生器 AFG3102 万用表 UNFTNT56根据本系统设计电路图进行组装电路,电路组装好以后,首先要检查一遍接线情况,在确定安装接线无误的情况下,就可进行电路通电调试。首先测量电源供电情况是否达到要求;其次是本次设计的点阵屏显示模块的检测是否正确,显示的汉字、字符、图像是否清晰无闪烁;再者是利用软件方式,只测试显示固定不动的画面是否能正常工作;最后测试的行扫描和列扫描模块电路,将行扫描和列扫描的扫描信号线接到信号源上,用信号源输出波形代替
23、单片机控制系统模块发出的行扫和列扫的信号,在单独对点阵屏显示电路模块进行调试,当准确的显示出要移动显示的汉字、字符、图像时即可证明此行扫描电路模块和列扫描电路模块工作正常,可以进行整个系统的调试工作。将所有的模块电路综合成一个整体的系统,通电进行测试工作,在软件上小心的调试,尽力将参数调整到最优,通过多次测量和在不同的光线的环境中测量显示的画面的情况,实现了该系统的稳定清晰的显示汉字、字符、图像任务,完全达到了设计的预想,满足了设计系统的要求。此时证明本系统设计成功。5.2 软件调试软件部分的调试主要是显示屏刷新屏幕的时间,进入中断程序后都要对定时器进行重新赋值,以保证屏幕的刷新的稳定,清晰。
24、定时器T0采用工作方式1,即16位定时器模式,通过计算可得,TH0= 0xfb,TL0=0xee。这样每经过1ms,单片机就中断一次,即每次刷新屏幕的频率大概65hz(对于12M晶振),达到人眼视觉暂留的效果。5.3 系统总电路图5-3 系统总仿真图在仿真图中,行线直接用反相器输出驱动点阵的行,由于仿真中不考虑芯片的带负载能力,所以可以仿真,但是实际情况下,每一行的驱动电流远远大于反相器的驱动电流。因此译码器的每行输出必须接三极管,使得点阵的每一行获得足够的驱动电流。6总结16乘16点阵显示屏的设计从电路的设计,仿真,硬件连接,调试和软件的调试是一个完整的电路设计过程。在整个过程中,点阵设计涉
25、及三个问题,第一:单片机I/O口地使用,52单片机共有32个I/O口,而点阵有16行,16列,如果都用I/O口驱动,那么很浪费I/O资源,考虑到点阵的16行是逐行扫描的,那么4线16线译码器就可以很好地作为点阵的行驱动器,这样只要利用单片机的4个I/O口。另外,把单片机的串口当并口用,即利用单片机的串口搭配串入并出的移位寄存器-74HC595,它的并口输出就可以作为点阵的16个列驱动线。那么仅用两条线,串口发送和接收线,就可以完成点阵16列的驱动;第二:行驱动电流问题,由于使用的是共阳的点阵,所以每一行的电流应该能同时点亮16个二极管,大概要达到320mA。那么肯定要用三极管来放大每一行的电流
26、来驱动点阵的每一行;第三:16乘16点阵的级联,采用4块8乘8点阵拼接而成,那么上面两个点阵的每一行都要连接到一起,下面同上,左边的两个点阵的每一列都连接在一起,右边同上。这样16乘16点阵的使用和8乘8点阵一样。16乘16点阵的设计就很好地解决了这些问题。在硬件调试中,也遇到了以前从未有的问题:点阵显示模糊的汉字图形,但是显示易受外界影响。细细考虑之后,知道点阵每一行显示数据时,列数据的更新时间是1ms,那么串行信号的输入线(RXD),595移位时钟线(TXD),易受到其他信号线的影响,所以两条线与74HC595的连接必须用锡丝连接。这样才能让点阵稳定地显示。现在市面的广告牌都是用基本的16
27、乘16点阵组成,通过这次16乘16点阵显示屏的设计,我清楚地了解并掌握了它的显示原理和电路实现,相信能为以后学习功能更强大的单片机,设计大屏幕LED显示屏奠定良好的基础。参考文献1 张齐,朱西宁.单片机应用系统设计技术基于C51的Proteus仿真 M .北京:电子工业出版社,2009.12 张惠敏.数字电子技术 M .北京:化学工业出版社,2009.3 华强.电子世界.基于8051单片机的数控电源设计 EB/OL .4 周雪.模拟电子 技术 M .西安:西安电子科技大学出版社,2007.5 梅笙,李玮.基于A T89C52控制的数控直流电流源的设计J .6 童诗白,华成英.模拟电子技术基础(
28、第四版) 北京:清华大学电子教研室组编.20087 阎石. 数字电子技术基础(第四版).北京:清华大学电子学教研室组编 2005.12 全书8 黄贤武,郑筱霞,曲波等. 传感器实际应用电路设计M. 成都:电子科技大学出版社.1997.4-10.9 忠梅. 单片机的C语言应用程序设计M. 北京:北京航空航天大学出版社,199710 陈光东编著单片微型计算机原理及其C语言程序设计.华中科技大学出版社 ,2004年4月11 宏晶公司.STC89C52单片机数据手册Z12 方佩敏.新编传感器原理、应用、电路详解. 编著电子工业出版社,2004.1013 樊昌元,丁义元. 高精度测距雷达研究.电子测量与
29、仪器学报,2010.1014 苏伟,巩壁建.超声波测距误差分析.传感器技术,2004.15 恒清,张靖.加强单片机系统抗干扰能力的方法.通化师范学院学报,2004 .1016 胡萍.超声波测距仪的研制.计算机与现代化,2003.1017 苏长赞.红外线与超声波遥控.北京:人民邮电出版社,1993.718 张谦琳.超声波检测原理和方法.北京:中国科技大学出版社,1993.10附录:软件C代码滚动显示学号和时间 #include #include #define NOP() _nop_() / 定义空指令 ,这个函数在库 中/SPI IOsbit MOSIO = P34;sbit R_CLK =
30、P35;sbit S_CLK = P36;/变量声明unsigned long column; /点阵列unsigned long row; /点阵行unsigned long dt;/点阵显示数组unsigned char code tab0 = 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0
31、x00, 0x80, 0x00; unsigned char code tab1 = 0,0,0,0,0,0,8,0,14,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,62,0,0,0,0,0,0,0;unsigned char code tab2 = 0,0,0,0,0,0,8,0,15,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,63,0,0,0,0,0,0,0;unsigned char code tab3 = 0,0,0,0,0,0,24,0,36,0,66,0,66,0,66,0,66,0,66,0,66,0,36,0,24,0,0,0,0,0,0,0
32、;unsigned char code tab4 = 0,0,0,0,0,0,16,0,16,0,24,0,20,0,18,0,18,0,127,0,16,0,16,0,124,0,0,0,0,0,0,0;unsigned char code tab5 = 0,0,0,0,0,0,24,0,36,0,66,0,66,0,66,0,66,0,66,0,66,0,36,0,24,0,0,0,0,0,0,0;unsigned char code tab6 = 0,0,0,0,0,0,8,0,15,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,63,0,0,0,0,0,0,0;unsig
33、ned char code tab7 = 0,0,0,0,0,0,60,0,66,0,66,0,64,0,32,0,16,0,8,0,4,0,66,0,126,0,0,0,0,0,0,0;unsigned char code tab8 = 0,0,0,0,0,0,8,0,15,0,8,0,8,0,8,0,8,0,8,0,8,0,8,0,63,0,0,0,0,0,0,0;unsigned char code tab9 = 0,0,0,0,0,0,126,0,2,0,2,0,58,0,70,0,64,0,64,0,66,0,66,0,60,0,0,0,0,0,0,0;unsigned char c
34、ode tab10 = 16,0,208,63,8,16,8,16,204,19,74,18,72,18,72,18,72,18,200,19,72,16,8,16,8,16,8,28,0,0,0,0;unsigned char code tab11 = 0,8,238,4,170,30,170,18,170,22,238,18,170,26,170,2,238,62,170,32,170,46,170,32,172,32,208,24,0,0,0,0;unsigned char code tab12 = 72,8,144,4,0,2,254,63,32,2,144,4,136,8,246,5
35、5,128,0,128,0,252,31,128,0,128,0,128,0,0,0,0,0;unsigned char code tab13 = 16,2,16,2,8,62,124,33,196,32,68,32,68,34,124,36,68,36,68,32,68,32,68,32,124,32,68,24,0,0,0,0;unsigned char code tab14 = 72,8,144,4,0,2,254,63,2,32,2,32,248,7,0,2,128,1,254,63,128,0,128,0,128,0,224,0,0,0,0,0;unsigned char code
36、tab15 = 248,15,8,8,8,8,248,15,0,0,0,0,254,63,32,0,16,0,248,15,0,8,0,8,0,8,0,6,0,0,0,0;/函数声明void HC595SendData( unsigned char BT3, unsigned char BT2,unsigned char BT1,unsigned char BT0);/*主函数*/void main(void) int k,i,j,ms; unsigned char *p = tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8, tab9, tab10
37、, tab11, tab12, tab13, tab14, tab15; while(1) for(i = 0; i 0; ms-)/显示32次,即肉眼可识别的停留时间 for(k = 0; k 16; k+)/显示一个字 HC595SendData(*(p0 + 2*(k+j) + 1),(*(p0 + 2*(k+j) ),tab02*k,tab02*k + 1); HC595SendData(0xff,0xff,0,0); /清屏 j+; if(j=15*15) j = 0;/* 函数名称: HC595SendData 功能描述: 向SPI总线发送数据 */void HC595SendDa
38、ta( unsigned char BT3, unsigned char BT2,unsigned char BT1,unsigned char BT0) unsigned char i; for(i = 0; i 23 ) if(BT0 15 & i 24 ) if(BT1 (i - 16) & 0x80) / 最高位与SendVal左移的最高位 进行逻辑运算 MOSIO = 1; / 如果为真 MOSIO = 1else MOSIO = 0; else if(i 7 ) if(BT2 (i - 8) & 0x80) MOSIO = 1; else MOSIO = 0;else if(BT3
39、 i) & 0x80) / 最高位与SendVal左移的最高位 进行逻辑运算 MOSIO = 1; / 如果为真 MOSIO = 1else MOSIO = 0; S_CLK = 0;NOP(); /产生方形波S_CLK = 1; R_CLK = 0; /set dataline low NOP(); /产生方形波 R_CLK = 1; /片选年的代码16,0,16,0,240,31,8,1,4,1,242,15,16,1,16,1,16,1,254,63,0,1,0,1,0,1,0,1,0,0,0,0;月的代码240,31,16,16,16,16,16,16,240,31,16,16,16,
40、16,16,16,240,31,16,16,16,16,8,16,8,16,4,28;日的代码252,31,4,16,4,16,4,16,4,16,4,16,252,31,4,16,4,16,4,16,4,16,4,16,252,31,4,16; 圆圈缩小#include #include #define NOP() _nop_() / 定义空指令 ,这个函数在库 中/SPI IOsbit MOSIO = P34;sbit R_CLK = P35;sbit S_CLK = P36;/变量声明unsigned long column; /点阵列unsigned long row; /点阵行uns
41、igned long dt;/点阵显示数组unsigned char code tab0 = 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00; unsigned char code tab1 = 224,7,16,8,8,16,4,32,2,64,1,128,1,1
42、28,1,128,1,128,1,128,1,128,2,64,4,32,8,16,16,8,224,7;unsigned char code tab2 = 0,0,224,7,16,8,8,16,4,32,2,64,2,64,2,64,2,64,2,64,2,64,4,32,8,16,16,8,224,7,0,0;unsigned char code tab3 = 0,0,0,0,192,3,32,4,16,8,8,16,4,32,4,32,4,32,4,32,8,16,16,8,32,4,192,3,0,0,0,0;unsigned char code tab4 = 0,0,0,0,0,0,192,3,32,4,16,8,8,16,8,16,8,16,8,16,16,8,32,4,192,3,0,0,0,0,0,0;unsigned char code tab5 = 0,0,0,0,0,0,0,0,128,1,64,2,32,4,16,8,16,8,32,4,64,2,128,1,0,0,0,0,0,0,0,0;unsigned char code tab6 = 0,0,0,0,0,0,0,0,0,0,128,1,64,2,32,4,32,4,64,2,128,1