#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); //指定对应的二极管发亮 #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(); //初始化定时器 void LEDOM(); //流水灯函数声明 void daley(uint,uint); //延时函数声明 void (*p)(uint,uint); //定义一个(uint,uint)的函数指针 void OL_bt(uint x,uint y); //PWM调制函数声明 p=OL_bt; QX(1,0); QY(1,0); init(); while(1) { LEDOM(); (*p)(1000,100); } } void init() //定时器中断初始化 { TMOD=0x01; //设置定时器0为工作方式1 EA=1; //开总中断 ET0=1; TR0=1; //定时器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来调速 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); } 调光程序和距离一起,转载自大神aabbcc |