keil呼吸灯程序代码(呼吸灯程序c代码)

http://www.itjxue.com  2023-03-03 13:09  来源:未知  点击次数: 

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

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

假设如下这八个灯依次接在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

STC12C5A60S2制作呼吸灯C语言程序怎么写

呼吸灯的程序:

/****************************************************************************?

???????功能:LED灯慢慢变暗,再慢慢变亮。

??????????????????用定时器模拟的PWM调制。

单片机:AT89S52???????????????????????????????????????????????????

******************************************************************************/?

#include?reg52.h?

#define?V_TH0??0XFF??????????????//设定定时器0,高8位的初值??????????????

#define?V_TL0??0XF6??????????????//设定定时器0,低8位的初值????????????

#define?V_TMOD?0X01??????????????//设定定时器0的工作方式为:方式1(计数位数是16位??????????????????????????????????//,由TL0作为低8位、TH0作为高8位)

#define?uchar?unsigned?char?

#define?uint?unsigned?int????????????????

void?init_sys();?????????????????????????//系统初始化函数

void?delay(uint);????????????????????????//延时函数

unsigned?char?ZKB;???????????????????????//占空比

void?main?(void)?

{?

???init_sys();????????????????????????????//初始化

???while(1)

???{??

??????for(ZKB=5;ZKB40;ZKB=ZKB+2)?????????//每调节一次占空比,就延时大概8ms左右,这使得LED现象更明显

???????????{

????????????????????delay(8);?

????????????}

??????for(ZKB=40;ZKB5;ZKB=ZKB-2)

???????????{

????????????????delay(8);?

???????????}

????

???}?

}

void?delay(uint?z)

{

?uint?x,y;

?for(x=z;x0;x--)

??for(y=100;y0;y--);?

}

void?init_sys()????????????/*系统初始化函数*/?

{?

??/*定时器初始化*/?

??TMOD=V_TMOD;?????????

??TH0=V_TH0;?

??TL0=V_TL0;?

??TR0=1;?

??ET0=1;?

??EA=1;?

}

void?timer0(void)?interrupt?1?using?2??????????????

{?

?static?uchar?click=0;????//中断次数计数器变量

?TH0=V_TH0;???????????????//重新恢复定时器初始值

?TL0=V_TL0;?

?++click;???????????????????????//每计数10次,产生一个中断,并且click增加一个

?if?(click=100)

?????????click=0;??????????????//计满一百次,这重新计数。

?????????????????????????????????????????/*因为计一次数的时间是1us,10次产生一个中断,也就是一个中断10us。100个中断为1ms。

????????????????????????????????????则,可以在这100个数中随便取值,用于表示占空比的多少,占空比的范围为(1~100)*/

?

?if?(click=ZKB)??????????//当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整?

???P1=0x00;??????????????????????//P1口接的是LED灯

?else?

???P1=0xff;

}

?

此程序的总中断时间为100ms,即频率为:100KHZ,占空比从5?变为40(即5%~25%)。

怎么在Keil C51 v709中写程序实现灯泡依次亮

在keil里新建一个工程并保存,再新建一个文本然后保存文本为main.c(名字随便去,但是格式要为.c)?,把下面的代码放到main.c里。点开(Target)旁边的+号(展开工程)看到

source?Group?文件夹,选中右键菜单倒数第四个有Add?files?to?Group"source?Group",选择它,然后会打开文件夹选择刚才的main.c点添加(在右下角,点一下就可以了),再点Close。现在右键Target,有工程选项(右键菜单第一个),会打开选项卡,第三个选项卡output里勾选Creat?hex?file(产生hex文件),现在点工程菜单里有一个build?target,就可以产生hex文件了,把文件下载到单片机里就好了。注意:单片机的P1口应该接7个LED灯,才会有这样的效果

代码如下(以下程序以单片机at89c51为例):

#include"reg51.h"

#define?P1?GPIO1

void?delay1s();

void?main()

{

????GPIO1=0x80;??????//初始化P1口???????

????while(1)

????{

????????if(GPIO1==0x00)?GPIO1=0x80;???????//实现P1口7个灯循环亮

????????delay1s();????????????????????????//灯亮1S

????????else?GPIO1=GPIO11;??????????????//下一个灯亮,使灯依次亮

?????}

}

Keil编程:51单片机键盘控制LED

#includereg51.h

#includeintrins.h

#define?uchar?unsigned?char

uchar?led1,led2;

sbit?key1=P1^0;

sbit?key2=P1^1;

sbit?key3=P1^2;

void?delay(int?a)

{

uchar?i;

while(a--)for(i=0;i120;i++);

}

main()

{

unsigned?int?i;

led1=0xfe;

led2=0xfc;

while(1)

{

P0=0x55;

if(key1==0)

{

P0=led1;

led1=_crol_(led1,1);

delay(200);

}

if(key2==0)

{

P0=led2;

led1=_crol_(led1,2);

delay(200);

}

if(key3==0)

{

for(i=1;i500;i++)

{

P0=0xff;

delay(i);

P0=0x00;

delay(500-i);

}

for(i=1;i500;i++)

{

P0=0x00;

delay(i);

P0=0xff;

delay(500-i);

}

}

}

}

单片机制作呼吸灯的C语言程序怎样编写

#includereg51.h

sbit LED0=P0^0;

sbit wei=P1^1;

sbit duan=P1^0;

sbit lcden=P1^7;

sbit dianzhen=P1^3;

sbit leden=P1^2;

void Delay(unsigned int t);

void main (void)

{

unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值

lcden=0;

P0=0x00;

dianzhen=0;

P0=0xff;

wei=0;

duan=0;

while (1) //主循环

{

LED0=1;

Delay(150000); //特意加延时,可以看到熄灭的过程

for(PWM_LOW=1;PWM_LOWCYCLE;PWM_LOW++)

{

LED0=0;

Delay(PWM_LOW);

LED0=1;

Delay(CYCLE-PWM_LOW);

}

for(PWM_LOW=CYCLE-1;PWM_LOW0;PWM_LOW--)

{

LED0=0;

Delay(PWM_LOW);

LED0=1;

Delay(CYCLE-PWM_LOW);

}

}

}

void Delay(unsigned int t)

{

while(t--);

}

求助,51单片机用PWM的RGB呼吸灯程序怎么写?

#includereg52.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=1;pwmset;pwm++)

????{?

?????????????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

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

(责任编辑:IT教学网)

更多

推荐Flash动画文章