基于51单片机的霓虹灯(初学者入门)

设计要求:

1.使用PWM驱动8个LED灯

2.人眼不能观察到灯光全灭

3.灯光要有动画效果

实验设备:智能小车上的核心板、STC89C52芯片、芯片手册及核心板原理图。

设计思路:通过keil4创建一个新项目,选用89C52芯片,再创建一个新文件,将文件添加到项目中。写出代码并编译无错后,生成.hex文件,将代码烧入核心板中,观察流水灯模块LED灯变化情况。(本人写的代码是实现流水灯变化)

代码如下:

   1   #include<reg52.h>

 2

#include"delay.h"

 3

#include"liushuiled.h"

 4

void main()

 5

{

 6

unsigned int i,j;

 7

while(1)

 8

for(i=0;i<8;i++)

 9

{

 10

P1=0xff;

 11

led_ctl(i,LEDON);

 12

delay_s(1);

 13

}

 14

for(j=7;j>=0;j--)

 15

{

 16

led_ctl(j,LEDON);

 17

delay_s(1);

 18

P1=0xff;

 19

}

 20

}

 21

//延时函数头文件

 22

#ifndef _DELAY_H

 23

#define _MELAY_H

 24

char delay_ms(unsigned int ms);

 25

char delay_s(unsigned int s);

 26

#endif

 27

//延时函数

 28

#include "delay.h"

 29

 30

char delay_ms(unsigned int ms)

 31

{

 32

volatile unsigned int i,j;

 33

if(ms<0||ms>65535)

 34

return -1;

 35

for(i=0;i<ms;i++)

 36

{

 37

for(j=0;j<120;j++)

 38

;

 39

}

 40

return 0;

 41

}

 42

#if 1

 43

char delay_s(unsigned int s)

 44

{

 45

if(s<0||s>65535)

 46

return -1;

 47

for(;s>0;s--)

 48

{

 49

delay_ms(1000);

 50

}

 51

return 0;

 52

}

 53

#endif

 54

//LED灯控制函数头文件

 55

#ifndef __LIUSHUILED_H

 56

#define __LIUSHUILED_H

 57

#include<reg52.h>

 58

#define LEDON 0 //µÆÁÁ

 59

#define LEDOFF 1 //µÆÃð

 60

char led_ctl(unsigned char led_num,unsigned char flag );

 61

#endif

 62

//LED灯控制函数

 63

#include<reg52.h>

 64

#include"liushuiled.h"

 65

#if 1

 66

char led_ctl(unsigned char led_num,unsigned char flag )

 67

{

 68

if(led_num<0||led_num>7||flag<0||flag>1)

 69

{

 70

return -1;

 71

}

 72

if(flag)

 73

{

 74

P1 = 1 << led_num;

 75

}

 76

else

 77

{

 78

P1 &= ~(1 << led_num);

 79

}

 80

return 0;

 81

}

 82

#endif

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

猜你喜欢

转载自blog.csdn.net/qq_53336580/article/details/118700204