设计要求:
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 |
虽然写代码的过程很难很枯燥,但是写出来并且编译成功之后的那种畅快淋漓的感觉,总是令人陶醉。目前的我还只能算是一个小白,能力弱、基础薄,但是我会利用好这个假期时间,努力学习,积极进取。