keil呼吸灯程序代码(呼吸灯程序c代码)
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
电流大小取的适中就行了,再计算要串联的电阻值