湘南学院
电子
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
设计
题 目: 基于单片机的花样流水灯的设计
学院(系): 电信电气学院
年级专业: 2013级电信二班
学 号:201314110220 45 40
学生姓名: 熊春峰 任梦燕 董金飞
指导教师: 王龙老师
2016 年 5月10日
课程设计任务书
学生姓名: 熊春峰 任梦燕 董金飞 专业班级: 电信二班
指导教师: 王龙老师 工作单位: 电信电气学院
题 目: 基于单片机花样流水灯的设计
初始条件:
1. 运用所学的单片机原理与接口技术知识和数字
电路
模拟电路李宁答案12数字电路仿真实验电路与电子学第1章单片机复位电路图组合逻辑电路课后答案
知识;
2. 51单片机应用开发系统一套;
3. PC机及相关应用软件。
要求完成的主要任务:
以目前传统的单一流水灯为原型进行设计,要求具有多花样点亮LED灯,形成花样流水灯。
1. 完成硬件的设计与焊接。
2. 完成程序的编写与仿真并将其在硬件电路上测试。
3. 撰写课程设计
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
书,说明书使用A4打印纸计算机打印,用Protel等绘图软件绘制电子线路图纸。
基于51单片机原理花样流水灯的设计
摘要
本设计的是一个基于单片机AT89S52的花样流水灯设计,附有复位电路,时钟电路,键盘电路等。复位电路是单片机的初始化操作,除了正常的初始化外,为摆脱困境,通过复位电路可以重新开始。时钟电路采用12MHz的晶振,作为系统的时钟源,具有较高的准确性。
在上电时数码管显示为0,LEED灯全部为灭状态,通过按键可以调整数码管的示数,当示数不为0时,流水灯会呈某种花样循环点亮。共有8种显示方式,第九种为全部的结合。在这里主要是以AT89S52单片机为核心控制器,P1口接数码管,其中P1.7接按键,P0口8个LED灯,通过按键输入。
关键词:单片机AT89C51;数码管;LED灯
目 录
前 言 1
第一章 花样流水灯系统的设计要求与设计
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
2
1.1 流水灯的设计要求 2
1.2 系统主要功能 2
1.3 方案论证与比较 2
第二章 流水灯系统的硬件设计 3
2.1振荡电路 3
2.2 复位电路设计 3
2.3 键盘接口电路 3
2.4 显示电路 4
2.5 判断按键子函数 5
2.6 LED灯与单片机电路 5
第三章proteus的简介 6
3.1 PROTEUS介绍 6
3.2 KEIL调试 7
3.3 PROTEUS调试 7
附录A:总电路图 8
附录B:原器件清单 9
附录C:流水灯部分程序 9
前 言
随着现在人口持续增长,经济的持续发展,生活水平的不断提高,人们越来越追求美的享受。LED灯起鲜艳夺目,美丽动人的光线,早已为大多数消费者喜欢,还有它价格低廉,所以花样流水灯已广泛应用于家庭、商场、舞厅等场所的装饰,及装修还有各种商业广告,具有广泛的市场前景。
因此, 本文以先进的可编程的单片机A T89S52 为核心,用软件控制硬件其控制是完全自动完成的。所以大大的减少了工作人员的工作量,提高了工作效率,成本又低,方便实用,是值得推广的方法之一。
第一章 花样流水灯系统的设计要求与设计方案
1.1 流水灯的设计要求
设计一个流水灯系统,可以实现按键控制LED灯的亮灭,含左循环、右循环,停止、复位等一系列功能于一体的单片机系统。
1.2 系统主要功能
本系统可以实现LED等的亮灭。组成了左右循环,重复点亮等功能,可以通过按键进行改变,每一种方式通过数码管的示数显示出来。以便于观察和调节。
1.3 方案论证与比较
方案一:直接使用单片机,编写延时控制程序。实现LED左右循环,一上电就自动运行整个系统。
优点:一上电就可以观察,所有的显示方式可以全部看完。
缺点:由于整个系统是自动运行的,从头到尾无法控制,不利于对某一种闪烁方式进行观察。
方案二:采用按键控制,通过按键的按压次数来控制LED灯的的闪烁时间和循环的方式,手动控制整个流水灯系统。
优点:整个系统是手动操作运行的,可以用手动随心所欲的控制,利于对某一种闪烁方式进行观察和研究。
缺点:当系统在运行时,需要人为的操作,降低工作人员的效率。
方案总结:通过各个方案的比较,两种方案都比较简单各有各的优点,但由于方案二便于手动控制和演示流水灯的系统运行情况,所以本次采用方案二。
第二章 流水灯系统的硬件设计
2.1振荡电路
单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取33pF)。这样就构成一个稳定的自激振荡器。 振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生ALE信号,此时得到的信号时机器周期信号。振荡电路如图2-1所示:
图2-1振荡电路
2.2 复位电路设计
复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位电路图如图2-2所示。
图2-2 AT89C51引脚配置
2.3 键盘接口电路
独立式键盘:独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。I/O口内部有上拉电阻时,外部可不接上拉电阻。键盘接口电路如图2-3所示:
图2-3按键接口电路
2.4 显示电路
对于现实电路我们可以采用数码管,也可以采用液晶显示,液晶显示的内容比较多。而现在我们只需要显示数字,为了减少资源的浪费,所以选择用数码管的显示。数码管的显示电路连接如图2-4所示:
图2-4 数码管的显示电路
2.5 判断按键子函数
对于独立式键盘判键,首先看有键按下不,如果有键按下则延时一会儿,在判断是否真的有键按下,如果确实有键按下,在判键释放,最后执行键功能程序。判断按键子函数的流程框图如图3-2所示:
图2-5判键子程序流程图
2.6 LED灯与单片机电路
此设计关键在于对LED灯的控制,将LED灯的正极与单片机的I/O口相连,负极直接与GND 相连,这样只要单片机的I/O口输出高电平LED灯就可以点亮,输出低电平时,LED灯不会点亮。LED灯与单片机电路图如图2-6所示:
图2-6 LED灯与单片机电路图
第三章Proteus的简介
3.1 Proteus介绍
Proteus软件是来自英国Labcenter electronics公司的EDA工具软件,它组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“The Route to PCB CAD”。Proteus 产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
其功能模块:—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARES PCB设计。PROSPICE 仿真器的一个扩展PROTEUS VSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LED甚至LCD显示CPU模型。支持许多通用的微控制器,如PIC,AVR,HC11以及8051。最新支持ARM。交互的装置模型包括:LED和LCD显示,RS232终端,通用键盘,I2C,SPI器件。强大的调试工具,包括寄存器和存储器,断点和单步模式。IAR C-SPY 和Keil uVision2等开发工具的源层调试。应用特殊模型的DLL界面-提供有关元件库的全部文件。
在完成了流水灯硬件设计和软件设计以后,便进入系统的调试阶段。系统的调试步骤和方法基本上是相同的,但具体细节和所采用的开发系统以及用户系统选用的单片机型号有关,如可选用Keil软件进行软件调试,用Proteus软件完成硬件调试。
3.2 Keil调试
使用keil编写程序,并且下载进入单片机进行调试。调试图如图3-1所示
图3-1 keil调试图
3.3 Proteus调试
编写完程序,使用proteus进行仿真,就可以知道整个系统可不可以正常运行。仿真如图3-2所示:
图3-2仿真
附录A:总电路图
附录B:原器件清单
序号
编号
型号
数量
1
单片机
STC89C51
3
2
瓷片电容
33pF
50
3
电解电容
1uF
50
4
晶振
12M
10
5
电阻
1k
100
6
发光二极管
5MM高红光
100
7
电阻
10K
100
8
排阻
10K
5
9
自锁开关
8*8MM
5
10
9V碱性电池
9V
5
11
电池盒
9V
5
12
单片机插槽
40P
10
13
USB-A接口
母座
10
14
USB数据线
公头对公头
2
15
瓷片电容
0.1uf
50
16
数码管
0.5寸
5
17
按键
6*6*5
1
18
7805三端稳压
LM7805
5
19
单排排针
2.54 单排
5
20
杜邦线
3.5
3.5
附录C:流水灯部分程序
#include
#include
#include
#include
void main()
{
while(1)
{
//P1=table[num];
keyscan();
led9();
delayms(100);
}
}
#include
#include
#include
#include
//void led9();
#define shuma P1 //修改数码管
sbit key1=shuma^7;
char table[]={0XC0,0XCF,0XA4,0XB0,0X99,
0X92,0X82,0XF8,0X80,0X90};
int num;
void keyscan()
{
shuma=table[num];
if(key1==0)
{
delayms(20);
if(key1==0)
{
num++;
if(num==10)
num=0;
shuma=table[num];
while(!key1);
led9();
}
}
}
void led9()
{ keyscan();
if(num==0)
P2=0;
if(num==1)
led1();
if(num==2)
led2();
if(num==3)
led3();
if(num==4)
led4();
if(num==5)
led5();
if(num==6)
led6();
if(num==7)
led7();
if(num==8)
led8();
if(num==9)
{
led1();
if(num==9)
led2();
if(num==9)
led3();
if(num==9)
led4();
if(num==9)
led5();
if(num==9)
led6();
if(num==9)
led7();
if(num==9)
led8();
}
}
#include
#include
#include
#include
#define IO P2 //////修改led灯
uchar data_l(uchar x,uchar y,uchar z)
{
uchar temp;
temp=x>>(y-z);
x=x<>z;
x=x | temp;
return x;
}
void led1() //0->7(亮)
{
int k=0,n=0x01;
for(k;k<8;k++)
{
keyscan();
IO=n;
n=n<<1;
delayms(200);
}
}
void led2() //7->0 (亮)
{
int k=0,n=0x80;
for(k;k<8;k++)
{
keyscan();
IO=n;
n=n>>1;
delayms(200);
}
}
void led3() //0->7 (灭)
{
int k=0,n=0xFE;
for(k;k<8;k++)
{
keyscan();
IO=n;
n=data_l(n,8,1);
//n=n<<1;
delayms(200);
}
}
void led4() //7->0 (灭)
{
int k=0,n=0x7F;
for(k;k<8;k++)
{
keyscan();
IO=n;
n=data_r(n,8,1);
//n=n>>1;
delayms(200);
}
}
void led5() //0->7(依次灭)
{
int k=0,n=0xFE;
for(k;k<8;k++)
{
keyscan();
IO=n;
//n=data_l(n,8,1);
n=n<<1;
delayms(200);
}
}
void led6() //7->0 (依次亮)
{
int k=0,n=0x80;
for(k;k<8;k++)
{
keyscan();
IO=n;
//n=data_r(n,8,1);
n=(n>>1)+0X80;
delayms(200);
}
}
void led7()
{
int k=0,n=0,n1=0x7f,n2=0xFE;
for(k;k<8;k++)
{
keyscan();
n=n1&n2;
IO=n;
n1=(int)data_r((uchar)n1,8,1);
n2=(int)data_l((uchar)n2,8,1);
// n=n<<1;
delayms(200);
}
}
void led8()
{
int k=0,n=0,n1=0X80,n2=0X01;
for(k;k<8;k++)
{
keyscan();
n=n1|n2;
IO=n;
n1=(int)data_r((uchar)n1,8,1);
n2=(int)data_l((uchar)n2,8,1);
delayms(200);
}
}