单片机节日彩灯设计,C语言版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计报告书
课题名称
节日彩灯控制器设计 姓 名 学 号 院、系、部
电气工程系 专 业
电子工程及其自动化 指导教师
2013年 7 月10日
※※※※※※※※※
※※
※
※ ※※ ※※※※※※※※※
2010级单片机 课程设计
节日彩灯控制器设计
一、设计目的
1、了解节日彩灯控制器的工作原理
2、掌握电路板的实物焊接
3、掌握独立电源设计方法和原理
二、设计要求
1、设计4个按键S0、S1、S
2、S3,
2、S0—开始,按此键则灯开始流动(由上而下)。
3、S1—停止,按此键则停止流动,所有灯为暗。
4、S2—上,按此键则灯由上向下流动。
5、S3—下,按此键则灯由下向上流动。
三、硬件电路设计
3.1系统结构框图
图3-1 系统结构框图
节日彩灯控制系统主要由单片机、LED灯、5V电源及开关组成
3.2 STC89C52单片机最小系统
单片机最小系统包括:单片机,复位电路,晶振电路。
1、单片机的介绍:
VCC:供电电压。GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL门电流。当P0口的管脚第一次写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。P1口管脚写入“1”后,被内部上拉为高,可用作输入,P1
口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口作为AT89C51的一些特殊功能口,管脚备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(计时器0外部输入)
P3.5 T1(计时器1外部输入)
2、复位的介绍:
复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
单片机的RST引脚为主机提供了一个外部复位信号输入口。复位按键按下以前,RST引脚为低电平。按下复位按键后,RST引脚得到两个机器周期以上的高电平,单片机的复位方式可由手动复位方式完成。
3、晶振的介绍:
外接石英晶体或者陶瓷谐振器以及电容C1、C2接在放大器的反馈回路(AT89C52内部有一个用于构成内部振荡器的高增益反相放大电路,XTAL1、XTAL2分别是该放大器的输入和输出端)中构成并联振荡电路。
为了使装置能够被外部时钟信号激活,XATL1应该有效,而XTAL2应该被悬空。由于输入到内部的时钟信号电路通过了一个二分频的信号,外部信号的工作周期比没有别的要求,但是最大值和最小值的大小可以在数据表上观察出来。
3.3 LED显示电路
主要由8个LED灯与保护电阻组成
图3-3 LED灯显示电路
3.4系统电路原理图
由按键控制功能的LED工作的方式,其中的LED采取共阳极接法通过依次向连接LED的I/O口送出低电平,可实现题目要求的功能
图3-4系统电路原理图
四、软件设计
4.1设计思路
本设计由主程序、子程序和延时程序组成。其中,子程序的关键在于设计了两个数组,通过数组中的初始数值控制二极管的亮、灭。主程序除了调用二极管显示子程序外,还一直保持查询是否有功能键按下,一旦有按键按下,就会进入相应的按键处理,实现对发光二极管的控制。
4.2程序流程图
图4-1 程序流程图
五、源程序
#include
#define uint unsigned int
#define uchar unsigned char
void san();
void wu();
void delay(uint);
sbit key2=P3^5;//关闭彩灯的开关
sbit key1=P3^4;//启动彩灯的开关
sbit key3=P3^3;//控制彩灯右移的开关
sbit key4=P3^1;//控制彩灯左移的开关
uchar temp;//定义一个无符号字符型数据变量
uchar temp1;//定义一个无符号字符型数据变量uchar temp2;/定义一个无符号字符型数据变量
uint a;
int c;
void main()//主程序
{
while(1)//判断哪个开关被按下
{
if(key1==0)
{
san();
}
if(key2==0)
{
P1=0xff;
}
if(key3==0)
{
san();
}
if(key4==0)
{
wu();
}
}
}