一、 设计项目。
多模式彩灯控制器。
电路逻辑图如下:
二、设计要求。
1、上电后电源指示灯亮,p1口led灯不亮。
2、p2.0,p2.1,p2.2连接的按键button1、button2、button3控制led点亮的模式。
3、button1按下后8个led灯全部闪烁。
4、按下复位键后所有的p1口灯全部熄灭,再按button2键,8个led灯左流水点亮即p1.0→p1.7依次逐个点亮(循环左流水)
5、再按下复位键后恢复初是状态,再按button3键,8个led灯右流水点亮即p1.7→p1.0依次逐个点亮(循环右流水)
6、以上要求仅仅是基本框架,设计时可以自由发挥。
三、程序设计。
1、程序分析。
当button1按未下时p2.0为高电平,当button1按下后p2.0为低电平。
因此读引脚就可以知道是否按键被按下,用位寻址功能,分别读p2引脚电平,若某个引脚电平为0,则执行相应的电灯程序。
2、按键消抖。
由于按键为机械开关,在使用时难免会有抖动,由此会产生电平毛刺(如下图)会导致led出现毫无次序的闪烁。所有在读p2.0引脚为低电平时,应延时一段时间(大约20ms)左右,再读p2.
0引脚,若p2.0引脚仍然低电平,则表示该引脚的确是被按下了,可以执行相应的电灯程序,若应延后p2.0引脚为高电平,则表示该引脚没有被按下了,只是偶尔抖动,不必点亮led灯。
3、彩灯程序设计。
1)延时子程序1:
void delay1()
uchar i,j;
for(i=250;i>0;i--)
for(j=200;j>0;j--)
2)延时子程序2(消抖延时):
void delay2()
uchar i,j;
for(i=50;i>0;i--)
for(j=50;j>0;j--)
3)彩灯子程序1(从中间到两边):
void caideng 1()
uchar i;
uchar deng [8]=;
while(1)
for(i=0;i<8;i++)
p1=deng[i];
delay1();
4)彩灯子程序2(左流水):
void caideng 2()
uchar i;
uchar temp=0x00;
p1=temp;
while(1)
p1=0x01;
for(i=0;i<8;i++)
p1=_crol_(p1,1);
delay1();
5)彩灯子程序3(右流水):
void caideng 3()
uchar i;
uchar temp=0x00;
p1=temp;
while(1)
p1=0x01;
for(i=0;i<8;i++)
p1=_cror_(p1,1);
delay1();
6)彩灯子程序4(闪烁):
void caideng 4()
uchar i;
uchar deng [2]=;
while(1)
for(i=0;i<2;i++)
p1=deng[i];
delay1();
4、总程序。
#include<>
#include<>
#define uchar unsigned char
sbit rd_0=p2^0;//定义p3.0为输入控制端。
sbit rd_1=p2^1;//定义p3.1为输入控制端。
sbit rd_2=p2^2;//定义p3.2为输入控制端。
sbit rd_3=p2^3;//定义p3.3为输入控制端。
延时子程序1
void delay1()
uchar i,j;
for(i=250;i>0;i--)
for(j=200;j>0;j--)
延时子程序2
void delay2()
uchar i,j;
for(i=50;i>0;i--)
for(j=50;j>0;j--)
p1从中间到两边全部点亮。
void caideng1()
uchar i;
uchar deng [8]=;
while(1)
for(i=0;i<8;i++)
p1=deng[i];
delay1();
p1从左到右循环移动点亮。
void caideng2()
uchar i;
uchar temp=0x00;
p1=temp;
while(1)
p1=0x01;
for(i=0;i<8;i++)
p1=_crol_(p1,1);
delay1();
p1从右到左循环移动点亮。
void caideng 3()
uchar i;
uchar temp=0x00;
p1=temp;
while(1)
p1=0x01;
for(i=0;i<8;i++)
p1=_cror_(p1,1);
delay1();
p1闪烁。void caideng 4()
uchar i;
uchar deng [2]=;
while(1)
for(i=0;i<2;i++)
p1=deng[i];
delay1();
主程序。void main()
while(1)
if(rd_0==0)
delay2();
if(rd_0==0)
caideng 1();
elseif(rd_1==0)
delay2();
if(rd_1==0)
caideng 2();
elseif(rd_2==0)
delay2();
if(rd_2==0)
caideng 3();
elseif(rd_3==0)
delay2();
if(rd_3==0)
caideng 4();
四、焊接组装。
按照设计的电路图正确安装元器件,就可以,当然重要的还是焊接工艺的体现,。其他的也没有什么了。
五、心得体会。
在此次的单片机课程设计过程中,更进一步地熟悉了at89c51芯片的结构及掌握了芯片的工作原理和其具体的使用方法。
在连接p1、p2、p3、p4口的接法中,要求熟悉芯片的结构以及芯片各引脚的功能,那么在电路出错时便能准确地找出错误所在并及时纠正了。
在设计电路中,往往是先**后连接实物图,但有时候**和电路连接并不是完全一致的,例如**的连接示意图中,往往没有接高电平的40脚以及接低电平的20脚等等因此在实际的电路连接中往往容易遗漏。因此**图和电路连接图还是有一定区别的。但这并不是主要的问题,问题的重点在,编程序的过程,虽然本次的程序没有什么难度,但也是本人第一次编写单片机程序,这和上学期学习的c程序还是有所不同的。
在设计电路的连接图**错的主要原因都是接线和芯片的接触不良以及接线的错误所引起的。
总的来说,通过这次的设计实验更进一步地增强了实验的动手能力。
单片机课程设计报告
单片机系统课程设计报告。专业 电气技术。学生姓名 朱海李威张杰。学号。指导教师 陈高燕。完成日期 2014 年 7 月 5 日。目录。1 设计任务和性能指标 1 1.1设计任务 1 2 设计方案 1 2.1方案论证 2 2.2总体设计框图 2 3 系统硬件设计 4 3.1红外线解码电路设计 4 3....
单片机课程设计报告
韶关学院。课程设计说明书 设计题目 基于单片机控制的智能交通灯设计。课程名称 微机原理与应用实训。学生姓名 学号。院系 物理与机电工程学院汽车系。专业班级 12机械制造及其自动化 5班。指导教师姓名及职称 谢杰讲师。陈锦儒助理实验师。起止时间 2015 年 3 月 2015 年 5 月。课程设计评分...
单片机课程设计报告
南京工程学院。课程设计说明书 题目实时钟芯片pcf8563的应用 课程名称单片机原理及应用a 院 系 部 中心 通信工程学院。专业电子信息工程 传感网 班级。学生姓名。学号。设计地点信息楼 c 210 指导教师。设计起止时间 2013年12月23日至 2013年12月27日。一 摘要1 二 课程设计...