|
#include"reg52.h"
typedef unsigned char uchar;
typedef unsigned int uint;
sbit ENA=P0^0;
sbit IN1=P0^1;
sbit IN2=P0^2;
sbit IN3=P0^3;
sbit IN4=P0^4;
sbit ENB=P0^5;
uint k,j;
#define OFF ENA=0;ENB=0;
#define ON ENA=1;ENB=1;
#define LEDL(key) P2&=(0xfe<<key); //指定對(duì)應(yīng)的二極管發(fā)亮
#define LEDH(key) P2|=(0x01<<key); //指定LED熄滅
#define QX(x,y) IN1=x,IN2=y;
#define QY(x,y) IN3=x,IN4=y;
void main()
{
void init(); //初始化定時(shí)器
void LEDOM(); //流水燈函數(shù)聲明
void daley(uint,uint); //延時(shí)函數(shù)聲明
void (*p)(uint,uint); //定義一個(gè)(uint,uint)的函數(shù)指針
void OL_bt(uint x,uint y); //PWM調(diào)制函數(shù)聲明
p=OL_bt;
QX(1,0);
QY(1,0);
init();
while(1)
{
LEDOM();
(*p)(1000,100);
}
}
void init() //定時(shí)器中斷初始化
{
TMOD=0x01; //設(shè)置定時(shí)器0為工作方式1
EA=1; //開總中斷
ET0=1;
TR0=1; //定時(shí)器0中斷允許
}
OStime() interrupt 1
{
static char n;
if(n==0)
{
OFF;
TH0=(65536-j)/256;
TL0=(65536-j)%256;
n=1;
return;
}
if(n==1)
{
ON;
TH0 = (65536-k)/256;
TL0 = (65536-k)%256;
n=0;
return;
}
}
void OL_bt(uint x,uint y) //改變x,y的值來改變PWM來調(diào)速 x增大y減小速度減小 x減小y增大速度增大
{
k=y;
j=x;
}
void daley(uint x,uint y)
{
uint a,b;
for(a=x;a>0;a--)
for(b=y;b>0;b--);
}
void LEDOM()
{
LEDL(0);
daley(100,100);
LEDL(1);
daley(100,100);
LEDL(2);
daley(100,100);
LEDL(3);
daley(100,100);
LEDL(4);
daley(100,100);
LEDL(5);
daley(100,100);
LEDL(6);
daley(100,100);
LEDL(7);
daley(100,100);
LEDH(0);
daley(100,100);
LEDH(1);
daley(100,100);
LEDH(2);
daley(100,100);
LEDH(3);
daley(100,100);
LEDH(4);
daley(100,100);
LEDH(5);
daley(100,100);
LEDH(6);
daley(100,100);
LEDH(7);
daley(100,100);
}
|
|