如果想看LED灯点亮的一些详细讲解,请看: 链接: 基于蓝桥杯的51知识体系梳理与学习笔记一——LED的点亮 工程代码:

#include "STC15F2K60S2.H"

typedef enum

{

led_mode1,

led_mode2,

led_mode3,

led_mode4

}led_mode;

led_mode mode=led_mode1;

/*

模式1:流水灯从左到右

模式2:流水灯从右到左

模式3:流水灯从两边到中间

模式4:流水灯从中间到两边

*/

unsigned char ucled;//LED显示变量

unsigned char i=0;//循环变量

void led_proc()

{

switch(mode)

{

case led_mode1:

if(++i>=8)i=0;

ucled=0x01<

break;

case led_mode2:

if(++i>=8)i=0;

ucled=0x80>>i;

break;

case led_mode3:

if(++i>=4)i=0;

ucled=(0x80>>i)|(0x01<

break;

case led_mode4:

if(++i>=4)i=0;

ucled=(0x10<>i);

break;

}

}

//函数名:定时器1初始化函数

//入口参数:无

//返回值:无

//函数功能:系统频率为 12.000MHz,设置定时时长为 1ms,

// 选择定时器 1,选择定时器模式为 16 位自动重载( 15 系列),

//选择定时器时钟为 12T( FOSC/12)

void Timer1Init_lhc(void) //1毫秒@12.000MHz

{

AUXR &= 0xBF; //定时器时钟12T模式

TMOD &= 0x0F; //设置定时器模式

TL1 = 0x18; //设置定时初值

TH1 = 0xFC; //设置定时初值

TF1 = 0; //清除TF1标志

TR1 = 1; //定时器1开始计时

ET1 = 1; //使能定时器1中断

}

//函数名:LED显示函数

//入口参数:要显示数值的十六进制数据,例如0XAA=1010 1010,L8~L1的顺序

//返回值:无

//函数功能:按照入口参数顺序将LED点亮,1为亮,0为灭

void Led_Disp_lhc(unsigned char ucLed)

{

P0 = ~ucLed;//将输入数据取反,做好数据准备,1为亮,0为灭。

P2 = P2 & 0x1F | 0x80; // 0x80,选通Y4,也就是LED的锁存器,将数据透传过去

P2 &= 0x1F; //将打开的锁存器关闭,使任何一个锁存器都不打开

}

//函数名:关闭外设的初始化函数

//入口参数:无

//返回值:无

//函数功能:将LED、蜂鸣器和继电器全部关闭

void Cls_Peripheral_lhc(void)

{

// P0 = 0x00;//将外设全都灭掉的数据准备

// P2 = P2 & 0x1F | 0xA0; // 0x80,选通Y5,也就是外设的锁存器,将数据透传过去

// P2 &= 0x1F; //将打开的锁存器关闭,使任何一个锁存器都不打开

//

// P0 = 0xFF;//将LED全都灭掉的数据准备

// P2 = P2 & 0x1F | 0x80; // 0x80,选通Y4,也就是LED的锁存器,将数据透传过去

// P2 &= 0x1F; //将打开的锁存器关闭,使任何一个锁存器都不打开

P2 = P2 & 0x1F | 0xA0; // 0x80,选通Y5,也就是外设的锁存器,将数据透传过去

P0 = 0x00;//将外设全都灭掉的数据准备

P2 &= 0x1F; //将打开的锁存器关闭,使任何一个锁存器都不打开

P2 = P2 & 0x1F | 0x80; // 0x80,选通Y4,也就是LED的锁存器,将数据透传过去

P0 = 0xFF;//将LED全都灭掉的数据准备

P2 &= 0x1F; //将打开的锁存器关闭,使任何一个锁存器都不打开

}

//void main

void main()

{

Cls_Peripheral_lhc();//关闭外设的函数,将LED灯和蜂鸣器先关掉,可以按上面说的推一下这个函数关闭蜂鸣器和LED灯的原理

Timer1Init_lhc();

EA=1;//打开总中断

while(1);

}

int time_num=0;

void timer1()interrupt 3

{

if(++time_num>=500)

{

led_proc();

Led_Disp_lhc(ucled);

time_num=0;

}

}

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: