|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
利用函数调用实现流水灯多样控制, 很好的单片机初学实例。
- ^7 H6 D0 u% `' F' U, V, O5 x仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)2 m6 j+ r4 p! y7 Z c
![]()
6 a. x3 u: i/ i5 N: D$ U9 w5 w9 ?( W Y& ]6 @
单片机源程序如下:7 |9 E- _. Y9 n+ a& ^& ]- @2 G( T
- /***********************************************************************/
- #include "reg51.h"
- #define uchar unsigned char //定义unsigned char 为 uchar
- #define uint unsigned int
- sbit F1 = P3^0;
- sbit F2 = P3^1;
- uint time = 40; //通过改变TIME的参数可以改变流水灯的变换速度
- /***************一微秒延时子程序******************/
- void delayus(uint delay){
- while(delay--);
- }
- /***************一毫秒延时子程序******************/
- void delayms(uint delay){
- while(delay--)
- delayus(149);
- }
- /*******************************变换方式一 子函数 ***********************************/
- void run_LED_fun1()
- {
- uchar a,temp,temp1;
- temp=0x10;
- for(a=9;a>0;a--) //P1口LED灯依次点亮
- {
- P1=~temp;
- delayms(time);
- temp<<=1;
- }
- temp=0x01;
- for(a=9;a>0;a--) //P3口LED灯依次点亮
- {
- P3=~temp;
- delayms(time);
- temp<<=1;
- }
- temp=0x01; //P2口LED灯依次反向点亮
- for(a=9;a>0;a--)
- {
- P2=~temp;
- delayms(time);
- temp<<=1;
- }
- temp=0x80; //P0口LED灯依次反向点亮
- for(a=9;a>0;a--)
- {
- P0=~temp;
- delayms(time);
- temp>>=1;
- }
- temp=0x01;
- for(a=9;a>0;a--) //P0口LED灯依次点亮
- {
- P0=~temp;
- delayms(time);
- temp<<=1;
- }
- temp=0x80;
- for(a=9;a>0;a--) //P2口LED灯依次点亮
- {
- P2=~temp;
- delayms(time);
- temp>>=1;
- }
- temp=0x80; //P3口LED灯依次反向点亮
- for(a=9;a>0;a--)
- {
- P3=~temp;
- delayms(time);
- temp>>=1;
- }
- temp=0x80; //P1口LED灯依次反向点亮
- for(a=9;a>0;a--)
- {
- P1=~temp;
- delayms(time);
- temp>>=1;
- }
- temp=0xfe;
- for(a=8;a>0;a--)
- {
- P1=temp;
- delayms(time);
- temp<<=1;
- }
- temp=0xfe;
- for(a=8;a>0;a--)
- {
- P3=temp;
- delayms(time);
- temp<<=1;
- }
- temp=0xfe;
- for(a=8;a>0;a--)
- {
- P0=temp;
- delayms(time);
- temp<<=1;
- }
- temp=0x7f;
- for(a=8;a>0;a--)
- {
- P2=temp;
- delayms(time);
- temp>>=1;
- }
- temp=0x01;
- for(a=8;a>0;a--)
- {
- P2=temp;
- delayms(time);
- temp1=~temp;
- temp1<<=1;
- temp=~temp1;
- }
- temp=0x80;
- for(a=8;a>0;a--)
- {
- P0=temp;
- delayms(time);
- temp1=~temp;
- temp1>>=1;
- temp=~temp1;
- }
- temp=0x80;
- for(a=8;a>0;a--)
- {
- P3=temp;
- delayms(time);
- temp1=~temp;
- temp1>>=1;
- temp=~temp1;
- }
- temp=0x80;
- for(a=8;a>0;a--)
- {
- P1=temp;
- delayms(time);
- temp1=~temp;
- temp1>>=1;
- temp=~temp1;
- }
- }
- /*******************************变换方式二 子函数 ***********************************/
- void run_LED_fun2()
- {
- uchar a,temp,temp1,temp2;
- temp=0x01;
- temp1=0x80;
- for(a=8;a>0;a--) //P1口LED灯依次点亮
- {
- P1=~temp;
- P0=~temp;
- P3=~temp1;
- P2=~temp;
- delayms(time);
- temp<<=1;
- temp1>>=1;
- }
- temp=0x80;
- temp1=0x01;
- for(a=8;a>0;a--) //P1口LED灯依次点亮
- {
- P1=~temp;
- P0=~temp;
- P3=~temp1;
- P2=~temp;
- delayms(time);
- temp>>=1;
- temp1<<=1;
- }
- temp=0xfe;
- temp1=0x7f;
- for(a=8;a>0;a--)
- {
- P1=temp;
- P0=temp;
- P3=temp1;
- P2=temp;
- delayms(time);
- temp<<=1;
- temp1>>=1;
- }
- temp=0x7f;
- temp1=0xfe;
- for(a=8;a>0;a--)
- {
- P1=~temp;
- P0=~temp;
- P3=~temp1;
- P2=~temp;
- delayms(time);
- temp2=~temp;
- temp>>=1;
- temp2=~temp;
- temp1<<=1;
- }
- }
- /*******************************变换方式三 子函数 ***********************************/
- void run_LED_fun3()
- {
- P0=0x00;
- P1=0xff;
- P2=0xff;
- P3=0xff;
- delayms(5*time);
- P0=0xff;
- P1=0x00;
- P2=0xff;
- P3=0xff;
- delayms(5*time);
- P0=0xff;
- P1=0xff;
- P2=0xff;
- P3=0x00;
- delayms(5*time);
- P0=0xff;
- P1=0xff;
- P2=0x00;
- P3=0xff;
- delayms(5*time);
- P0=0xff;
- P1=0x00;
- P2=0xff;
- P3=0x00;
- delayms(5*time);
- P0=0x00;
- P1=0xff;
- P2=0x00;
- P3=0xff;
- delayms(5*time);
- P0=0xff;
- P1=0xff;
- P2=0xff;
- P3=0xff;
- }
- /*******************************变换方式四 子函数 ***********************************/
- void run_LED_fun4()
- {
- uchar a,temp,temp1,temp2;
- P0=0xff;
- P1=0x00;
- P2=0xff;
- P3=0xff;
- delayms(time);
- temp=0xfe;
- temp1=0xfe;
- for(a=8;a>0;a--)
- {
- P1=~temp;
- P3=temp1;
- delayms(time);
- temp2=~temp;
- temp<<=1;
- temp2=~temp;
- temp1<<=1;
- }
- temp=0xfe;
- temp1=0x7f;
- for(a=8;a>0;a--)
- {
- P3=~temp;
- P2=temp;
- delayms(time);
- temp2=~temp;
- temp<<=1;
- temp2=~temp;
- temp1>>=1;
- }
- temp=0xfe;
- temp1=0x7f;
- for(a=8;a>0;a--)
- {
- P2=~temp;
- P0=temp1;
- delayms(time);
- //temp2=~temp1;
- temp<<=1;
- //temp2=~temp;
- temp1>>=1;
- }
- temp=0x7f;
- temp1=0xfe;
- for(a=8;a>0;a--)
- {
- P0=~temp;
- P1=temp1;
- delayms(time);
- temp2=~temp;
- temp>>=1;
- temp2=~temp;
- temp1<<=1;
- }
- }
- /*
- void change_speed()
- {
- if(F1 == 0)
- {
- delayms(10);
- if(F1 == 0)
- {
- while(!F1);
- time = time +20;
- }
- }
- if(F2 == 0)
- {
- delayms(10);
- if(F2 == 0)
- {
- while(!F2);
- time = time -20;
- }
- }
- }
- */
- /*******************************主函数 ***********************************/
- void main()
- {
- while(1)
- {
- run_LED_fun1();
- run_LED_fun2();
- run_LED_fun3();
- run_LED_fun4();
- }
- }4 i6 n. U" F7 ~+ y( c. @
I4 ]: a7 [- w! W2 D8 x% h; b8 s$ w
|
|