51单片机C语言版.docx

上传人:b****4 文档编号:3772213 上传时间:2022-11-25 格式:DOCX 页数:10 大小:228.16KB
下载 相关 举报
51单片机C语言版.docx_第1页
第1页 / 共10页
51单片机C语言版.docx_第2页
第2页 / 共10页
51单片机C语言版.docx_第3页
第3页 / 共10页
51单片机C语言版.docx_第4页
第4页 / 共10页
51单片机C语言版.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

51单片机C语言版.docx

《51单片机C语言版.docx》由会员分享,可在线阅读,更多相关《51单片机C语言版.docx(10页珍藏版)》请在冰豆网上搜索。

51单片机C语言版.docx

51单片机C语言版

基于单片机与PWM的呼吸灯设计

实训指导教帅:

班级:

设计人姓名:

设计日期:

设计地点:

完成时间:

本设计是基于单片机的原理与接口设计,采用单片机I/O口,加以C

语言编程实现LED渐亮再渐暗类似人的呼吸一样的效果。

关键词

AT89C51,PWh#宽调制)

一、设计要求:

呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上去和人的呼吸一样。

二、设计原理:

用C语言编程实现PWM^宽调制)输出驱动LED逐渐增加PWM勺占空比从而实现LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗……如此往复,再利用LED的余辉和人眼的暂留效应,看上去就和人的呼吸一样。

三、整体方案设计

8个LED按照顺序逐个实现呼吸效果。

加以其他闪烁花样增加更炫彩

的效果。

四、实验元件及器材

(1)元件:

LED(发光二极管)8个

1KQ电阻8个

1nf电容2个

AT89C51芯片

晶振1个

1个

(2)器件:

Atmega128开发板

计算机

五、硬件原理

(1)主电路:

8个LED分别连接AT89C51的P1口,使用共阳方式,并加以

1kQ的电阻接入电源。

 

(2)时钟电路:

外部时钟方式是使用外部振荡脉冲信号

C1

六、软件设计及系统仿真调试

(1)调试方法:

利用keil软件进行C语言程序编写及调试,再利用Proteus仿真软件进行仿真实验。

(2)调试过程所遇问题:

1、由于呼吸灯的程序在仿真软件Proteus中实现的效果不明显,很难辨别LED是否具有呼吸的效果。

所以边用keil调试程序边用STC烧写软件直接写入开发板,从而很明显看出LED是否具有呼吸效果;

2、程序运行时,出现LED闪烁过快,由于人眼的暂留效应看似LED全部一直亮着,经调试,修改延时时间,实现呼吸效果。

七、结论与心得

在本次设计中,C语言程序在开发板中得以实现应有的功能。

在调试

过程中,发现很多问题都是由于不细心导致的,因此在以后的设计方案中,

要集中精力,莫粗心大意。

再者就是知识量的不足,虽然是一个小小的设计方案,但是查阅了很多相关资料,在日后,要多充足自己的知识量,保证C程序的编写质量。

1

2000年5月

:

?

jj-YELLOW

E®-YELLOW

YELLOW

YELLOW

■LLJCW

群.YELLOW

YELLOW

LED-YELLOW

CRVST/SL

,T园C—

附件A:

呼吸灯设计电路图

[2]徐爱钧,《单片机高级语言C51应用程序设计》,电子工业出版社

[1]郭天祥,《新概念51单片机C语言教程》,电子工业出版社,2009

MALI

PDjD/ADD

PD.tZADI

PD.3/AD2

XTAL2

P0.3/AD3

PD.4/AD4

PD.5/AD5

PD.^/AK

RST

PD.7/AD7

F2.o/xe

笠,g

P21/A1D

P$EM

F23/A11

ALE

P24/A12

EA

F25/A13

P2.B/A14

P27/A15

PID

P3.OJRXD

PL1

P3J/TXO

Pl.2

P3.2/IN1D

P1J3

P5.3/INT1

PIA

P3.4TTO

Pl5

P35/T1

PI6

ps.e/w

PI.7

p土痂

Araacsi

 

K付件B:

c语言程序清单

#include

/*定义单片机引脚-----*/

sbitLED0=P1八0;

sbitLED1=P1八1;

sbitLED2=P1八2;

sbitLED3=P1八3;

sbitLED4=P1A4;

sbitLED5=P1A5;

sbitLED6=P1A6;

sbitLED7=P1A7;

voidDelay(unsignedintt);//函数声明

unsignedintz,y;

voidmain(void)//主函数

unsignedintCYCLE=500,PWM_LOW=0;//定义周期并赋值

while

(1)//主循环

/*整排LED灯呼吸*/

P1=0x00;

Delay(500);//加延时,可以看到熄灭的过

程(下面程序同理)

for(PWM_LOW=1;PWM_LOW

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW-与逐渐变亮相反的过程

P1=0x00;//点亮LED

P1=0xff;//熄灭LED

Delay(CYCLE-PWM_LOW);//主循环中添加其他需要

一直工作的程序,延时长度,600次循环中从599减至1

}

/*第一颗LED灯呼吸*/

LED0=1;

Delay(500);

for(PWM_LOW=1;PWM_LOW

{

LED0=0;

Delay(PWM_LOW);

LED0=1;

Delay(CYCLE-PWM_LOW);

}

LED0=0;

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)

{

LED0=0;

Delay(PWM_LOW);

LED0=1;

Delay(CYCLE-PWM_LOW);

}

/*第二颗LED灯呼吸*/

LED1=1;

Delay(500);

for(PWM_LOW=1;PWM_LOW

{

LED1=0;

Delay(PWM_LOW);

LED1=1;

Delay(CYCLE-PWM_LOW);

}

LED1=0;

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)

{

LED1=0;

Delay(PWM_LOW);

LED1=1;

/*

第三颗LED灯呼吸

*/

LED2=1;

Delay(500);

for(PWM_LOW=1;PWM_LOW

LED2=0;

Delay(PWM_LOW);

LED2=1;

Delay(CYCLE-PWM_LOW);

}

LED2=0;

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)

LED2=0;

Delay(PWM_LOW);

LED2=1;

Delay(CYCLE-PWM_LOW);

}

Delay(500);

for(PWM_LOW=1;PWM_LOW

LED3=0;

Delay(PWM_LOW);

LED3=1;

Delay(CYCLE-PWM_LOW);

}

LED3=0;

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)(

LED3=0;

Delay(PWM_LOW);

LED3=1;

Delay(CYCLE-PWM_LOW);

}

/*第五颗LED灯呼吸*/

LED4=1;

Delay(500);

LED4=0;

Delay(PWM_LOW);

LED4=1;

Delay(CYCLE-PWM_LOW);

}

LED4=0;

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)(

LED4=0;

Delay(PWM_LOW);

LED4=1;

Delay(CYCLE-PWM_LOW);

}

/*第六颗LED灯呼吸*/

LED5=1;

Delay(500);

for(PWM_LOW=1;PWM_LOW

LED5=0;

Delay(CYCLE-PWM_LOW);

}

LED5=0;

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){

LED5=0;

Delay(PWM_LOW);

LED5=1;

Delay(CYCLE-PWM_LOW);

}

/*第七颗LED灯呼吸*/

LED6=1;

Delay(500);

for(PWM_LOW=1;PWM_LOW

{

LED6=0;

Delay(PWM_LOW);

LED6=1;

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)(

LED6=0;

Delay(PWM_LOW);

LED6=1;

Delay(CYCLE-PWM_LOW);

}

/*第八颗LED灯呼吸*/

LED7=1;

Delay(500);

for(PWM_LOW=1;PWM_LOW

LED7=0;

Delay(PWM_LOW);

LED7=1;

Delay(CYCLE-PWM_LOW);

}

LED7=0;

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)(

Delay(PWM_LOW);

LED7=1;

Delay(CYCLE-PWM_LOW);

}

P1=0x00;

for(z=500;z>0;z--)

for(y=110;y>0;y--);

P1=0xff;

for(z=500;z>0;z--)

for(y=110;y>0;y--);

P1=0x00;

for(z=500;z>0;z--)

for(y=110;y>0;y--);

P1=0xff;

for(z=500;z>0;z--)

for(y=110;y>0;y--);

}

}

{

while(--t);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1