设计要求:
1.使用PWM驱动8个LED灯
2.人眼不能观察到灯光全灭
3.灯光要有动画效果
实验设备:智能小车上的核心板、STC89C52芯片、芯片手册及核心板原理图。
设计思路:通过keil4创建一个新项目,选用89C52芯片,再创建一个新文件,将文件添加到项目中。写出代码并编译无错后,生成.hex文件,将代码烧入核心板中,观察流水灯模块LED灯变化情况。(本人写的代码是实现流水灯变化)
代码如下:
1 #include<reg52.h> |
||
#include"delay.h" |
||
#include"liushuiled.h" |
||
void main() |
||
{ |
||
unsigned int i,j; |
||
while(1) |
||
for(i=0;i<8;i++) |
||
{ |
||
P1=0xff; |
||
led_ctl(i,LEDON); |
||
delay_s(1); |
||
} |
||
for(j=7;j>=0;j--) |
||
{ |
||
led_ctl(j,LEDON); |
||
delay_s(1); |
||
P1=0xff; |
||
} |
||
} |
||
//延时函数头文件 |
||
#ifndef _DELAY_H |
||
#define _MELAY_H |
||
char delay_ms(unsigned int ms); |
||
char delay_s(unsigned int s); |
||
#endif |
||
//延时函数 |
||
#include "delay.h" |
||
char delay_ms(unsigned int ms) |
||
{ |
||
volatile unsigned int i,j; |
||
if(ms<0||ms>65535) |
||
return -1; |
||
for(i=0;i<ms;i++) |
||
{ |
||
for(j=0;j<120;j++) |
||
; |
||
} |
||
return 0; |
||
} |
||
#if 1 |
||
char delay_s(unsigned int s) |
||
{ |
||
if(s<0||s>65535) |
||
return -1; |
||
for(;s>0;s--) |
||
{ |
||
delay_ms(1000); |
||
} |
||
return 0; |
||
} |
||
#endif |
||
//LED灯控制函数头文件 |
||
#ifndef __LIUSHUILED_H |
||
#define __LIUSHUILED_H |
||
#include<reg52.h> |
||
#define LEDON 0 //µÆÁÁ |
||
#define LEDOFF 1 //µÆÃð |
||
char led_ctl(unsigned char led_num,unsigned char flag ); |
||
#endif |
||
//LED灯控制函数 |
||
#include<reg52.h> |
||
#include"liushuiled.h" |
||
#if 1 |
||
char led_ctl(unsigned char led_num,unsigned char flag ) |
||
{ |
||
if(led_num<0||led_num>7||flag<0||flag>1) |
||
{ |
||
return -1; |
||
} |
||
if(flag) |
||
{ |
||
P1 = 1 << led_num; |
||
} |
||
else |
||
{ |
||
P1 &= ~(1 << led_num); |
||
} |
||
return 0; |
||
} |
||
#endif |
虽然写代码的过程很难很枯燥,但是写出来并且编译成功之后的那种畅快淋漓的感觉,总是令人陶醉。目前的我还只能算是一个小白,能力弱、基础薄,但是我会利用好这个假期时间,努力学习,积极进取。