电子喷泉的设计说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
控
制
系
统
综
合
设
计
报
告
设计题目:电子喷泉的设计
设计者: 学号:
专业班级:电气工程及其自动化061班指导老师:
完成时间: 2009年6月25日
目录
一、预备知识 (1)
二、课程设计题目 (1)
三、课程设计的目的及基本的要求 (1)
四、设计容提要及说明 (2)
五、原理图及元件清单 (3)
六、单片机各引脚定义 (4)
七、系统程序流程图 (5)
八、电子喷泉设计的系统源程序 (6)
九、课程设计心得体会 (9)
十、参考文献 (11)
一、预备知识
1.1 51单片机原理
(1)51单片机的I/O口的使用原理和设置
(2)51单片机的定时器的设置
1.2 发光二极管及数码管的认识和使用
1.3 按键的判断和使用
1.4 51单片机开发环境的熟悉和使用
1.5 对于共阴/共阳数码管及发光二极管等器件的熟练使用
二、课程设计题目:电子喷泉的设计
三、课程设计的目的及基本的要求
单片机已经广泛的应用于人们的日常生活中,在各个领域中起到越来越重要的作用。因此,掌握单片机的基本功能是非常重要的技能。进行课程设计是加强实践,提高动手能力的重要环节,是将所学理论知识与实际联系起来的桥梁和纽带。通过课程设计:同时在软件编程、排错调试、焊接技术及相关仪器设备的使用等各个方面得到全面的提高。掌握单片机开发过程,为将来的实际工作打下一定得基础。
本课程设计以菲利普P89V51RB2单片机为基础,基本要求如下:
1、熟悉单片机的基本机构;
2、掌握共阴/共阳数码管及发光二极管的工作原理及使用方法;
3、掌握按键的判断及使用;
4、掌握菲利普P89V51RB2单片机的使用方法;
5、掌握单片机C 语言一般的编程技巧;
6、掌握单片机系统调试的一般步骤及方法;
7、熟悉掌握电路板的焊接及排错;
8、掌握程序的下载及调试。
四、设计容提要及说明
4.1 设计容
本次设计的题目要求基本容如下:
(1)按键K1:电子灯显示方式选择,每按一次,选择一种显示方式;
(2)按键K2:控制电子灯启动,停止;
(3)电子灯显示方式至少四种;方式选择在电子灯停止方式下有效。
4.2 设计说明
4.2.1 系统设计
根据设计题目的要求分析,系统分成四大部分:
(1)单片机的控制部分;
(2)电子喷泉控制部分;
(3)按键控制部分;
(4)显示控制部分;
其框图见图1:
图1 系统设计框图
五、原理图及元件清单
图2 电子喷泉原理
元件清单:
六、单片机各引脚定义
单片机控制部分采用菲利普P89V51RB2,两个按键的用途如下:
七、系统程序流程图
本设计程序流程:程序开始,发光二极管处于熄灭状态;当启动时,共阳级数码管显示“1”,程序首先进行显示方式选择;停止时,在复位前,数码管显示停留在最后那个状态。2个按键中,其中K2按键控制电子喷泉的二极管的启动/停止;K1按键控制电子喷泉的发光二极管的显示方式的转换。
主程序流程图如下:
接通电源,当按下K2时,电子喷泉开始显示第一种显示方式;按下K2键久一点让电子喷泉停止;再按下K1键,程序判断电子喷泉停止,显示方式进行切换;如此反复。
图3 主程序流程图
八、电子喷泉设计的系统源程序
/*功能拓展数码管显示(共阳)模式号利用P2口*/
#include "at89x51.h"
#include "intrins.h"
void xianshi();
void xueze();
sbit sp1 = P0^0; /*停止与启动 0启动 1停止*/
sbit sp2 = P0^1; /*模式选择 */
int mos = 1; /*模式寄存*/
int a,b; /*消抖变量*/
int qt=1; /*起停标志*/
int zy=0; /*左右或奇偶标志*/
int tm = 0xfe;
int L4=0;
int led[] = {0XC0,0XF9,0XA4,0XB0,0X99,
0X92,0X82,0XF8,0X80,0X90}; /*数码管编码*/ int K4[] = {0x7e,0xbd,0xdb,0xe7,0xdb,0xbd};
/*延时子程序 */
void delay()
{
int i, j, k;
for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
for (k = 0; k < 148; k++);
}
}
}
/*主程序*/
void main()
{
P2=led[1];
while (1)
{
if(sp1 == 0)
{
for(a=5;a>0;a--)
for(b=248;b>0;b--); /*消抖*/
if (sp1 == 0)
{
qt = ~qt;
}
while(!sp1);
}
if(qt == 1)
{
xueze();
}
else
{
xianshi();
}
}
}
void xianshi()
{
switch (mos)
{
case 1: /*单一的左移*/
{
P1 = tm ;
delay();
tm = _crol_(tm,1);
break;
}
case 2: /*闪烁*/
{
P1 = 0X00;
delay();
P1 = 0XFF;
delay();
P1 = 0X00;
delay();
P1 = 0XFF;
delay();
break;
}
case 3: /*隔一个(奇偶)循环*/
{
P1 = tm ;
delay();
tm = _crol_(tm,2);