单片机课程设计模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机接口设计课程报告
班级:
姓名:
学号:
指导老师:
一、设计题目:
彩灯控制器
二、设计要求:
1.花型种类不少于四种,花型自拟;
2.可用键控制彩灯按预设的花型进行变换;
3.可用键控制分别用快/慢两种节拍实现花型变换。
本机地址为00H,当接到上位机发的00H时,则回发00H
当接到上位机发的AAH时,则将预设花型代号发出
当收到55H时,则后面的数据为新的花型
三、设计整体思路:
彩灯控制器可分为彩灯部分、单片机、脉冲震荡部分、复位电路、按键等。
所使用的单片机型号为80C51,80C51提供了32位I/O接口、2个16位定时器/计数器、1个全双工串行口和5个中断源来供用户使用。
同时设置了脉冲电路,为系统提供稳定频率波,也使各单片机之间的时钟信号能够同步。
复位电路所提供的复位功能是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H 单元开始执行程序。
同时,复位操作也使单片机内相应的寄存器复位到初始值。
按键是由P3.4、P3.5 两个I/O口连接,在无按键按下时,P3.4、P3.5均为高电平,当有按键按下,相应的口为低电平。
四、原理图:
五、程序模块(流程图):主流程图:
花型1流程图:
开始
中断初始化选择快慢节拍花型循环变换
结束
花型二流程图:
花型三流程图:
花型四流程图:
六、心得体会:
在这次单片机课程设计中遇到了很多的难题,因为以前没有接触过C语言的单片机,但是在老师和同学的帮助下,以及自己通过查找一些资料,顺利的解决了遇到的问题,完成了老师布置的要求。
通过本次课程设计也时我对单片机的一些有关的知识有了更进一步的了解,单片机是一门实践性很强的课程,它必须和其它的芯片一起才能最大可能的发挥出它的各种各样的功能。
所以就需要我们的知识面要广,这样在设计过程中才能有效的解决问题。
由于我们所用的是C语言编程,所以会遇到一些问题,但通过不断的查找资料和尝试最终还是解决了问题。
本次课程设计也锻炼了我们的实践能力,通过编写程序,我们能够把所学的知识很好地应用到实际中去,从而学以致用,能够设计一些生活中很小的系统。
总之,这次课程设计收获很多,也初步学会了C语言编程。
附加程序:
#include "reg52.h"
#include <intrins.h>
#define unit unsigned int
#define uchar unsigned char
sbit Set_key=P3^5;
sbit Tim_key=P3^4;
unit tt2,tt1,i,mode,flag,RcvBuf;
uchar temp;
void delay(unit z)
{ unit x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); }
void myint()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SM1=1;
SM0=0;
TR1=1;
REN=1;
TI=1;
ES=1;
EA=1;
}
void timmode()
{
if( Tim_key == 0 )
{
tt1++;
if( tt1 >2 )
tt1 = 1;
while(!Tim_key);
delay(10);
while(!Tim_key);
}
switch( tt1 )
{
case 1:
{
i=500;
break;
}
case 2:
{
i=100;
break;
}
}
}
void fisttype()
{
temp=0xfe;
P1=temp;
delay(5);
while(Set_key != 0) { timmode();
temp=_crol_(temp,1);
P1=temp;
if(RcvBuf==0x33)
break;
delay(i);
}
}
void sectype()
temp=0xfc;
P1=temp;
TR0=1;
while(Set_key != 0) { timmode();
temp=_cror_(temp,1);
P1=temp;
if(RcvBuf==0x33)
break;
delay(i);
}
}
void thirdtype()
{
temp=0xff;
P1=temp;
while(Set_key != 0) {
timmode();
temp-=1;
if(temp==0x00)
temp=0xff;
if(RcvBuf==0x33)
break;
delay(i);
}
}
void forthtype()
{
temp=0xff;
P1=temp;
while(Set_key != 0) { timmode();
temp=0xe7;
P1=temp;
delay(i);
temp=0xc3;
P1=temp;
delay(i);
P1=temp;
delay(i);
temp=0x18;
P1=temp;
delay(i);
}
}
void main()
{ myint();
while(1)
{
timmode();
if( Set_key == 0 )
{
delay(10);
if( Set_key == 0 )
{
mode++;
if( mode >4 )
{
mode = 1;
temp=0xff;
P1=temp;
}
while(!Set_key);
delay(10);
while(!Set_key);
}
}
switch( mode ) {
case 1:
{
fisttype();
break;
}
case 2:
{
sectype();
break;
}
case 3:
{ thirdtype();
break;
}
case 4:
{ forthtype();
break;
}
}
}
}
void rec() interrupt 4
{
if(RI==1)
{
RI = 0;
RcvBuf = SBUF;
switch(RcvBuf)
{
case 0x00:SBUF=0x00;break;
case 0xAA:SBUF=mode;break;
case 0x55:
{
if(mode==1)
sectype();
if(mode==2)
thirdtype();
if(mode==3)
forthtype();
if(mode==4)
fisttype();
break;
}
default:SBUF=0xff;
}
}
if(TI==1);
{ TI=0;}
}。