燕山大学单片机课设 设计可控流水灯c语言.docx
- 文档编号:28878288
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:17
- 大小:118.94KB
燕山大学单片机课设 设计可控流水灯c语言.docx
《燕山大学单片机课设 设计可控流水灯c语言.docx》由会员分享,可在线阅读,更多相关《燕山大学单片机课设 设计可控流水灯c语言.docx(17页珍藏版)》请在冰豆网上搜索。
燕山大学单片机课设设计可控流水灯c语言
目录
一、引言
二、课题综述
2.1课题的来源
2.2课题的意义
2.3课题的目标
2.4课题的技术
三、系统分析
3.180C51单片机的基本组成
3.280C51单片机引脚图及引脚功能介绍
3.3解决问题的基本思路
3.4解决问题的总体方案
4、硬件组成
4.1晶振震荡电路
4.2按键复位电路
4.3电源电路
4.4独立按键电路
4.5八位跑马灯电路
4.6彩灯的总驱动电路
五、代码编写
六、程序调试
七、结论
八、参考文献
一、引言
单片机课程设计主要是为了让我们增进对单片机芯片电路的感性认识,加深对理论方面的理解。
了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。
另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目的。
二.课题综述
2.1课题的来源
当今社会,随着科学技术的进步和电子产业的迅猛发展,这种由单片机芯片控制各种硬件工作的技术也日益成熟,并普及在交通、化工、机械等各个领域。
而流水灯这项技术在生活中的应用更是广泛,较为贴近生活。
而流水灯控制的设计所需要的知识也正好吻合了我们本学期对于单片机这门课程的学习,所以设计流水灯控制的这个课题让我们对知识的学习和巩固都有了进一步的加深。
2.2课题的意义
这次单片机课程设计是为了通过对单片机编程设计控制LED灯流水闪亮的设计加强学生团队配合的能力和创造力;综合运用专业及基础知识,解决实际工程技术问题的能力。
能够让学生深入真是的体会到所学的理论知识和实践相结合的过程,并融入的所学知识的海洋里,从中找出自身的不足并加以改正。
2.3预期的目标
对8个LED灯设计几种流水灯显示方式,用按键进行方式选择,并用一个按键就控制流水灯流动的速度;
2.5课题的技术
通过编程达到LED灯的显示方式、模式切换按钮的控制、亮灯速度的按键控制等技术。
三、系统分析
3.18051单片机的基本组成
1、中央处理器(CPU)
中央处理器是单片机的核心,完成运算和控制功能。
有运算电路和控制电路,其中控制电路是单片机的指挥控制部件,保证单片机各部分能自动而协调的工作。
例如定时控制电路和振荡电路均属于控制电路。
单片机执行程序就是在控制电路的控制下进行的。
首先从程序存储器读出指令,送指令寄存器保存;然后送指令译码器进行译码,译码结果送定时控制电路,有定时控制逻辑产生各种定时信号和控制信号;再送到系统的各个部件去控制相应的操作。
这就是执行一条指令的全过程,而执行程序就是不断地重复这一过程。
2、内部数据存储器(内部RAM)
8051芯片中共有256个RAM单元,通常把这256个单元按其功能划分为两部分:
低128单元(单元地址00H~7FH)和高128单元(单元地址80H~FFH)。
内部RAM的高128单元是供给专用寄存器使用的,其单元地址为80H~FFH。
因这些寄存器的功能已作专门规定,故称之为专用寄存器(SpecialFunctionRegister),也可称为特殊功能寄存器SFR区。
但高128单元被专用寄存器占用,能作为寄存器供用户使用的只是低128单元,用于存放可读写的数据。
因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。
片内低128字节RAM是用户真正可以存取随机数据的数据存储器,其地址为00H-7FH。
3、内部程序存储器(内部ROM)
8051共有4KB掩膜ROM,用于存放程序、原始数据或表格,因此,称之为程序存储器,简称内部ROM。
它的片内ROM地址为0000H~0FFFH(4KB),它的片外ROM最大容量可为0000H~FFFFH。
片内与片外ROM在低4KB地址出现重叠,这种重叠的区分由8051的管脚
进行控制。
还有一组特殊单元是0003H~002AH,共40个单元。
这40个单元被均匀地分为5段,作为5个中断源的中断地址区。
中断响应后,按中断种类,自动转到各中断区的首地址去执行程序,因此在中断地址区中理应存放中断服务程序。
但通常情况下,8个单元难以存下一个完整的中断服务程序,因此通常也是从中断地址区首地址开始存放一条无条件转移指令,以便中断响应后,通过中断地址区,再转到中断服务程序的实际入口地址。
4、定时/计数器
8051共有两个16位的定时/计数器,以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。
5、并行I/O口
8051共有4个8位的I/O口(P0、P1、P2、P3),以实现数据的并行输入/输出。
每个口都包含一个锁存器、一个输出驱动器和输入缓冲器。
实际上,它们已被归入专用寄存器之列,并且具有字节寻址和位寻址功能。
在访问片外扩展存储器时,低8位地址和数据由P0口分时传送,高8位地址由P2口传送。
在无片外扩展存储器的系统中,这4个口的每一位均可作为双向的I/O端口使用。
6、串行口
MCS-51单片机有一个全双工的串行口,以实现单片机和其它设备之间的串行数据传送。
该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为同步移位器使用。
7、中断控制系统
MCS-51单片机的中断功能较强,以满足控制应用的需要。
8051共有5个中断源,即外中断两个,定时/计数中断两个,串行中断一个。
全部中断分为高级和低级共两个优先级别。
3.2、80C51单片机引脚图及引脚功能介绍
80C51有40条引脚,共分为端口线、电源线和控制线三类。
1.端口线(4×8=32条):
I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
2.电源线(2条):
VCC为+5V电源线,VSS为接地线。
3.控制线(6条):
(1)ALE/
:
地址锁存允许/编程线
ALE功能:
用来锁存P0口送出的低8位地址
功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
(2)PSEN:
外ROM读选通信号。
(3)RST/VPD:
复位/备用电源。
RST(Reset)功能:
复位信号输入端。
VPD功能:
在Vcc掉电情况下,接备用电源。
(4)
/Vpp:
内外ROM选择/片内EPROM编程电源。
功能:
内外ROM选择端。
Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
4.I/O线
(5)XTAL1、XTAL2:
晶体振荡电路反相输入端和输出端。
3.3解决问题的基本思路
通过按键来控制流水灯的流动方式,用一个按键来控制流水灯的流动速度,控制流动速度的程序是利用中断程序来实现的
3.4系统总体设计方案
在做此设计时,应先确定其系统框架,以下便是此设计的系统框图。
图1系统框图
从图1中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
四、硬件组成
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,具有丰富的内部资源:
4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使AT89C51单片机时无须外扩存储器。
因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
,
4.1、晶振震荡电路
图2
1时钟信号的产生
在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。
而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟电路,如图3所示。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
一般地,电容C1和C2取30pF左右,晶体的振荡频率范围是1.2~12MHz。
晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就快。
再此wo选用振荡频率为12MHz的晶振。
2.时序
时序是用定时单位来说明的。
MCS-51的时序定时单位共有4个,从小到大依次是:
节拍、状态、机器周期和指令周期。
下面分别加以说明。
1)节拍与状态
把振荡脉冲的周期定义为节拍(用P表示)。
振荡脉冲经过二分频后,就是单片机的时钟信号的周期,其定义为状态(用S表示)。
这样,一个状态就包含两个节拍,具前半周期对应的拍节叫节拍1(P1),后半周期对应的节拍叫节拍2(P2)。
2)机器周期
MCS-51采用定时控制方式,因此它有固定的机器周期。
规定一个机器周期的宽度为6个状态,并依次表示为S1~S6。
由于一个状态又包括两个节拍,因此,一个机器周期总共有12个节拍,分别记作S1P1、S1P2、…、S6P2。
由于一个机器周期共有12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。
当振荡脉冲频率为12MHz时,一个机器周期为1μs;当振荡脉冲频率为6MHz时,一个机器周期为2μs。
本设计采用的晶振频率为12MHz。
3)指令周期
指令周期是最大的时序定时单位,执行一条指令所需要的时间称为指令周期。
它一般由若干个机器周期组成。
不同的指令,所需要的机器周期数也不相同。
通常,包含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令,等等指令的运算速度与指令所包含的机器周期有关,机器周期数越少的指令执行速度越快。
单片机执行任何一条指令时都可以分为取指令阶段和执行指令阶段。
ALE引脚上出现的信号是周期性的,在每个机器周期内出现两次高电平。
第一次出现在S1P2和S2P1期间,第二次出现在S4P2和S5P1期间。
ALE信号每出现一次,CPU就进行一次取指操作,但由于不同指令的字节数和机器周期数不同,因此取指令操作也随指令不同而有小的差异。
4.2按键复位电路
图3
复位是单片机的初始化操作,其主要红能是把程序计数器PC内容初始化为0000H,也就是使单片机从0000H单元开始执行程序,同时使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。
8051单片机采用两种复位方式:
一种是加电自动复位,另一种为手动按键复位。
单片机复位的条件是:
必须使RST/VPD或RST引(9)加上持续两个机器周期(即24个振荡周期)的高电平。
2μs以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。
上电复位电路是通过外部复位电路的电容充电来实现的,在电源Vcc的上升时间不超过1ms就可以实现自动上电复位,即接通电源就完成了系统的复位初始化。
在接电瞬间,RESET端的电位与VCC相同,随着充电电流的减少,RESET的电位逐渐下降。
只要保证RESET为高电平的时间大于两个机器周期,便能正常复位。
手动按键复位要求在电源接通的条件下,用按键开关操作使但单片机复位,如图3所示。
4.3电源电路
4.4独立按键电路
通过独立按键来控制流水的的流动方式
4.5八位跑马灯电路
4.6彩灯的总驱动电路
5、代码编写
总程序
#include
#defineuintunsignedint
#defineucharunsignedchar
voidsi();
voidsan();
voidwu();
voidjiu();
voidliu();
voidqi();
voiddelay(uint);
sbitkey1=P3^5;
sbitkey2=P3^4;
sbitkey3=P3^3;
sbitkey4=P3^2;
uchartemp;
uchartemp2;
uchartemp3;
uchartemp4;
uchartemp5;
uchartemp6;
uintl;
uinte;
uinta;
uintb;
uintc;
uintd;
uintf;
uintg;
uinth;
uintj;
uintk;
voidmain()
{
EA=1;//允许打开总中断
EX0=1;EX1=1;
IT0=0;IT1=1;
e=0;
P3=0xff;
while
(1)
{
if(key1==0)//按下key1键
{
e++;//每按下一次e自加一次
if(e>3)e=1;//如果e>3时,把e置为1
switch(e)
{
case1:
san();//当e=1时执行子程序san()
break;
case2:
liu();//当e=2时执行子程序si()
break;
case3:
qi();//当e=3时执行子程序qi()
break;
}
}
if(key2==0)
{
wu();}//当按下key2键后执行子程序wu()
}
}
voidsan()
{
uchartable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
for(a=0;a<15;a++)
{
temp=table[a];
P1=temp;
delay(l);
}
}
voidwu()
{
uchartable2[]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xc3,0x81,0x00};
for(c=0;c<10;c++)
{
temp3=table2[c];
P1=temp3;
delay(l);
}
}
voidliu()
{
uchartable4[]={0x88,0xcc,0xee,0xff,0xee,0xcc,0x88,0x00};
for(f=0;f<8;f++)
{
temp5=table4[f];
P1=temp5;
delay(l);
}
}
voidqi()
{
uchartable5[]={0x3f,0x0f,0x03,0x00};
for(g=0;g<4;g++)
{
temp6=table5[g];
P1=temp6;
delay(l);
}
}
voidjiu()interrupt0//外部中断0,当key4键按下后程序跳转到外部中断0程序中,当中断程序运行完后继续进行未完成的程序
{
Uchartable3[]={0x00,0xff,0x00,0xff,0xe7,0xff,0xe7,0xff,0xc3,0xff,0xc3,0xff,0x81,0xff,0x81,0xff};
P3=0xff;
delay(h);
for(d=0;d<16;d++)
{
temp4=table3[d];
P1=temp4;
delay(l);
}
delay(l);
}
voidshi()interrupt2//外部中断1控制流水灯的流动速度
{//当key3键按下后h自加,当h>3后,h自动置为0
h++;
if(h>3)
h=0;
}
voiddelay(uintl)//延时子程序
{
if(h==0)//当h=0时,l=1000,速度最慢
l=1000;
if(h==1)//当h=1时,l=500,速度适中
l=500;
if(h==2)//当h=2时,l=250,速度最快
l=250;
for(j=100;j>0;j--)
for(k=l;k>0;k--);
}
6、程序调试
本程序运行过程中没有错误。
打开开关,按钮用来切换模式,当key1键按下后,运行流水灯程序,每按一次按钮就会有一种方式,一共有三种方式,当key2键按下后有一种流水灯流动方式。
按钮key3用来加速流水灯的流动速度,按钮key4按下后中断其他的流水灯流动,进入中断中的程序,中断中的程序运行完后继续运行没运行完的程序。
七、结论
单片机将不断的引导电子产品的创新,所以学好单片机的相关知识是十分必要的,例如单片机的组成及结构知识,单片机的指令系统,程序设计,还有相关的扩展应用知识,本设计就是一个很典型的也很简单的单片机扩展应用,此外还有接口技术等等。
通过这次的课程程设计让我们了解在软硬件设计和制作方面的不足。
通过这次的课程设计,让我受益匪浅。
八、参考文献
C程序设计谭浩强清华大学出版社
单片机原理及应用张毅刚哈尔滨工业大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 燕山大学单片机课设 设计可控流水灯c语言 燕山 大学 单片机 设计 可控 流水 语言
![提示](https://static.bdocx.com/images/bang_tan.gif)