我用AT89S51.C51单片机编写花样流水灯程序,需要的命令

我用AT89S51.C51单片机编写花样流水灯程序,需要的命令,第1张

一般每一个流水灯通过1位来控制,该位为0则点亮,为1则灭。软件中可能用到:

1、 *** 作符<<或>>,比如8位流水灯,初始全灭,然后顺序点亮

uchar x=0xFF,i

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

{

x<<=1; //左移1位,最低位补0

P1 = x; //输出,假设LED接在P1口的8个脚上

delay300ms();//延时300ms,时间可根据效果自定,这个函数需要自己编制,我就不写了

}

2、循环移位函数_crol_、_cror_等(这是8位的,还有16位和32位的,原型在C51的INTRINSH头文件里)

比如8位流水灯,第一态:前4个亮,后四个灭,第二态右移移位,变成8321灭,7654亮,如此循环

uchar x=0x0F,i

while(1)

{

_cror_(x,1); //x循环右移1位,原最低位移到最高位,0x0F->0x87->0xC3

P1 = x; //输出,假设LED接在P1口的8个脚上

delay300ms();//延时300ms,时间可根据效果自定,这个函数需要自己编制,我就不写了

}

以上提供两种思路和样例,具体应用灵活掌握,不难吧?

下次问和时间有关的单片机问题记得标明系统时钟频率。

假设晶振频率12MHz。一个机器周期是1uS。

D1:

MOV R4, #20;1

D2:

MOV R5, #248;1

DJNZ R5, $ ;2X248=496uS

DJNZ R4, D2 ;2X20+1X20+20X496+1=9981

如果这是个子程序,调用和返回各占2uS,总延时时间9985uS,约10毫秒。

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

sbit beep=P2^1;

sbit LED1=P0^0;

sbit LED2=P0^1;

uint a=0,b=0,c=0;

void delay(uint a);

void delay(uint a) //延时

{

uint i,j;

for(i=0;i<a;i++)

for(j=0;j<100;j++);

}

void main()

{

beep=0;

IT0=1; //外部中断0后沿触发

IT1=1; //外部中断1后沿触发

EX0=1; //开外部中断0

EX1=1; //开外部中断1

LED1=1;

LED2=1;

delay(800);

EA=1;

while(1)

{ if(a==1)

{

beep=~beep; //如果外部中断0触发以1802毫秒周期报警

delay(180);

LED1=~LED1;

}

if(b==1)

{

beep=~beep; //如果外部中断1触发以902毫秒周期报警

delay(90);

LED2=~LED2;

}

if((a==1 && b==1) || c==1) //如果两个中断同时触发或者人为置位

{

a=0;

b=0;

c=1;

beep=~beep; //以3002毫秒周期报警

LED2=~LED2;

delay(300);

LED1=~LED1;

EA=0;

} } }

void baojing1() interrupt 0

{

beep=~beep;

LED1=~LED1;

delay(100);

a=1;

}

void baojing2() interrupt 2

{

beep=~beep;

LED2=~LED2;

delay(100);

b=1;

}

以上就是关于我用AT89S51.C51单片机编写花样流水灯程序,需要的命令全部的内容,包括:我用AT89S51.C51单片机编写花样流水灯程序,需要的命令、我想问一下以下AT89S51单片机的延时程序的计算过程、求懂AT89S51单片机的大神 解释一下这段程序是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9325687.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存