LED点阵心形流水灯单片机设计
河南理工大学
开放实验室单片机设计报
LED点阵心形流水灯礼品
目录
0 前言 (1)
1系统组成与功能 (1)
1.1 系统组成 (1)
1.1.1 AT89C51单片机 (1)
1.1.2 16乘16点阵 (2)
1.2 系统功能 (3)
2系统原理 (3)
2.1系统仿真图 (3)
2.2 实物照片 (4)
3程序流程图 (6)
4程序代码 (7)
5结论 (14)
参考文献 (14)
1 基于单片机控制心形流水灯跟点阵
0 前言
随着社会的发展,单片机得到了广泛的应用,人们越来越重视单片机的应用。比如温度是和每个人息息相关的,并且在有的生产车间里还要进行温度时时测量,甚至是对温度的进一步调控等,这些都是单片机的应用之例。本设计是用单片机和点阵加一个小的流水灯电路,作为玩具挺有趣的。
这次的作品,初衷是希望通过单片机学习,做个生日礼物送给朋友。由于时间紧迫,做的有些仓促,望原谅。
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个全双工串行通信口,看门狗(WDT ) 电路,片内时钟振荡器。
此外,AT89S52设计和配置了振荡频率可
为0Hz 并可通过软件设置省电模式。空闲模式下,CPU 暂停工作,而RAM 定时计数器,串行口,外中断 系统可继续工作,掉电模式冻结振荡器而保存RAM 的数据,停止芯片其它功能直至外中断激活或硬件复位。
引脚图如图1-1所示。 管脚说明
图1-1 A T89C51引脚图
RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
PSEN:程序储存允许(PSEN)输出。是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:外部访问允许,欲使CPU只访问外部程序存储器(地址为0000H-FFFFH),EA端须保持低电平(接地)。如EA端为高电平(接VCC 端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上相应的编程允许电源VPP。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4个TTL 逻辑电平。作为输入口时要向端口写“1”。
引脚号第二功能:
P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5 MOSI(在系统编程用)
P1.6 MISO(在系统编程用)
P1.7 SCK(在系统编程用)
P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4个TTL逻辑电平。同样作为输入使用时先向该端口写“1”。
P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4个TTL逻辑电平。作为输入时先向P3 端口写“1”。
端口引脚第二功能:
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INTO(外中断0)
2
P3.3 INT1(外中断1)
P3.4 TO(定时/计数器0)
P3.5 T1(定时/计数器1)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
2.1.5 存储器结构
MCS-51器件有单独的程序存储器和数据存储器。外部程序存储器和数据存储器都可以64K寻址。
程序存储器:如果EA引脚接地,程序读取只从外部存储器开始。
对于89S52,如果EA 接VCC,程序的读写先从内部存储器(地址为0000H~1FFFH)开始,接着从外部寻址,寻址地址为:2000H~FFFFH。
数据存储器:AT89S52 有256 字节片内数据存储器。高128 字节与特殊功能寄存器重叠。也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。
当一条指令访问高于7FH 的地址时,寻址方式决定CPU 访问高128 字节RAM 还是特殊功能寄存器空间。直接寻址方式访问特殊功能寄存器(SFR)[]5。
2.1.6 中断源
AT89S52 有6个中断源:两个外部中断(INT0 和INT1),三个定时中断(定时器0、1、2)和一个串行中断。每个中断源都可以通过置位或清除特殊寄存器IE 中的相关中断允许控制位分别使得中断源有效或无效。IE 还包括一个中断允许总控制位EA,它能一次禁止所有中断。
如图2-4所示,IE.6位是不可用的。对于AT89C51,IE.5位也是不能用的。用户软件不应给这些位写1。它们为AT89系列新产品预留。
符号位地址功能
EA IE.7 中断总允许控制位。EA=0,中断总禁止;EA=1,各中
断由各自的控制位设定
IE.6 预留
ET2 IE.5 定时器2中断允许控制位
3
ES IE.4 串行口中断允许控制位
ET1 IE.3 定时器1中断允许控制位
EX1 IE.2 外部中断1允许控制位
ET0 IE.1 定时器0中断允许控制位
EX0 IE.0 外部中断0允许控制位
图2-4 中断允许控制寄存器
1.1.2 16乘16点阵显示模块
本点阵屏采用4块8*8点阵组合,形成一个16*16的点阵,加驱动集成电路SN74HC164和74HC595组成。通过软件控制,本屏以动态扫描的显示方式,可显示文字、图形、动画等多种花样。
1、 SN74HC164是串行移位寄存器,串行输入并行输出,当清零端CLR为高电平时,每来一个时钟脉冲CLK寄存器中的数据就会从Qa向Qh方向移动一位,即Qa→Qb、Qb→Qc、Qc→Qd、Qd→Qe、Qe→Qf、Qf→Qg、Qg→Qh,同时两个输入端A和B与非的结果进入Qa,SN74HC164的逻辑功能如图1-2所示。
图1-2 SN74HC164的逻辑功能图
2、 74HC595有一个8位串行输入,并行输出的移位寄存器,该寄存器向一个8位D型存储寄存器提供数据。74HC595N的存储寄存器具备三态输出。移位寄存器和存储寄存器分别有独立的时钟。74HC595N的移位寄存器带有最高优先级的直接清零端(SRCLR)、串行输入端(SER)和用于级联的串行输出端。当输出使能端(OE)为高时,74HC595的输出将处于高阻态。
不管是移位寄存器时钟(SRCLK)还是存储寄存器时钟(RCLK),都是上升沿
4
5 触发。如果当两个时钟绑定在一起时,则移位寄存器将一直领先存储寄存器一个时钟脉冲。
SN74HC595特性:8位串行输入,并行输出移位;宽工作电压范围:2.0~6.0 V 高强度电流三态输出,最多可驱动高达15个LSTTL 负载;低功耗,最大ICC =80μA ;典型tpd=13 ns ;5V 下驱动电流为±6 mA;移位寄存器可直接清零低输入电流,最大1μA ;8位移位寄存器,具有三态输出锁存。
最后,集成了74HC595、74HC154的点阵实物图见图1-3所示。 3、点阵主要技术参数: 显示容量:16*16个字符 芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 4、引脚功能说明 VCC 5V 电源 GND 接地
DS 串行数据输入
STcp 并行数据输出时钟 SHcp 串行数据输入时钟 CS 选择器使能 A0--A3 16位数据选择器输入
不算电源线,共8线,算电源为10线。本点阵已将驱动集成电路74HC595、74HC154等放在点阵后面了,引入10线及信号即可显示。
2 系统设计
2.1 系统设计方案
利用TC89C52RC 单片机,16*16点阵LED ,74HC164N 和74HC595N 芯片,TIP127三极管组成的汉字点阵显示系统。本系统主要分成屏体和控制器两大部分。屏体的主要部分是LED 点阵,还有行列驱动电路。LED 点阵屏采用16*16LED
显示模
图1-3 点阵实物图
6 块连接而成。一块16行16列显示屏,其LED 发光器件数量相当大,不适合使用静态驱动电路,而采用动态扫描驱动电路。扫描驱动电路采用多行的同名列共用一套驱动器,行驱动器一行的行线连接到电源的一端,列驱动器一列的列连接到电源的另一端。控制电路负责有序地选通各行,选通每一行之前还要把该行该列的数据准备好,一旦该行选通,这一行上的LED 发光器件就可以根据列数据进行显示。
本系统的控制电路采用单片机方法,由于单片机的I/O 口数量少,驱动能力不强,则要扩展一定的硬件电路,才能满足显示屏的需要。硬件电路大体上可分为单片机控制器、LED 显示屏行列驱动电路、LED 点阵屏三部分,LED 显示屏驱动电路使用通用的数字电路并尽量减少外围硬件,做到电路简单、适应性强、成本不高、维护方便等要求。
为了增强汉字点阵的显示效果,LED 汉字点阵显示系统也可以有多种显示模式。最简单的显示模式是静态显示。同静态显示模式相对应有多种动态显示模式,它们所显示的文字是动态的。按照文字运动的特点可以分为平移、闪烁、旋转、缩放等多种显示模式。产生不同显示模式的方法可以通过一定的算法从原来的显示数据产生。不过当算法太复杂时就会太浪费时间,也可以考虑预先生成刷新数据,存储备用。
本系统采用动态显示的模式,所谓的动态显示模式是指逐行轮流点亮。我们把所有的同一行发光管的阳极连接在一起,把所有第一列发光管的阴极连接一起,先送出对应第一行的发光管亮灭的数据并且锁存,然后选通第一行使其点亮一定的时间然后熄灭;再送出第二行的数据并且锁存,然后宣统第二行使其点亮同样的时间,然后熄灭;直到第第十六行显示完后再重新点亮第一行,这样反复轮回。如图2所示。
图2 系统的整体结构图
2.2 点阵部分程序流程图
单 片 机
行扫描
LED 点阵屏
列扫描
2.3 流水灯部分
基于单片机的流水灯是一个小设计,其原理就不详细说明。
单片机1(左)控制流水灯,单片机2(右)控制点阵。
下面是系统连线图:
图2—1 系统电路连线图
7
2.2实物照片
具体的实物照片如下图
实物图一
实物图二
8
9
图2—3 实物照片图三
3 合并程序流程图
开始
点阵依次显示 葛静宝宝生日
心形流水灯一个接一个亮起
10
4 部分程序源代码 点阵单片机程序
/**********************************************************************/ #include
#define uchar unsigned char #define uint unsigned int
uchar N=7; // N 表示有多少个汉字, 如要加多个字,只需改动N 的值即可
sbit DS=P1^0; //74HC595串行数据 sbit STcp=P1^1; //74HC595并行输出时钟 sbit SHcp=P1^2; //74HC595串行时钟 sbit CS=P1^3; //74HC154输出有效信号
//=============P2口作为74HC154的选择控制数据输入=================
点阵流动显示生日快
20406080100第一季度
第三季度
东部西部北部
返回开始
心形流水灯全亮然后全灭
心形流水灯一个
间隔一个亮起
//=============P2口整体控制A0--A4,所以无需单独控制每个信号===========
//sbit A0=P3^0;
//sbit A1=P3^1;
//sbit A2=P3^2;
//sbit A3=P3^3;
//===========================字模表==============================
//================取模方法:阴码,逆向,逐行========================
//==============================================================
uchar code Hanzi[]=
{
/*
0x60,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,//*"我",0
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,//*"爱",1
0x90,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,0x0C,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,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,/*"你",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,0x00,0x08,0x00,0x00,0x00,/*"!",6*/
//一定要在字模后加一个清屏的字模,否则移动显示时出现乱麻
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//清屏
11
0x00,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;j for(i=125;i>0;i--); } //=====================逐行测试============================== //=================目的:查看有无坏点======================== void display_test(uchar N) { uchar i,j; for(j=0;j<100;j++) { DS=0; //整行显示 for(i=0;i<16;i++) { SHcp=0; SHcp=1; } STcp=0; STcp=1; P3=N; CS=0; delay(10); //本程序太长,省去部分,需要完整程序请 CS=1; //联系QQ154401855(或154401856)下载 } } //++++++++++++++++++++++++++++++静态显示+++++++++++++++++++++++++++++++ //====================++++++++++显示程序=============================== // N表示传递过来的第几个文字,一个文字占32个字节,所以M为32的倍数 //===================================================================== void display_state(uchar M) { uchar i,j,n,cont=0; uchar temp; for(n=0;n<50;n++) //重复显示50次,以便能清楚显示 { for(i=0;i<16;i=i+2) { temp=~Hanzi[M+i+16]; //取一字模数据存放于temp,高8位 12 //进行8次转换,使8位并行数据转换为串行数据 for(j=0;j<8;j++) { if(temp&0x80) //并行数据转为串行数据,高位在前 DS=1; else DS=0; SHcp=0; SHcp=1; //SHcp上升沿锁存一位数据 temp=temp<<1; //左移一位,进行下一次转换 } temp=~Hanzi[M+i]; //取一字模数据存放于temp,低8位//进行8次转换,使8位并行数据转换为串行数据 for(j=0;j<8;j++) { if(temp&0x80) //并行数据转为串行数据,高位在前 DS=1; else DS=0; SHcp=0; SHcp=1; //SHcp上升沿锁存一位数据 temp=temp<<1; //左移一位,进行下一次转换 } STcp=0; STcp=1; //STcp上升沿使8位数据并行输入 P3=cont; //cont计数器作为74HC154的选择信号,由P2口输出 CS=0; //74HC154 使能,开启显示 delay(2); //延时一下,以便有足够的点亮时间 CS=1; //关显示,不关显示会出现花屏现象 cont++; //cont计数器加一 } for(i=1;i<16;i=i+2) { temp=~Hanzi[M+i+16]; for(j=0;j<8;j++) { if(temp&0x80) DS=1; else DS=0; SHcp=0; SHcp=1; temp=temp<<1; 13 } temp=~Hanzi[M+i]; for(j=0;j<8;j++) { if(temp&0x80) DS=1; else DS=0; SHcp=0; SHcp=1; temp=temp<<1; } STcp=0; STcp=1; P3=cont; CS=0; delay(2); CS=1; cont++; } for(i=0;i<16;i++) { DS=0; SHcp=0; SHcp=1; //SHcp上升沿锁存一位数据 } cont=0; CS=1; } } //+++++++++++++++++++动态显示文字++++++++++++++++++++++++ void display_move(void) { uchar i,j,n,cont=0; uchar temp,hang; for(hang=0;hang<32*N;hang=hang+2) //每次上移一行,即实现动态移动显示效果{ for(n=0;n<10;n++) { ……//程序太长,省略一部分,需要完整程序请 } //联系QQ154401855(或154401856)下载 } } 14 } //=========================主函数=============================== void main(void) { uchar i; P1=0xFF; P2=0xFF; while(1) { /* for(i=0;i<16;i++) //16行点阵测试 { display_test(i); delay(100); } */ for(i=0;i<32*N;i=i+32) //静态汉字显示 { display_state(i); delay(1000); } display_move(); //动态汉字显示 } } } } 流水灯阵程序 /**********************************************************************/ #include //************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) 15 { unsigned int i; unsigned char j; for(i=0;i for(j=100;j>0;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(); delay(N+N+N); Display_Nine(); delay(N+N+N); Display_Ten(); // Display_Eleven(); Display_Twelve(); delay(N+N+N); } } 5 结论 通过这学期单片机的学习我学到了不少东西,学会了有的东西需要自己通过自己的努力来解决。这次单片机作品的制作学会了焊接的初步技术,以及一些查找问题的方法。软件方面由于本人的技术有限只是对别人的一些程序进行更改, 16 然后通过不断的调试,一步一步实现单片机的预定功能。 由于本人水平有限,扩展部分做的不是太好,希望其他人能够继续改进。老师说本文文字写的较乱,建议下一次做这个实验的人能把文字再写得好点。要出实验室了没有时间了,可能下一批进开放实验室的学弟会弄得更好的。 参考文献 [1]何立民.单片机应用技术选编[M],北京:北京航空大学出版社,1998; [2] 何立民.单片机中级教程[M],北京:北京航空大学出版社,1998; [3] 郭天祥.51单片机C语言教程[M],北京:机械工业出版社,2008; [4] 阎石主.数字电子技术基础[M],北京:高等教育出版社,1998。 17 **大学 物理学院 单片机花样流水灯设计实验 课题:花样流水灯设计 班级: 物理 *** 姓名: *** 学号: …………… 当今时代的智能控制电子技术,给人们的生活带来了方便和舒适,而每到晚上五颜六色的霓虹灯则把我们的城市点缀得格外迷人,为人们生活增添了不少色彩。 制作流水灯的方法有很多种,有传统的分立元件,由数字逻辑电路构成的控制系统和单片机智能控制系统等。本设计介绍一种简单实用的单片机花样流水灯设计与制作,采用基于MS-51的单片机AT89C51和发光二极管、晶振、复位、电源等电路以及必要的软件组成的以AT89C51为核心,辅以简单的数码管等设备和必要的电路,设计了一款简易的流水灯电路板,并编写简单的程序,使其能够自动工作。 本设计用AT89C51单片机为核心自制一款简易的花样流水灯,并介绍了其软件编程仿真及电路焊接实现,在实践中体验单片机的自动控制功能。该设计具有实际意义,可以在广告业、媒体宣传、装饰业等领域得到广泛应用。 关键字:AT89C51 单片机流水灯数码管 1. 单片机及其发展概况 单片机又称为单片微计算机,其特点是将微型计算机的基本功能部件(如中央处理器(CPU)、存储器、输入接口、输出接口、定时/计数器及终端系统等)全部集成在一个半导体芯片上。单片机作为一种高集成度微型计算机,已经广泛应用于工业自动化控制、智能仪器仪表、通信设备、汽车电子与航空航天电子系统、智能家居电器等各个领域。 2. Protues仿真软件简介 Protues以其数量众多的元件数据库、标准化的仿真仪器、直观的捕获界面、简洁明了的操作、强大的分析测试、可信的测试结果, 为电子工程设计节约研发时间,节省了工程设计费用。利用Protues软件设计一款通过数码管显示计数时间的流水灯电路及Keil C软件编程后,再将两者关联则可以简单快速的进行仿真。 【实验设计目标】 设计要求以发光二极管作为发光器件,用单片机自动控制,对8个LED 灯设计至少3种流水灯显示方式,每隔20秒变换一次显示花样,计时通过一个二位七段数码管显示。 井冈山大学 机电工程学院 单片机 课程设计报告 课程名称:单片机 设计题目:心形流水灯 姓名:玉红 专业:生物医学工程 班级:11级医工本一班 学号:110615017 指导教师:王佑湖 2013年11月27日 目录 1引言 (2) 1.1设计任务 (2) 1.2设计要求……………………………………………… ..2 2 课题综述 (2) 2.1课题的来源 (2) 2.2面对的问题 (2) 3 系统分析 (2) 3.1 STC89C52单片机引脚图及引脚功能介绍 (2) 4 系统设计 (4) 4.1硬件设计 (4) 4.1.1硬件框图 (4) 4.1.2硬件详细设计 (5) 4.2 软件设计 (5) 4.3 硬件原理图 (6) 4.4 元件清单 (6) 4.5 硬件焊接 图 (6) 4.6 代码编写 (7) 5心得体会 (7) 6致 (8) 参考文献 (8) 1 引言 单片机课程设计主要是为了让我们增进对STC89C51单片机电路 的感性认识,加深对理论方面的理解。了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目 的。 1.1设计任务 设计一个单片机控制的流水灯系统 1.2设计要求 (1)32个LED灯; (2)可实现多种的亮灯(如左循环,右循环,间隔闪,90度交叉闪等)。 2 课题综述 2.1 课题的来源 当今社会,这种由单片机芯片控制各种硬件工作的技术也日益成熟,并普及在交通、化工、机械等各个领域。而流水灯这项技术在生活中的应用更是广泛,较为贴近生活。而流水灯控制的设计所需要的知识也正好吻合了我们本学期对于单片机这门课程的学习,所以设计流水灯控制的这个课题让我们对知识的学习和巩固都有了进一步的加深。 2.2 面对的问题 这次课程设计是通过STC89C52位单片机实现。但面对的问题却是两方面的:一个是软件的设计,也就是实现流水灯控制功能的程序编辑;另一个是硬件的设计,需要我们自己连接、焊接电路板。而更为严峻的就是设计的最后还要将软硬件相结合。 3 系统分析 3.1 STC 89C52单片机引脚图及引脚功能介绍 本次设计的目的在于加深STC89C52单片机的理解,首先来简单认识一下,它的引脚如图3-1所示: 图3.1 STC89C52 流水灯实习报告 一、实验原理 单片机通过P0口连接锁存器74ls273,P0同时作为低八位地址,实验板内P2口连接74ls138,任意一个输出连接74ls273片选,再将74ls273接八个LED灯,通过软件控制对74ls273送入显示数据就可以按要求显示了。 二、硬件原理图 三、实验程序 ORG 0000H AJMP START ORG 001BH AJMP INT ORG 0100H START:MOV SP,#60H MOV TMOD,#10H MOV TL1,#00H MOV TH1,#4CH MOV R0,#00H MOV R1,#20 SETB TR1 SETB ET1 SETB EA SJMP $ INT:PUSH ACC PUSH PSW PUSH DPL PUSH DPH CLR TR1 MOV TL1,#B0H MOV TH1,#3CH SETB TR1 DJNZ R1,EXIT MOV R1,#20 MOV DPTR,#DATA MOV A,R0 MOVC A,@A+DPTR MOV DPTR,#8000H Movx @DPTR,A INC R0 ANL 00,#07H EXIT:POP DPH POP DPL POP PSW POP ACC RETI DATA:DB 05H,0AH,50H,0A0H,55H,0AAH,0FFH,0H END 四、实验功能 以实验机上74LS273做输出口,接八只发光二极管,编写程序,使开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮……一直循环下去. 五、实验总结 通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。而安排课程设计的基本目的,是在于通过理论 课程设计(论文)说明书 题目:心形流水灯 院(系):信息与通信学院 专业:通信工程 学生姓名: 学号: 指导教师: 职称:讲师 2012年12 月1日 摘要 本论文基于单片机技术与单片机芯片AT89S51芯片功能和C语言程序,实现心形流水灯的多种亮与灭的循环。首先,我们了解单片机的一些技术,了解了单片机芯片AT89S51的一些功能;然后结合C语言编程;最后将它们运用到实际的电路,使心形LED灯实现多种亮灭方法。本论文介绍关于流水灯的运用和单片机技术;然后介绍芯片AT89S51;最后介绍运用到的相关软件.矚慫润厲钐瘗睞枥庑赖。 关键词:单片机;流水灯;C语言; Abstract This paper Based on the single chip microcomputer and single chip microcomputer chip AT89S51 chip function and C language program,Realization of flowing water light heart a variety of light and the cycle of destruction。primarily,We know some of the single chip microcomputer technology,Understanding of the single chip microcomputer chip AT89S51 of some functions, Then based on the C language programming; Finally they are applied to the practical circuit, Make heart LED lamp achieve a variety of light out method. This paper introduces about the use of flowing water light and single chip microcomputer; and then introduced chip AT89S51; At the end of this paper applied to software.聞創沟燴鐺險爱氇谴净。Key words:micro-computer;light water ;C programming language残骛楼諍锩瀨濟溆塹籟。 51单片机流水灯试验 一、实验目的 1.了解51单片机的引脚结构。 2.根据所学汇编语言编写代码实现LED灯的流水功能。 3.利用开发板下载hex文件后验证功能。 二、实验器材 个人电脑,80c51单片机,开发板 三、实验原理 单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。使用rl或rr a实现位的转换。 A寄存器的位经过rr a之后转换如下所示: 然后将A寄存器转换一次便送给P2即MOV P2,A便将转换后的数送到了P2口,不断循环下去,便实现了逐位置一操作。 四、实验电路图 五、通过仿真实验正确性 代码如下:ORG 0 MOV A,#00000001B LOOP:MOV P2,A RL A ACALL DELAY SJMP LOOP DELAY:MOV R1,#255 DEL2:MOV R2,#250 DEL1:DJNZ R2,DEL1 DJNZ R1,DEL2 RET End 实验结果: 六、实验参考程序 #include sbit P00=P0^0; sbit P01=P0^1; void delay(uchar t) { uchar i,j; for(i=0;i 基于51单片机心形流水灯C语言源程序 #include P0=0x04; delayms(50); P0=0x08; delayms(50); P0=0x10; delayms(50); P0=0x20; delayms(50); P0=0x40; delayms(50); P0=0x80; delayms(50); P0=0x00; P2=0x01; delayms(50); P2=0x02; delayms(50); P2=0x04; delayms(50); P2=0x08; delayms(50); P2=0x10; delayms(50); P2=0x20; delayms(50); P2=0x40; delayms(50); P2=0x80; delayms(50); P2=0x00; P3=0x80; delayms(50); P3=0x40; delayms(50); P3=0x20; delayms(50); P3=0x10; delayms(50); P3=0x08; delayms(50); P3=0x04; delayms(50); 51单片机实验报告 实验一 点亮流水灯 实验现象 Led灯交替亮,间隔大约10ms。实验代码 #include void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } 实验原理 While(1)表示一直循环。 循环体首先将P0的所有位都置于零,然后延时约50*10=500ms,接着P0位全置于1,于是LED全亮了。接着循环,直至关掉电源。延迟函数是通过多个for循环实现的。 实验2 流水灯(不运用库函数) 实验现象 起初led只有最右面的那一个不亮,半秒之后从右数第二个led 也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程 #include LED心形流水灯加程序 1.原件清单:一个万能板,一个底座,一个STC89C52芯片,32个LED 灯,32个贴片电阻,两个30uf电容,一个晶振。 2.原理图: 注:电源处的复位可以不用;就是上面红框里的内容 3.正面图 背面图: 亮灯图: 4. 程序代码: #include单片机花样流水灯设计实验报告
单片机课程设计报告--心形流水灯
单片机流水灯实验报告
基于单片机的心形流水灯毕业设计论文
51单片机流水灯实验报告单片机实验报告流水灯
基于51单片机心形流水灯C语言源程序
51单片机实验报告
心形LED流水灯制作方法