51单片机用汇编语言如何设计8个轮流呼吸的呼吸灯?

51单片机用汇编语言如何设计8个轮流呼吸的呼吸灯?,第1张

因为我不知道你这个板子的硬件,我就假设一下吧,你自己对照着看看,关键是流程

假设如下这八个灯依次接在P0口的兆册八个口上,高电平为灯亮,低电平为灯灭,程序如下

ORG 0000H

AJMP START

START:MOV P0,#01H;()只有第一个灯亮

ACALL DELAY;延迟,不加延迟的话 你根本看不起清到底那个灯亮的

MOV P0,#02H()只有第二个灯亮

ACALL DELAY

MOV P0,#04H()只有第三个核猜伍灯亮

ACALL DELAY

MOV P0,#08H()只有第四个灯亮

ACALL DELAY

MOV P0,#10H()只有第五个灯亮

ACALL DELAY

MOV P0,#20H()只有第六个灯亮

ACALL DELAY

MOV P0,#40H()只有第七个灯亮

ACALL DELAY

MOV P0,#80H()只有第八个灯亮

ACALL DELAY

AJMP START;周而复始

DELAY: MOV R6,#40延改或迟程序,晶振为3.57MHZ时大概是0.1S

0.1SL1: MOV R5,#246

0.1SL2: NOP

DJNZ R5,0.1SL2

DJNZ R6,0.1SL1

RET

END

#include<reg52.h>  

//端口定义

sbit RED    =    P2^0//红光控制端,0点亮 

sbit GREEN  =    P2^1//绿光控制端,0点亮 

sbit BLUE   =    P2^2//蓝光控制端,0点亮

//函数声明

void Delay(unsigned int t)  

void RGB(unsigned char R ,unsigned char G ,unsigned char B) 

//主函数

void main (void)

{   

    RED = 1  GREEN = 1  BLUE = 1 

    //开始时先关闭LED,当然由于单片机上电就输出 1 ,所以可不写               

    while (1)         //主循环

    {

        //7色光依陵坦次逐渐变亮

        //改变调用顺序可以改变颜色先后次序

        RGB(1,1,0)

        RGB(1,0,1)

        RGB(1,0,0)

        RGB(0,1,1)

        RGB(0,1,0)

        RGB(0,0,1)

        RGB(0,0,0)

    }

}

 

void Delay(unsigned int t)

{

 while(--t)

}

//7色光依次逐渐变亮

RGB(unsigned char R ,unsigned char G ,unsigned char B)

{

    unsigned int pwm , set = 500         

    for(pwm=1pwm<setpwm++)

    { 

             RED    = 1        //熄灭LED 

             GREEN  = 1

             BLUE   = 1 

             Delay(set-pwm)//延时长度,500次循环中从599减至1

             RED    = R        逗汪皮

             GREEN  = G

             BLUE   = B        

             Delay(pwm)//延时长度,500次循环中从1加至599

    }

}

//改变set可以改变变化快慢

//同理你可以写出7色逐渐变暗的程序

这里的程序只是提供一个思路,你如果直接复制粘贴的话会出现格式错误

把每两行中间的空行删掉一般就可消除格式错误

如果再有什么小问题根据编译信息提示稍作修改就行

串电阻的话一般这样算:

R = [ U - U(LED) ] / I

U是LED和电阻总的电压,U(LED)是LED工作电压,I 是LED工作电流,一般10--20mA

电流大小取的适山差中就行了,再计算要串联的电阻值

#include\x0d\x0asbit LED0=P0^0\x0d\x0asbit wei=P1^1\x0d\x0asbit duan=P1^0\x0d\x0asbit lcden=P1^7\x0d\x0asbit dianzhen=P1^3\x0d\x0asbit leden=P1^2\x0d\x0avoid Delay(unsigned int t)\x0d\x0avoid main (void)\x0d\x0a{\x0d\x0aunsigned int CYCLE=600,PWM_LOW=0//定义周期并赋值\x0d\x0alcden=0\x0d\x0aP0=0x00\x0d\x0adianzhen=0\x0d\x0aP0=0xff\x0d\x0awei=0\x0d\x0aduan=0\x0d\x0awhile (1) //主循环\x0d\x0a{\x0d\x0aLED0=1\x0d\x0aDelay(150000)//特意加延时,可以看到熄灭的过程\x0d\x0afor(PWM_LOW=1PWM_LOW0PWM_LOW--)\x0d\x0a{\x0d\x0aLED0=0\x0d\x0a \x0d\x0aDelay(PWM_LOW)\x0d\x0a \x0d\x0aLED0=1\x0d\x0a \x0d\x0aDelay(CYCLE-PWM_LOW)\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0avoid Delay(unsigned int t)\x0d\x0a{\x0d\x0awhile(t--)\x0d\x0a}


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

原文地址: http://outofmemory.cn/yw/12560347.html

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

发表评论

登录后才能评论

评论列表(0条)

保存