效果描述:初始状态点亮P0端口LED4,LED5两颗LED灯,LED实现从中间流向两边,然后再由两边流回初始状态的效果。
LED原理图(效果图):
项目采用方案:数组控制8位LED灯,定时器间隔20ms 刷新一次LED状态。
代码分享:
mian.c
#include"reg52.h"
#include"TIMERINIT.h"
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
/****配置LED****/
#define LED P0
/****对LED进行数组配置****/
unsigned char code Table[7]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7};
void main(void)
{
// LED=0xff;
T0Init(10);
while(1);
}
void T0int(void) interrupt 1
{
/****静态局部变量****/
static uint cnt=0; //计算延时时间
static uint i=0; //计数变量(位移次数)
TL0=VTL0;
TH0=VTH0; //定时1ms
cnt++;
if(cnt>=20)
{
cnt=0;
if(i<=7)
{
LED=Table[i];
i++;
if(i==7)
{
i=0;
}
}
}
}
time0.c
#include"reg52.h"
#include"TIMERINIT.h"
#define Fosc (11059200L)
unsigned char VTH0, VTL0 ,VTH1, VTL1;
void T0Init(unsigned char VT0)
{
TMOD=(TMOD&0xf0)|0x01;
VTH0=(65536-VT0*Fosc/12000)/256;
VTL0=(65536-VT0*Fosc/12000)%256;
TH0=VTH0;
TL0=VTL0;
EA=1;
ET0=1;
TR0=1;
}
time.h
#ifndef __TIMERINIT_H__
#define __TIMERINIT_H__
#define Fosc (11059200L)
extern unsigned char VTH0, VTL0, VTH1, VTL1;
extern void T0Init(unsigned char VT0);
//extern void T1Init(unsigned char VT1);
#endif
****转载请注明出处****
****请大佬指点****
****希望给个三连****