-
2021-05-22 17:48:41
//晶振11.0592
//灯光在单片机控制之下完成由亮到暗的逐渐变化,感觉像是在呼吸
//本例在51hei-5型开发板上实现了一个数码管和一个LED灯一起实现呼吸效果
//文件下载:http://www.51hei.com/f/fxd.rar
#include#define uint unsigned int
#define uchar unsigned char
sbit D1=P0^7;
uchar sr;
uchar jf;
uchar code table[]={
0,1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16,17,18,
19,20,21,22,23,24,25,26,27,
28,29,30,31,32,33,34,35,36,
37,38,39,40,41,42,43,44,45,
46,47,48,49};
void light(uchar num);
void delay(uint z);
void main()
{
//设置计数器
//选取计数方式1
TMOD = 0x11;
//给计数器写初值
TH0 = 0;
TL0 = 0;
//操作单片机
//开启CPU中断
EA = 1;
///
//开启定时器T0位中断
ET0 = 1;
//开启计数器
TR0 = 1;
//操作二极管
P1=0;
while(1)
{
if(sr<50)
light(sr);
else sr=0;
}
}
//子函数
void light(uchar num)
{
uchar tme;
D1 = 0;
tme = table[num];
delay(tme);
D1 = 1;
delay(49-tme);
}
//中断函数
void time () interrupt 1
{
//自变量自加
if (jf<2)
{
jf++;
TH0 =0;
TL0 = 0;
}
if (jf==2)
{
//写初值
jf=0;
TH0 = 254;
TL0 = 254;
sr++;
}
}
void delay(uint z)
{
uint x,y;
for(x=10;x>0;x--)
for(y=z;y>0;y--);
}
更多相关内容 -
基于51单片机的呼吸灯
2018-01-13 16:12:01用51单片机做的一盒呼吸灯的仿真,用的仿真软件是proteus -
呼吸灯 51单片机 仿真
2019-05-27 17:14:49047 51单片机 呼吸灯 仿真 更多资料请访问我下载主页 void main() { upCounter = MIN; downCounter = MAX; //计数器初始化 TMOD = 0x01; //设置定时器工作方式 TH0 = 0xF0; TL0 = 0xF0 ; //T0初始化值 EA = ... -
Pole.25°——51呼吸灯之定时器实现——2020-8-21
2020-08-21 17:51:38呼吸灯之定时器实现前言一、呼吸灯原理二、实现代码1.单片机介绍2.代码总结 前言 初入嵌入式,相信大家就是从点亮一个LED灯开始的吧。成功点亮后,我们接下来干的就是让LED灯闪烁起来,当LED闪烁起来后,我们已经不...前言
初入嵌入式,相信大家就是从点亮一个LED灯开始的吧。成功点亮后,我们接下来干的就是让LED灯闪烁起来,当LED闪烁起来后,我们已经不满足于此,想追求更难一点的,让灯呼吸起来!一、呼吸灯原理
呼吸灯指灯光在一个连续的正弦电压控制之下完成由亮到暗再由暗到亮的逐渐变化,从肉眼观察来看像是灯在呼吸。此次我们没有选用单片机的PWM功能改变占空比的方法实现,而是用定时器模拟PWM输出来实现呼吸灯的。
定时器实现要点:
1.呼吸灯周期要确定好,一般选择 T=10ms(100Hz),即10ms改变一次占空比,效果比较不错。(选用 T>20ms 以上会出现闪烁情况)( 18ms~10ms 之间都可以)
2.定时器采用中断方式,故中断时间不能太短,需确定好进入中断的时间。如若中断时间过短,可能中断未执完,就再次进入下一次中断了!!!(因为中断时间越短,你单位周期内就可以改变更多的占空比:例如200us进一次中断,T = 10ms ,你每进一次中断改变一次占空比,最多可以改变50次,所以呼吸灯PWM只有五十个等级。然而呼吸灯要想效果好,至少要有100个等级!)
3.呼吸灯两个重要变量:呼吸方向、呼吸步长;前者实现由 亮到暗 再从 暗到亮 方向的改变。后者改变的是呼吸的快慢。二、实现代码
1.单片机介绍
如下:
1.采用的8位51内核单片机,采用内部震荡8MHz。 2.定时器采用的是8位计数器,其频率最后分频为1MHz(1us)。 3.采取定时器中断方式,由于是八位计数器,即一次最多定时256us。 4.LED采用高电平点亮
2.代码
代码如下(示例):
typedef struct { //定义可以位操作的结构 unsigned char b0:1; unsigned char b1:1; unsigned char b2:1; unsigned char b3:1; unsigned char b4:1; unsigned char b5:1; unsigned char b6:1; unsigned char b7:1; }BitStruct; typedef union { unsigned char AllByte; BitStruct OneBit; }BitUnion; extern BitUnion Flag; #define LedDirFlag Flag.OneBit.b1 //定义方向标志位 volatile int breath_step,time_Tms;
void interrupt TIME0_INT() //定时器0中断 { if(T0IF) //定时器溢出 { T0IF = 0; TMR0 = 56; //200us进一次 time_Tms++; if(time_Tms < 90){ //周期18ms(不能再高了,不然会闪烁) if(time_Tms < breath_cnt) //PWM输出 PB2 = 0; else PB2 = 1; //此处置0 ,上面置1会有不一样的效果; } //就是点亮电平持续时间的问题,此时效果会有一段时间灭 else{ time_Tms = 0; if(LED_direction){ //方向 由暗变亮 breath_step -= 1; //步长控制 if(breath_step < 0){ breath_step = 0; LedDirFlag = 0; } } else{ //方向 由亮变暗 breath_step += 1; if(breath_step > 110){ //此变量可以控制电平的持续时间 breath_step = 110;//此值越大可以有一段时间常亮或者长灭 LedDirFlag = 1; } } } }
总结
希望能对大家有用!!!
-
51呼吸灯源码(PWM调制)
2020-07-14 21:14:00图2中 LED灯阳极3需连接到图1射极跟随器电路输出DAOUT。 #include <reg52.h> sfr P4 = 0xe8; /C语言中声明P4口特殊功能寄存器地址/ sbit DAC_DATA = P4^4;//DA数据口 unsigned char DAC_VAL;//占空比参数 模拟...
图2中 LED灯阳极3需连接到图1射极跟随器电路输出DAOUT。
#include <reg52.h>
sfr P4 = 0xe8; /C语言中声明P4口特殊功能寄存器地址/
sbit DAC_DATA = P4^4;//DA数据口
unsigned char DAC_VAL;//占空比参数 模拟8位DA输出,取值范围0-255
unsigned char pwm_t;//周期#define MAIN_Fosc 11059200UL //宏定义主时钟HZ
typedef unsigned int INT16U;/====================================
函数名 :void delay(INT16U ms)
参数 :ms,毫秒延时形参
返回值 :无
描述 :12T 51单片机自适应主时钟毫秒级延时函数
====================================/
void delay(INT16U ms)
{
INT16U i;
do{
i = MAIN_Fosc / 96000;
while(–i); //96T per loop
}while(–ms);
}
//定时器0中断
void timer0() interrupt 1
{
pwm_t++;//周期自加到255溢出后自动归零
if(pwm_t <= DAC_VAL)// 设置占空比
DAC_DATA = 1;
else
DAC_DATA = 0;
}
void main()
{
bit flag = 0;
TMOD |= 0x02;//8位自动重装模块
TH0 = 220;
TL0 = 220;//11.0592M晶振下占空比最大比值是256,输出100HZ
TR0 = 1;//启动定时器0
ET0 = 1;//允许定时器0中断
EA = 1;//总中断允许
DAC_VAL = 80;//LED10灯点亮最低电压
while(1)
{
delay(5);
if(DAC_VAL == 255)
flag = 1;
else if(DAC_VAL == 80)
flag = 0;
if((DAC_VAL < 255) && (flag == 0))
DAC_VAL++;
else if((DAC_VAL > 80) && (flag == 1))
DAC_VAL–;}
}
-
51单片机七彩呼吸灯protues仿真.rar
2021-09-03 09:44:0051单片机七彩呼吸灯protues仿真 -
51单片机 呼吸灯 七彩呼吸灯
2020-11-07 12:50:59课程设计题十八:七彩呼吸灯 要求: (1) 起始状态时,七个灯处于同频率“呼吸”状态。 修改:8个灯 (2) 按键1按下时,1号到8号依次由亮到暗“呼吸”。 (3) 按键2按下时,1号到8号依次由暗到亮“呼吸”。 (4) ...课程设计题十八:七彩呼吸灯
要求:
(1) 起始状态时,七个灯处于同频率“呼吸”状态。 修改:8个灯
(2) 按键1按下时,1号到8号依次由亮到暗“呼吸”。
(3) 按键2按下时,1号到8号依次由暗到亮“呼吸”。
(4) 按键3按下时,恢复起始亮法。1 先做一个呼吸灯
由易到难,先做一个呼吸灯。
呼吸灯是让小灯从暗到亮变化,然后从亮回到暗。并一直循环。
51单片机只能依靠定时器完成PWM。并且基于PWM原理下,proteus无法仿真出小灯的亮暗,只能看实物。#include "reg51.h" #include <intrins.h> /* * 10ms的PWM频率是100HZ * 高电平时间+低电平时间=10ms * 低电平时间越长,小灯亮度越高 */ sbit led0 = P2 ^ 0;
效果:
2 完成题目
(2) 按键1按下时,1号到8号依次由亮到暗“呼吸”。
(3) 按键2按下时,1号到8号依次由暗到亮“呼吸”。
(4) 按键3按下时,恢复起始亮法。摄像头拍不清楚,肉眼看得更清楚。
-
51呼吸流水灯
2019-04-02 21:51:4651 单片机 呼吸流水灯,可以实现循环控制16盏LED灯想呼吸灯一样熄灭点亮 -
c51呼吸灯-pwm控制led的渐亮灭
2010-09-29 21:14:03这是一个利用c51定时器产生pwm来控制led的渐亮灭,暂用资源少,值得一看~~ -
51单片机应用开发 包括呼吸灯 RTX51操作系统 远程仓库监控
2018-04-10 10:06:1751单片机应用开发 包括呼吸灯 RTX51操作系统 远程仓库监控 多温度采集系统 密码保险箱等应用实例 -
51单片机呼吸灯C语言版.doc
2021-05-25 08:16:29基于单片机与PWM的呼吸灯设计实训指导教师:班 级:设 计 人姓名:设...关 键 词AT89C51,PWM(脉宽调制)一、设计要求:呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上... -
51单片机(呼吸灯)汇编语言版 - 范文中心
2021-05-23 12:06:42单片机实训课程之:呼吸灯一. 设计要求 二. 相关原理 三. 论证分析 四. 硬件原理 五. 软件程序设计 六. 测试方法与结果 七. 使用说明(附录)一. 设计要求呼吸灯顾名思义就是让LED 灯的闪烁像呼吸一样,时呼时吸,时亮... -
呼吸灯源程序
2014-10-23 09:24:52看过雷蛇鼠标的呼吸灯吧?灯慢慢变亮,慢慢熄灭。 这个是我从网上下载下来的源程序,经过修改并且调试,跟原来的有了少许出入,但是更加接近雷蛇鼠标的呼吸灯效果。在这里留给有需要的朋友。 -
利用51单片机实现呼吸灯
2019-07-27 00:01:56利用PWM波的占空比进行控制LED灯的亮度 #include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit LED=P2^0; uint i,pwm,y=500; void delay(uint i) //延时函数 { int x; for(x=i;... -
51单片机—呼吸灯(PWM波)
2019-05-25 17:27:4851单片机:呼吸灯(PWM波) 编写语言:C 运行情况:完美运行 -
给你的51单片机作品加个呼吸灯(程序)
2021-05-21 12:50:57本帖最后由 xiashan 于 2015-4-5 18:30 编辑看着笔记本待机的时候,电源灯变成忽明忽暗,手就不自在了。研究了一番,写出了代码,加到自己做的“玩具”上。可能会觉得这个东西没有什么实在意义,只不过看起来没闪烁... -
【51单片机快速入门指南】3.2.1:PWM、呼吸灯与舵机
2021-11-16 05:00:38目录硬知识PWM(脉冲宽度调制)基本原理脉宽调制分类上机实战呼吸灯main.c中断服务函数修改TIM.c中的中断服务函数效果开发板电路分析 普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit ... -
用51单片机制作呼吸灯.zip-综合文档
2021-05-19 19:05:59用51单片机制作呼吸灯.zip -
51单片机(呼吸灯)C语言版
2021-05-19 19:40:57《51单片机(呼吸灯)C语言版》由会员分享,可在线阅读,更多相关《51单片机(呼吸灯)C语言版(16页珍藏版)》请在人人文库网上搜索。1、基于单片机和PWM的呼吸灯设计培训讲师:类级别:设置米名称:设定计划期间:设置米... -
51单片机pwm实现呼吸灯
2015-11-18 19:29:14本例程由c语言编写,使用stc89c52rc单片机定时器实现,6ms周期pwm输出,实现led灯31级亮度调节。 -
51单片机基于定时器实现呼吸灯(C8051F020单片机)
2021-05-22 01:43:58一、实现思路原理:利用PWM信号控制LED灯的亮暗程度,实现LED灯由暗到亮又由亮到暗的渐变过程。 方法:通过定时器设置LED所接引脚的高低电平持续时间,模拟出PWM波。二、关键问题——PWM的频率和占空比1.设定PWM的... -
用51单片机制作呼吸灯
2021-05-23 12:52:03//晶振11.0592//灯光在单片机控制之下完成由亮到暗的逐渐变化,感觉像是在呼吸//本例在51hei-5型开发板上实现了一个数码管和一个led灯一起实现呼吸效果//文件下载:http://www.51hei.com/f/fxd.rar#includereg52.h>... -
基于51单片机的按键控制PWM呼吸灯
2019-02-21 16:35:39干货,干货,代码可用,51单片机按键控制PWM呼吸灯,#include #define uchar unsigned char #define uint unsigned int sbit s1=P3^0; sbit s2=P3^4; sbit s3=P3^5; sbit beep=P2^3; uint pwm; uint num; //延时 ... -
51单片机(呼吸灯)汇编语言版.doc
2021-05-23 12:08:1151单片机(呼吸灯)汇编语言版长江工程职业技术学院单片机实训报告 PAGE - 8 -单片机实训课程之:呼吸灯一.设计要求二.相关原理三.论证分析四.硬件原理五.软件程序设计六.测试方法与结果七.使用说明(附录)一.设计要求... -
51单片机—— PWM、呼吸灯
2021-03-11 16:25:38小灯的有效显示应该是50hz,所以周期是20ms ... //位定义,led灯引脚 sbit LED2 = P2^3; void InterruptInit(); //中断初始化配置的函数声明 void Time0(); //定时器0中断的函数声明 void breat. -
51单片机(呼吸灯)c语言.doc
2021-05-19 19:43:0151单片机(呼吸灯)c语言湖北民族学院信息工程学院课程设计报告书题目: 基于51单片机的呼吸灯设计课 程:单 片 机 课 程 设 计专 业:电子信息科学与技术学 号: 031340901学生姓名: 陈发忠2016 年 9 月 8 日信息工程... -
基于51单片机的呼吸灯程序编写
2021-09-14 10:20:27利用51单片机编写的呼吸灯小程序,实验程序内容截图分享~