基于单片机LED流水灯控制 (1).doc
《基于单片机LED流水灯控制 (1).doc》由会员分享,可在线阅读,更多相关《基于单片机LED流水灯控制 (1).doc(25页珍藏版)》请在冰豆网上搜索。
![基于单片机LED流水灯控制 (1).doc](https://file1.bdocx.com/fileroot1/2022-10/5/36f14e16-190b-498a-a97e-fc2376f97ce7/36f14e16-190b-498a-a97e-fc2376f97ce71.gif)
JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJ
课程设计说明书
课程名称:
单片机原理及应用
设计题目:
基于单片机的LED流水灯控制
院系:
信息技术学院
专业:
计算机科学与技术
2013年1月10日
DFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS
基于单片机的LED流水灯控制
摘要
基于单片机的LED流水灯的应用十分广泛,由单片机作为的核心控制器,通过按键实现控制功能和数据输入是非常普遍的。
通常在所需按键数量不多时,系统常采用独立式按键。
这种按键的电路配置灵活,软件结构简单。
由于实际应用中,不同系统对按键的要求不同,因此,对按键程序的设计要考虑全面,以便更好地完成按键所设定的功能,简述了该系统中一些重要芯片的基本工作原理,着重论述了硬件线路各个模块的设计思想。
进而熟练掌握相关专业基础知识的综合应用,提高学生的实际动手和设计能力。
本系统是基于AT89C51系列单片机为核心的LED流水灯设计,实现8个LED灯变化方向和速度的可调。
关键词:
单片机独立式按键LED
DFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS
目录
第一章绪论 1
1.设计背景 1
1.1设计目的 1
1.2可行性分析及相关现状 1
1.3意义 2
第二章系统设计 3
2系统设计 3
2.1整体设计 3
2.2模块设计 4
第三章系统实现 7
3.1整体仿真电路图 7
3.2各部分模块原理 7
3.2.1单片机最小系统 7
3.2.2外围电路 8
第四章核心代码 11
第五章调试 14
第六章总结与致谢 15
6.1总结 15
6.2致谢 15
第七章附录 16
7.附录 16
7.1源代码 16
DFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS
第一章绪论
1.设计背景
1.1设计目的
通过本次课题设计,应用《单片机原理及应用》等所学相关知识及查阅资料完成简易LED流水灯系统设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。
1.2可行性分析及相关现状
随着人们生活水平的提高,基于单片机的LED流水灯的应用越来越广泛,其中独立式键盘的扩展电路,该模块主要应用于仪器仪表、工业控制器、条形显示器、控制面板等实时性要求不太高的设备。
所以利用软件编程尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,减小因元器件精度不够引起的误差,还可以改进和提高如选用更精密的元器件等,在此次设计中我们将用到集成电路。
集成电路是信息产业和高新技术的核心,是推动国民经济和社会信息化的关键技术。
集成电路的产业规模和技术水平已成为国家综合国力的一个重要标志。
我国集成电路产业已经经过30多年的发展现已形成了近百家的产业规模,其中具备一定设计规模的单位有20多家,其中北京华大、大唐、深圳华威和无锡矽科四家设计公司的销售额超过了1亿元。
多家外国著名公司也纷纷在中国建立起集成电路设计公司。
中国发展集成电路的主要目标为:
达到大规模生产150mm和0.8微米的技术水平;200mm和0.5微米的制造技术的产业化;提高集成电路的设计能力以满足市场需求;跟踪0.3-0.4微米和先进封装技术的研发;开发200mm的硅片制造技术并在国内开始生产等。
未来10年是我国微电子产业发展的关键时期。
重点要推进超大规模集成电路和新技术的产业化。
综观中国集成电路的设计概况,可以看到从20世纪80年代末开始,经过90年代初的创业期,现正进入它的发展期,21世纪将是中国设计业的成熟期。
1.3意义
今天,当我们进入21世纪的时候,自动化科学技术不仅面临着挑战、也遇到了前所未有的发展机遇,而与此同时,在世界范围内掀起了高等科学工程教育的改革浪潮。
这两方面的因素必将深刻地影响大学自动化专业的发展。
本次课程设计就是为了加强学生动手能力,加强学生对电子电路技术的掌握,了解控制工程行业对当今社会的影响。
同时培养学生实践能力,并通过实践来不断的发现问题和解决问题的途径和方法,从而提高实践能力。
第二章系统设计
2系统设计
2.1整体设计
本方案主要有硬件部分和程序部分构成。
硬件部分主要由单片机最小系统和输入输出设备构成。
首先搭建单片机最小系统,包括电源电路,手动复位电路,时钟电路。
时钟电路才用内部时钟方式,手动复位电路采用按键电平复位方式。
再根据要求在P2口串接8个发光二极管作为输出设备,分别通过限流电阻接电源,在P3口串接2个独立按键,作为输入设备。
通过独立按键控制LED灯的闪烁和移动及速率变化。
同时在P1口连接一个数码管显示电路,用于自动计时,实现自动改变流水灯的样式。
程序部分设定T0为定时工作方式,T0每隔一定的时间扫描独立按键,当检测到某个键按下时,在主函数中执行相应的程序。
程序框图如图1所示:
开始
设置定时器工作方式
开中断
启动定时器
判断count1的值,强制转换灯的闪烁样式
判断count2的值确定速率
数码管计时10s之后,自动改变样式
图1
2.2模块设计
各部分模块图如下:
单片机时钟电路及自动复位电路:
外围输入电路:
外围输出二极管显示电路:
外围输出数码管显示电路:
第三章系统实现
3.1整体仿真电路图
如图2所示:
图2
3.2各部分模块原理
各模块原理介绍如下:
3.2.1单片机最小系统
首先搭建单片机最小系统,包括电源电路,手动复位电路,时钟电路。
时钟电路才用内部时钟方式,手动复位电路采用按键电平复位方式。
时钟电路用于产生AT89C51单片机工作时所必需的时钟信号。
AT89C51单片机的内部电路在时钟信号的控制下,严格地按时序执行指令进行工作。
复位是单片机的初始化操作,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态,通过复位按键可使单片机重新启动。
如图3所示:
图3
3.2.2外围电路
外围电路主要有输入设备和输出设备。
输入设备主要由2个独立按键构成,如图4所示。
输出设备由8个二极管构成,如图5所示,及七段数码管显示电路,如图6所示。
其中s1键控制8个二极管的花样显示,s2控制8个二极管点亮的速率。
数码管用于计时10s,10s之后自动转换二极管显示样式,如果10s之内有s1按键按下,则强制执行s1按键的内容。
其中二极管的保护电阻的取值范围为220-880欧姆之间。
图4
图5
s1键按一下,二极管从上往下单向点亮,哪个送入的是0,就点亮哪个灯,然后依次使0右移,实现依次点亮;按两下,二极管双向移动点亮;按三下,二极管4个交替闪烁;按四下,二极管8个交替闪烁;按五下,8个二极管依次点亮,依次熄灭;从而实现二极管的花样显示;s2键按下,通过延时程序,可以改变二极管点亮的速率。
图6
数码管显示电路,通过往p1.0~p1.6写入0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90会显示数字0~9,自动计时10s;如果10s之内没有按键按下,则10s之后,二极管自动改变显示样式,如果10s之内有按键按下,则强制执行按键内容。
第四章核心代码
本设计主要的模块就是输出设备中的8个二极管及七段数码管显示电路,分别如上图的5、6所示。
其中控制8个二极管花样点亮的程序如下,重点以花样1为说明:
if(count1==1)//花样1:
灯单向向下移模块子程序
{if(count2==1)
{rate=rate1;}//如果s2键按一下,执行速率1
if(count2==2)
{rate=rate2;}//如果s2键按两下,执行速率2
P2=0xfe;//给p2端口送入初值,这时D1点亮
delay(rate);
temp=P2;
for(i=0;i<8;i++)//通过延时及循环,依次点亮D2~D8
{if(count1==1)
{temp=_crol_(temp,1);
P2=temp;
if(count2==1)//并随时判断是否有s2键按下
{rate=rate1;}
if(count2==2)
{rate=rate2;}
delay(rate);
if(i==7)i=0;}
}
}
七段数码管显示电路的程序如下:
unsignedcharcodetable2[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义数码管0-9数字显示的表
voiddisplay(unsignedcharj)
{P1=table2[j/10];//通过片选使两位数码管分别显示数字,但是延时时间小,可以实现两位数码管同时显示
S3=1;
delay(10);
S3=0;
P1=table2[j%10];
S4=1;
delay(10);
S4=0;}
中断服务程序如下:
voidtimer0()interrupt1
{TH0=(65536-50000)/256;//T0重新装初值
TL0=(65536-50000)%256;
count++;
display(table2index);
if(table2index==0&&count==1)//如果数码管显示数字0时改变流水灯的样式
count1++;
if(count1==6)
count1=1;//如果五个花样显示完了之后,再按下按键S1或数码管计数到10时,再重新从花样1显示
if(count==20)//累加计数器的次数,如果到20次的话数码管数字通过查表自动加1显示
{count=0;
table2index=table2index+1;
if(table2index==11)
table2index