1、河南大学物理与电子学院开放实验室单片机设计报告LED 点阵心形流水灯礼品设计设计人:开放实验室入室人员II目 录0 前言 11 系统组成与功能.11.1 系统组成 11.1.1 AT89C51单片机 11.1.2 16乘 16点阵 21.2 系统功能 32 系统原理 .32.1 系统仿真图 .32.2 实物照片 .43 程序流程图64 程序代码.75 结论 14参考文献 141基于单片机控制心形流水灯跟点阵0 前言随着社会的发展,单片机得到了广泛的应用,人们越来越重视单片机的应用。比如温度是和每个人息息相关的,并且在有的生产车间里还要进行温度时时测量,甚至是对温度的进一步调控等,这些都是单片机
2、的应用之例。本设计是用单片机和点阵加一个小的流水灯电路,作为玩具挺有趣的。这次的作品,初衷是希望通过单片机学习,做个生日礼物送给朋友。由于时间紧迫,做的有些仓促,望原谅。1 系统组成与功能1.1 系统组成本系统主要有 AT89C51单片机、18b20、1602、蜂鸣器、四位一体七段数码管等元件组成。1.1.1 AT89C51单片机AT89S51具有如下特点:40 个引脚,8k Bytes Flash片内程序存储器,256 bytes 的随机存取数据存储器(RAM) ,32 个外部双向输入/输出(I/O)口,5 个中断优先级 2层中断嵌套中断,2 个 16位可编程定时计数器,2个全双工串行通信口
3、,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S52 设计和配置了振荡频率可为 0Hz并可通过软件设置省电模式。空闲模式下,CPU 暂停工作,而 RAM定时计数器,串行口,外中断 系统可继续工作,掉电模式冻结振荡器而保存 RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。引脚图如图 1-1所示。1.1.2 16 乘 16 点阵显示模块本点阵屏采用 4 块 8*8 点阵组合,形成一个 16*16 的点阵,加驱动集成电路 SN74HC164和 74HC595组成。通过软件控制,本屏以动态扫描的显示方式,可显示文字、图形、动画等多种花样。图 1-1 AT89C51 引脚图21、 SN7
4、4HC164 是串行移位寄存器,串行输入并行输出,当清零端 CLR为高电平时,每来一个时钟脉冲 CLK寄存器中的数据就会从 Qa向 Qh方向移动一位,即 QaQb、QbQc、QcQd、QdQe、QeQf、QfQg、QgQh,同时两个输入端 A和 B与非的结果进入 Qa,SN74HC164 的逻辑功能如图 1-2 所示。图 1-2 SN74HC164的逻辑功能图2、 74HC595 有一个 8位串行输入,并行输出的移位寄存器,该寄存器向一个 8位 D型存储寄存器提供数据。74HC595N 的存储寄存器具备三态输出。移位寄存器和存储寄存器分别有独立的时钟。74HC595N 的移位寄存器带有最高优先
5、级的直接清零端(SRCLR) 、串行输入端(SER)和用于级联的串行输出端。当输出使能端(OE)为高时,74HC595 的输出将处于高阻态。不管是移位寄存器时钟(SRCLK)还是存储寄存器时钟(RCLK) ,都是上升沿触发。如果当两个时钟绑定在一起时,则移位寄存器将一直领先存储寄存器一个时钟脉冲。SN74HC595特性:8 位串行输入,并行输出移位;宽工作电压范围:2.06.0 V 高强度电流三态输出,最多可驱动高达 15个 LSTTL负载;低功耗,最大 ICC =80A;典型 tpd=13 ns;5V 下驱动电流为6 mA;移位寄存器可直接清零低输入电流,最大 1A;8 位移位寄存器,具有三
6、态输出锁存。最后,集成了 74HC595、74HC154 的点阵实物图见图 1-3所示。3、点阵主要技术参数: 显示容量:16*16 个字符3芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V4、引脚功能说明VCC 5V电源GND 接地DS 串行数据输入STcp 并行数据输出时钟 SHcp 串行数据输入时钟 CS 选择器使能 A0-A3 16 位数据选择器输入不算电源线,共 8线,算电源为 10线。本点阵已将驱动集成电路74HC595、74HC154 等放在点阵后面了,引入 10线及信号即可显示。2 系统设计2.1 系统设计方案利用 TC89C52RC单片机
7、,16*16 点阵 LED,74HC164N 和 74HC595N芯片,TIP127三极管组成的汉字点阵显示系统。本系统主要分成屏体和控制器两大部分。屏体的主要部分是 LED点阵,还有行列驱动电路。LED 点阵屏采用16*16LED显示模块连接而成。一块 16行 16列显示屏,其 LED发光器件数量相当大,不适合使用静态驱动电路,而采用动态扫描驱动电路。扫描驱动电路采用多行的同名列共用一套驱动器,行驱动器一行的行线连接到电源的一端,列驱动器一列的列连接到电源的另一端。控制电路负责有序地选通各行,选通每一行之前还要把该行该列的数据准备好,一旦该行选通,这一行上的 LED发光器件就可以根据列数据进
8、行显示。本系统的控制电路采用单片机方法,由于单片机的 I/O口数量少,驱动能力不强,则要扩展一定的硬件电路,才能满足显示屏的需要。硬件电路大体上可分为单片机控制器、LED 显示屏行列驱动电路、LED 点阵屏三部分,LED 显示屏驱动电路使用通用的数字电路并尽量减少外围硬件,做到电路简单、适应性强、成本不高、维护方便等要求。图 1-3 点阵实物图4为了增强汉字点阵的显示效果,LED汉字点阵显示系统也可以有多种显示模式。最简单的显示模式是静态显示。同静态显示模式相对应有多种动态显示模式,它们所显示的文字是动态的。按照文字运动的特点可以分为平移、闪烁、旋转、缩放等多种显示模式。产生不同显示模式的方法
9、可以通过一定的算法从原来的显示数据产生。不过当算法太复杂时就会太浪费时间,也可以考虑预先生成刷新数据,存储备用。本系统采用动态显示的模式,所谓的动态显示模式是指逐行轮流点亮。我们把所有的同一行发光管的阳极连接在一起,把所有第一列发光管的阴极连接一起,先送出对应第一行的发光管亮灭的数据并且锁存,然后选通第一行使其点亮一定的时间然后熄灭;再送出第二行的数据并且锁存,然后宣统第二行使其点亮同样的时间,然后熄灭;直到第第十六行显示完后再重新点亮第一行,这样反复轮回。如图2所示。单片机行扫描LED 点阵屏列扫描图2 系统的整体结构图2.2 点阵部分程序流程图52.3 流水灯部分基于单片机的流水灯是一个小
10、设计,其原理就不详细说明。单片机 1(左)控制流水灯,单片机 2(右)控制点阵。下面是系统连线图:图 21 系统电路连线图2.2 实物照片具体的实物照片如下图6实物图一实物图二7图 23 实物照片图三3 合并程序流程图开始点阵依次显示 葛静宝宝生日快乐心形流水灯一个接一个亮起84 部分程序源代码点阵单片机程序/*/#include#define uchar unsigned char#define uint unsigned intuchar N=7; / N 表示有多少个汉字, 如要加多个字,只需改动 N 的值即可sbit DS=P10; /74HC595 串行数据sbit STcp=P11
11、; /74HC595 并行输出时钟sbit SHcp=P12; /74HC595 串行时钟sbit CS=P13; /74HC154 输出有效信号/=P2 口作为 74HC154 的选择控制数据输入=点阵流动显示生日快020406080100第 一 季 度 第 三 季 度东 部西 部北 部返回开始心形流水灯全亮然后全灭心形流水灯一个间隔一个亮起9/=P2 口整体控制 A0-A4,所以无需单独控制每个信号=/sbit A0=P30;/sbit A1=P31;/sbit A2=P32;/sbit A3=P33;/=字模表=/=取模方法:阴码,逆向,逐行=/=uchar code Hanzi=/*0
12、x60,0x02,0x1C,0x0A,0x10,0x12,0x10,0x12,0x10,0x02,0xFF,0x7F,0x10,0x02,0x10,0x12,0x70,0x14,0x1C,0x0C,0x13,0x04,0x10,0x0A,0x90,0x49,0x10,0x50,0x14,0x60,0x08,0x40,/*“我“,00x00,0x1F,0xFC,0x09,0x48,0x08,0x90,0x04,0xFC,0x7F,0x44,0x40,0x42,0x00,0xFC,0x3F,0x20,0x00,0xE0,0x0F,0x30,0x04,0xD0,0x02,0x08,0x03,0xC6
13、,0x0C,0x31,0x70,0x0C,0x20,/*“爱“,10x90,0x00,0x90,0x01,0x88,0x20,0xC8,0x7F,0x44,0x20,0x2C,0x12,0x16,0x02,0x45,0x0A,0xC4,0x12,0x44,0x12,0x24,0x22,0x24,0x62,0x14,0x22,0x84,0x02,0x04,0x01,0x00,0x00,/*“你“,2*/0x60,0x02,0x1C,0x0A,0x10,0x12,0x10,0x12,0x10,0x02,0xFF,0x7F,0x10,0x02,0x10,0x12,0x70,0x14,0x1C,0x0
14、C,0x13,0x04,0x10,0x0A,0x90,0x49,0x10,0x50,0x14,0x60,0x08,0x40,/*“我“,3*/* (16 X 16 , 宋体 )*/0x00,0x1F,0xFC,0x09,0x48,0x08,0x90,0x04,0xFC,0x7F,0x44,0x40,0x42,0x00,0xFC,0x3F,0x20,0x00,0xE0,0x0F,0x30,0x04,0xD0,0x02,0x08,0x03,0xC6,0x0C,0x31,0x70,0x0C,0x20,/*“爱“,4*/* (16 X 16 , 宋体 )*/0x90,0x00,0x90,0x01,0x
15、88,0x20,0xC8,0x7F,0x44,0x20,0x2C,0x12,0x16,0x02,0x45,0x0A,0xC4,0x12,0x44,0x12,0x24,0x22,0x24,0x62,0x14,0x22,0x84,0x02,0x04,0x01,0x00,0x00,/*“你“,5*/* (16 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00
16、,0x00,0x08,0x00,0x00,0x00,/*“!“,6*/一定要在字模后加一个清屏的字模,否则移动显示时出现乱麻0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/清屏100x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,;/=延时程序=void delay(uint N)uchar i;uint j;for(j=0;j0;i-);/=逐行测试=/=目的:查看有无坏
17、点=void display_test(uchar N)uchar i,j;for(j=0;j/*8 位将流水灯编码存于单片机程序存储中*unsigned char code LED1_shun=0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F; /顺时针点亮数据unsigned char code LED2_ni=0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE; /逆时针点亮数据unsigned int N=300;void delay(unsigned int n)14unsigned int i;unsigned char j
18、;for(i=0;i0;j-); /程序实在太长,省略一部分void main(void)unsigned char i;unsigned char LED_temp;while(1)Display_One();delay(N+N+N);Display_Two();delay(N+N+N);Display_Three();delay(N+N+N);Display_Four();delay(N+N+N);Display_Five();delay(N+N+N);Display_Six();delay(N+N+N);Display_Seven();delay(N+N+N);Display_Eight
19、();delay(N+N+N);Display_Nine();delay(N+N+N);Display_Ten();/ Display_Eleven();Display_Twelve();delay(N+N+N);5 结论通过这学期单片机的学习我学到了不少东西,学会了有的东西需要自己通过自己的努力来解决。这次单片机作品的制作学会了焊接的初步技术,以及一些查找问题的方法。软件方面由于本人的技术有限只是对别人的一些程序进行15更改,然后通过不断的调试,一步一步实现单片机的预定功能。由于本人水平有限,扩展部分做的不是太好,希望其他人能够继续改进。老师说本文文字写的较乱,建议下一次做这个实验的人能把文字再写得好点。要出实验室了没有时间了,可能下一批进开放实验室的学弟会弄得更好的。参考文献1 何立民.单片机应用技术选编M,北京:北京航空大学出版社,1998;2 何立民.单片机中级教程M,北京:北京航空大学出版社,1998;3 郭天祥.51 单片机 C语言教程M,北京:机械工业出版社,2008;4 阎石主.数字电子技术基础M,北京:高等教育出版社,1998。