基于单片机的简易流水灯.docx
- 文档编号:28010466
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:24
- 大小:798.09KB
基于单片机的简易流水灯.docx
《基于单片机的简易流水灯.docx》由会员分享,可在线阅读,更多相关《基于单片机的简易流水灯.docx(24页珍藏版)》请在冰豆网上搜索。
基于单片机的简易流水灯
单片机课程设计报告
学生姓名
学 号
教学院系
电气信息学院
专业年级
指导教师
第一章基础设计报告
1.1设计题目基于单片机的简易流水灯
1.2流程图
1.3设计任务
利用单片机的端口输出,自己设计流水灯电路图和程序,点亮8个发光二极管。
1.4创建新工程和文件
1.4.1创建Keil4新工程
1.启动keil4软件,点击project
图1.4.1启动工程图
2.选择NewuVisionProject,创建新工程,如下图所示:
图1.4.2新建工程图
3.选择单片机类型AT89C51,点击建立工程,如下图所示:
图1.4.3选择单片机类型
图1.4.4工程建立完成
4.新建文件,如下图所示:
图1.4.5建立新文件
5.新文件命名,因为用的是C语言编程,所以新文件后缀名为.c,如下图所示:
图1.4.6新文件保存
6.将新文件加入工程,添加方法如下图所示:
图1.4.7将新建文件添加的工程
7.点击“targetoptions”,选择output,选中生成hex文件,如下图所示:
图1.4.8选择生成hex文件选项
8.Keil4新工程和文件建立完成,在操作窗口进行编程操作。
如下图所示:
图1.4.9编程操作图
1.4.2创建Proteus新文件
1.打开Proteus,进入操作界面,创建新文件。
进入开发环境Proteus后,选择“文件/新建”命令出现“新建设计”窗口属性对话框,选择A4,如图所示:
图1.4.10窗口属性图
2.进入元件库,在元件库中查找所需元件,并双击添加,入下图所示:
选择“库/拾取元件”,进入元件库。
图1.4.11元件库图
添加所需元件。
图1.4.12图库(51单片机)
3.双击将从元件库中查找到的元件,添加到设计图上,如图所示:
图1.4.13添加元件图
4.完成后的图如下:
图1.4.14流水灯电路图
1.5运行及调试
<1>编程程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
voiddelay(uinta);
voidmain()
{
while
(1)
{
P0=0xfe;delay(1000);
P0=0xfd;delay(1000);
P0=0xfb;delay(1000);
P0=0xf7;delay(1000);
P0=0xef;delay(1000);
P0=0xdf;delay(1000);
P0=0xbf;delay(1000);
P0=0x7f;delay(1000);
}
}
voiddelay(uinta)
{
uinti,j;
for(i=a;i>0;i--)
for(j=123;j>0;j--)
;
}
<2>调试与运行:
程序写好后,点击keil的编译运行调试,生成hex文件,如下图所示:
图1.5.1运行界面图
在Proteus中双击图中的单片机,选中所生成的hex文件,点击确定,单片机开始仿真,如下图所示:
图1.5.2仿真图
第二章提高设计报告
2.1设计题目基于单片机的简易交通灯
2.2流程图
图2.2.1交通灯流程图
2.3设计任务
(1)收集资料,了解交通灯的大致变化规律
(2)确定I/O口的功能
(3)用Keil软件编写程序,用Proteus软件设计电路图
(4)实现交通灯的简单仿真
2.4编写程序,设计单片机电路图
建立Keil工程文件,开始编写程序;打开Proteus,按要求画好单片机仿真电路图。
2.5交通灯各部分功能
2.5.1晶体振荡和复位电路
电路如图所示:
下图上边为复位电路,下边为晶振电路。
图2.5.1晶体振荡和复位电路图
2.5.2上拉电阻
单片机的P0口外接时要接上拉电阻,如下图所示:
图2.5.2上拉电阻图
2.5.3数码管显示和发光二极管
交通十字路口红绿灯变换,是根据数码管上显示的数来变换的,当数码管上显示的数小于5时,数码管和十字路口的红绿灯开始闪烁,提示红绿要开始变换了,来往车辆做好准备。
图2.5.3.1数码管
图2.5.3.2发光二极管
2.5.4按键
十字路口的红绿灯正常变换时,当按下“开始调数”触发中断,进入调数状态,此时可以分别按下“加1”、“减1”来改变红绿灯每次变换的时间,当调数完成后,按下“调数完成”结束中断,返回程序断点继续执行原程序,只是此时红绿灯每次变换的时间更改为中断中所调的数。
如下图所示:
图2.5.4按键
2.5.5单片机模块
图2.5.551单片机
2.6程序运行及调试
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voiddisplay(intm);
voiddelay1(uinta);
voiddelay(uinta);
sbitkey1=P3^5;
sbitkey2=P3^3;
sbitkey3=P3^4;
bitg;
inta,time=11;
voidmain()
{inti,m=time;
EA=1;//开总中断
EX0=1;//开外部中断0
IT0=0;//外部中断0边沿触发,下降沿触发
while
(1)
{
while(m>0)
{
P0_0=0;P0_1=1;P0_2=1;P0_3=0;
if(m<=3)
{
switch(m)
{
case3:
{for(i=0;i<120;i++)
{display(m);delay(500);}
P0_0=1;P0_3=1;delay1(250);P0_0=0;P0_3=0;m--;delay(250);}
break;
case2:
{for(i=0;i<120;i++)
{display(m);delay(500);}
P0_0=1;P0_3=1;delay1(250);P0_0=0;P0_3=0;m--;delay(250);}
break;
case1:
{for(i=0;i<120;i++)
{display(m);delay(500);}
P0_0=1;P0_3=1;delay1(250);P0_0=0;P0_3=0;m--;delay(250);}
break;
}}
}
if(m>3)
{
for(i=0;i<120;i++)
{display(m);delay(500);}
m--;
}
}
m=time;
while(m>0)
{
P0_0=1;P0_1=0;P0_2=0;P0_3=1;
if(m<=3)
{
switch(m)
{
case3:
{for(i=0;i<120;i++)
{display(m);delay(500);}
P0_1=1;P0_2=1;delay1(500);P0_1=0;P0_2=0;m--;delay1(500);}
break;
case2:
{for(i=0;i<120;i++)
{display(m);delay(500);}
P0_1=1;P0_2=1;delay1(500);P0_1=0;P0_2=0;m--;delay1(500);}
break;
case1:
{for(i=0;i<120;i++)
{display(m);delay(500);}
P0_1=1;P0_2=1;delay1(500);P0_1=0;P0_2=0;m--;delay1(500);}
break;
}
}
if(m>3)
{
for(i=0;i<120;i++)
{display(m);delay1(500);}
m--;
}
}m=time;
}
//---------------------数码管输出显示---------------------------
voiddisplay(intm)
{
charstring[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0x7D,0X07,0X7F,0X6F};
intL1,L2;
L1=m/10;L2=m%10;
g=~g;
if(g){P1=0xff;P2=string[L1];P1=0xfe;}
else{P1=0xff;P2=string[L2];P1=0xfd;}
}
//延时
voiddelay(uinta)
{while(a>0)
a--;
}
//------------------延时-----------------------
voiddelay1(intN)
{
inti,j;
for(i=N;i>0;i--)
for(j=123;j>0;j--);
}
//-------------------中断-----------------------
voidexter0()interrupt0
{
EX0=0;
a=1;
display(time);
delay1(100);
while(a)
{
display(time);
if(key2==0)
{
delay1(100);
if(key2==0)
{
while(key2==0){}
time++;
display(time);
}
}
if(key3==0)
{
delay1(100);
if(key3==0)
{
while(key3==0){}
time--;
display(time);
}
}
if(key1==0)
{
delay1(100);
if(key1==0)
{
while(key1==0){}
a=0;
EX0=1;
}
}
}
}
2.6.1仿真
程序经过编译后生成hex文件,双击单片机元件,选中生成的hex文件,开始仿真。
仿真结果如下图所示:
图2.6.1东西绿灯,南北红灯
图2.6.2东西红灯,南北绿灯
第三章提高设计报告任务说明书
3.1小组成员及学号
姓名
学号
屈直
0807040114
王林建
0807040225
3.2本人工作任务详细说明
根据选题《基于单片机的交通灯》我首先在网上查找相关设计资料,了解实验内容以及基本的任务,这是为了让这次设计更加完善。
交通灯的设计中主要完成的是电路图的绘制,以及与同伴讨论联系程序与电路的结合问题。
设计完成后,根据实验电路图和程序以及过程中的结论完成实验报告。
第四章课程设计心得
本次课程设计使我认识到了单片机这门学科的重要性,以及根据它产生的延伸知识。
通过本次课程的设计,不但加深我对在课程上所学到的单片机理论知识的认识和理解,重新让我认识到了这门学科的在应用方面的广阔前景,并且通过实践与操作更加丰富了自己的知识。
扩展了知识面,了解了理论知识与实际操作相结合的意义,懂得了如何分析电路与解决实际问题,提高了自己吃力问题的能力,从各方面提高了自己的综合素质。
在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督,学会了如何合作,也为以后的工作学习打下基础。
参考文献:
[1]黄迪明、余勤.C语言程序设计教程[M].国防工业出版社出版,2007
[2]李建忠.单片机原理及应用[M].西安电子科技大学出版社出版,2010
[3]仝迪、顾三春.电子设计指导书成都[M].西南石油大学电子信息工程学院,2010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 简易 流水
![提示](https://static.bdocx.com/images/bang_tan.gif)