51单片机c语言编写一个流水灯程序,要求如下(不能用数组,8个led指示灯从两边往中间移动,然后再分开)

51单片机c语言编写一个流水灯程序,要求如下(不能用数组,8个led指示灯从两边往中间移动,然后再分开),第1张

 //流水

#include "reg52.h"

#define LED_PORT P3

void delay(unsigned char time)

{

 unsigned char i,j,k

 for(i=0i<timei++)

 {

  for(j=0j<200j++)

  {

   for(k=0k<200k++)

  }

 }

}

void main()

{

 unsigned char i,halfbyteh=0x80,halfbytel=0x01

 while(1)

 {

  halfbyteh=0x80

  halfbytel=0x01

  for(i=0i<8i++)

  {

   //LED_PORT=halfbyteh|halfbytel//高电平点亮  

   LED_PORT=~(halfbyteh|halfbytel)//低电平点亮

   halfbyteh=halfbyteh>>1

   halfbytel=halfbytel<<1

   delay(10)

  }

 }

}

第4题

89S51 单片机的P1 口接有 8个 LED,当某一端口输出为“0”时,相应的 LED 点亮,P3.2、P3.3、P3.4、P3.5 分别接有四个按钮 K1~K4,按下按钮时,相应引脚被接地。现要求编写可键控的流水灯程序,当 K1 按下时,开始流动,K2 按下时停止流动,全部灯灭,K3 使灯由上往下流动,K4 使灯由下往上流动。

#include "reg51.h"

#include "intrins.h"

#define uchar unsigned char

void mDelay(unsigned int DelayTime)

{ unsigned int j=0

for(DelayTime>0DelayTime--)

{ for(j=0j<125j++)

{} }}

uchar Key()

{ uchar KeyV

uchar tmp

P1=P1|0x3c//四个按键所接位置

KeyV=P1

if((KeyV|0xc3)==0xff) //无键按下

return(0)

mDelay(10) //延时,去键抖

KeyV=P1

if((KeyV|0xc3)==0xff)

return(0)

else

{ for(){ tmp=P1

if((tmp|0xc3)==0xff)

break}

return(KeyV)}}

void main()

{ unsigned char OutData=0xfe

bit UpDown=0

bit Start=0

uchar KValue

for()

{ KValue=Key()

switch (KValue)

{ case 0xfb: //P3.2=0,Start

{ Start=1

break}

case 0xf7: //P3.3=0,Stop

{ Start=0

break}

case 0xef: //P3.4=0 Up

{ UpDown=1

break}

case 0xdf: //P3.5=0 Down

{ UpDown=0

break}

}

if(Start)

{ if(UpDown)

OutData=_crol_(OutData,1)

else

OutData=_cror_(OutData,1) P2=OutData

}

else

P2=0xff//否则灯全灭

mDelay(1000)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11156390.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存