|
#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; //開(kāi)總中斷 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的值來(lái)改變PWM來(lái)調(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); } 調(diào)光程序和距離一起,轉(zhuǎn)載自大神aabbcc |
|