当前位置:文档之家› PWM呼吸灯

PWM呼吸灯

PWM呼吸灯

PWM呼吸灯

LED呼吸灯C51源程序

* 【使用说明】: 晶振为11.0592M 利用定时器控制产生占空比可变的PWM 波 按K3,PWM值增加,则占空比减小,LED 灯渐亮 按K4,PWM值减小,则占空比增加,LED 灯渐暗 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 ******************************************************************************* ***/ #include #include sbit K1 =P3^4 ; //PWM值增加键 sbit K2 =P3^5; //PWM值减少键 sbit BEEP =P0^4; //蜂鸣器 unsigned char PWM=0x7f ; //赋初值 void Beep(); void delayms(unsigned char ms); void delay(unsigned char t); /*********************************************************/ void main() { P1=0xff; TMOD=0x21 ; TH0=0xfc ; //1ms延时常数 TL0=0x66 ; //频率调节 TH1=PWM ; //脉宽调节 TL1=0 ; EA=1; ET0=1; ET1=1; TR0=1 ; while(1) { do{ if(PWM!=0xff) {PWM++ ;delayms(10);} else Beep() ;

} while(K1==0); do{ if(PWM!=0x02) {PWM-- ;delayms(10);} else Beep() ; } while(K2==0); } } /*********************************************************/ // 定时器0中断服务程序(频率) /*********************************************************/ void timer0() interrupt 1 { TR1=0 ; TH0=0xfc ; TL0=0x66 ; TH1=PWM ; TR1=1 ; P1=0x00 ; //启动输出 } /*********************************************************/ // 定时器1中断服务程序(脉宽) /*********************************************************/ void timer1() interrupt 3 { TR1=0 ; P1=0xff ; //结束输出 } /*********************************************************/ //蜂鸣器子程序 /*********************************************************/ void Beep() { unsigned char i ; for (i=0 ;i<100 ;i++) { delay(100) ;

最新51单片机花样呼吸灯程序

#include /*-----------定义单片机引脚--*/ sbit LED0=P1^0; sbit LED1=P1^1; sbit LED2=P1^2; sbit LED3=P1^3; sbit LED4=P1^4; sbit LED5=P1^5; sbit LED6=P1^6; sbit LED7=P1^7; void Delay(unsigned int t); //函数声明 unsigned int z,y; void main (void)//主函数 { unsigned int CYCLE=1000,PWM_LOW=0;//定义周期并赋值 while (1) //主循环 { /*--------整排LED灯呼吸---------*/ P1=0x00; Delay(1000); //加延时,可以看到熄灭的过程(下面程序同理) for(PWM_LOW=1;PWM_LOW0;PWM_LOW--) //与逐渐变亮相反的过程 { P1=0x00; //点亮LED Delay(PWM_LOW); P1=0xff; //熄灭LED Delay(CYCLE-PWM_LOW); //主循环中添加其他需要一直工作的程序,延时长度,600次循环中从599减至1 } /*--------第一颗LED灯呼吸---------*/ /* LED0=1; Delay(1000); for(PWM_LOW=1;PWM_LOW

三路PWM呼吸灯程序及原理图

PWM三路呼吸灯系统 主要是靠定时器产生最小时间,通过定时中断重装定时值和置位标记位22H。 总原理图 中断按钮可以调节灯一(D3)的呼吸时间

两位数码管显示灯的呼吸时间 复位电路和晶振电路

程序如下: ORG 0000H LJMP S00 ORG 0003H LJMP AN ORG 000BH LJMP DSQ ORG 0030H S00: SETB P2.0 CLR P2.1 CLR P2.2 MOV IE,#83H SETB IT0 MOV TMOD,#01H MOV TL0,#0DCH MOV TH0,#0BH SETB TR0 MOV 30H,#00H //30H保存幅值 MOV 31H,#00H MOV 32H,#00H MOV 33H,#04H CPL P2.4 SETB 20H SETB 21H SETB 22H SETB 23H SS00: MOV C,22H //判断总刷新 JNC S003 CLR 22H SJMP S001 S003: LJMP S030 S001: CLR C //判断31H值,每段的加/减值MOV R2,30H CJNE R2,#00H,SS01 SETB 20H MOV 31H,#5 LJMP S019 SS01: MOV A,30H SUBB A,#50 JNC S010 MOV 31H,#5

S010: CLR C MOV A,30H SUBB A,#130 JNC S012 MOV 31H,#4 SJMP S019 S012: CLR C MOV A,30H SUBB A,#220 JNC S013 MOV 31H,#3 SJMP S019 S013: CLR C MOV A,30H SUBB A,#240 JNC S014 MOV 31H,#2 SJMP S019 S014: CLR C MOV R2,30H CJNE R2,#0FAH,S015 CLR 20H S015: MOV 31H,#1 S019: NOP S020: MOV C,20H //执行加/减JNC S021 CLR C MOV A,30H ADD A,31H MOV 30H,A MOV R2,A CJNE R2,#0FAH,S022 CLR 20H LJMP S029 S022: JNC S004 SJMP S029 S004: LJMP S00 S021: CLR C MOV A,30H SUBB A,31H MOV 30H,A JC S100

51单片机PWM呼吸灯源程序

51单片机PWM-呼吸灯源程序 /** ************************************************* *************** * @file : main.c * @xu ran * @date : 2014年5月23日20:55:19 - 2014年5月23日22:32:12 * @version : V2.0 * @brief : PWM脉冲宽度调制技术实现呼吸灯 ************************************************* *************** * @attention * 实验平台 : 51hei开发板 * 单片机 : STC89C52RC MCU 晶振 : 11.0592 MHZ ************************************************* *************** */ #include //使用STC89C52库 /* 三八译码器74HC138 */ sbit ADDR3 = P1^3;

sbit ENLED = P1^4; sbit PWMOUT = P0^0; //LED0 /* PWM占空比 */ unsigned char code pwmTable[] = { 3, 5, 8, 11, 13, 16, 21, 24, 27, 30, 33, 36, 40, 45, 49, 53, 55, 57, 61, 65, 67, 69, 72, 75, 79, 82, 86, 89, 91, 93, 96, 99 }; // dc% /* PWM的高电平和低电平的定时器的重载值 */ unsigned char Highthr0, Hightlr0; unsigned char Lowthr0, Lowtlr0; /* 定时器T1计数装载值 */ unsigned char thr1, tlr1; /* PWM 频率计数值 */ unsigned long tmp = 0; /******************local function defines**************************/ void ConfigPWM(unsigned int fr, unsigned char dc); void ConfigTimer1(unsigned int xms); /************************************************

001_雾盈FPGA笔记之一呼吸灯简单实验(Verilog)

基于FPGA的呼吸灯简单实验程序(Verilog) 2016-07-27雾盈 1.呼吸灯 呼吸灯最早是由苹果公司发明并应用于笔记本睡眠提示上,一经展出,立刻吸引众多科技厂商争相效仿。将其广泛用于各种电子产品中,尤其是智能手机。 呼吸灯其实是微电脑控制下,由暗渐亮,然后再由亮渐暗,模仿人呼吸方式的LED灯 2.呼吸灯原理 LED的亮度与流过的电流成正比。在一定的频率之下,如果占空比是0,则LED不亮;如果占空比是100%,则LED最亮;如果占空比刚好是50%,则LED亮度适中。如果我们让占空比从0~100%变化,再从100%~0不断变化,就可以实现LED一呼一吸的效果。 其波形占空比示意图如下所示:

3.呼吸灯程序设计思路 (1)首先确定PWM的频率为1Khz (2)由频率算出周期T = 1/f = 1ms (3)根据每次呼1s,吸1s,算出计数值1s/1ms=1000 (4)然后将1ms分成1000份,每一份是1us (5)写三个1us、1ms、1s的3个计数器count1、count2、Count3,最后count2和count3进行比较 4.程序框图 5.状态机设计 可以将呼吸灯运行过程归为两个状态:S0:由灭渐亮;S1:由亮渐灭。 这里就会有两个问题需要我们解决, 1.状态的翻转 2.在一个状态里如何使pwm波的占空比实现逐增或逐减。

先说第一个问题,两个状态的翻转 由下面的时序图可以看出来,两个状态的翻转只是由时间决定的,S0状态和S1状态分别持续1s, 可以将它看成周期为2s的时钟信号,每当flag_1s信号到来一次,状态就翻转一次。

LED呼吸灯C源程序

L E D呼吸灯C源程序 The latest revision on November 22, 2020

* 【使用说明】: 晶振为 利用定时器控制产生占空比可变的 PWM 波 按K3,PWM值增加,则占空比减小,LED 灯渐亮 按K4,PWM值减小,则占空比增加,LED 灯渐暗 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 ************************************************************************ **********/ #include<> #include<> sbit K1 =P3^4 ; //PWM值增加键 sbit K2 =P3^5; //PWM值减少键 sbit BEEP =P0^4; //蜂鸣器 unsigned char PWM=0x7f ; //赋初值 void Beep();

void delayms(unsigned char ms); void delay(unsigned char t); /*********************************************************/ void main() { P1=0xff; TMOD=0x21 ; TH0=0xfc ; //1ms延时常数 TL0=0x66 ; //频率调节 TH1=PWM ; //脉宽调节 TL1=0 ; EA=1; ET0=1; ET1=1; TR0=1 ; while(1)

{ do{ if(PWM!=0xff) {PWM++ ;delayms(10);} else Beep() ; } while(K1==0); do{ if(PWM!=0x02) {PWM-- ;delayms(10);} else Beep() ; } while(K2==0); } } /*********************************************************/

呼吸灯程序

呼吸灯(简单易懂) 如题呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上去和人的呼吸一样。二、设计原理:用C语言编程实现 PWM(脉宽调制)输出驱动LED,逐渐增加PWM 的占空比从而实现LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗……如此往复,再利用LED的余辉和人眼的暂留效应,看上去就和人的呼吸一样。三、整体方案设计8个LED按照顺序逐个实现呼吸效果。加以其他闪烁花样增加更炫彩的效果。四、实验元件及器材(1)元件:LED(发光二极管)8个1KΩ电阻8个1nf电容2个晶振 1个 AT89C51芯片1个(2)器件:Atmega128开发板1块计算机1台五、硬件原理(1)主电路:8个LED分别连接AT89C51的P1口,使用共阳方式,并加以1kΩ的电阻接入电源。 #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*-------------------------IO口定义 ----------------------------*/

sbit LED0=P0^0;// 用sbit 关键字定义 LED到P0.0端口,LED是自己任意定义且容易记忆的符号 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;

呼吸灯程序

#include #define uInt unsigned int #define uchar unsigned char uchar PWM_T = 0; //占空比控制变量 //////////////////主程序入口////////////////////// void main(void) { bit flag = 1; //控制灯渐亮渐熄方式 uInt n; TMOD=0x02; //定时器0,工作模式2,8位定时模式 TH0=210; //写入预置初值(取值1-255,数越大PWM频率越高) TL0=210; //写入预置值(取值1-255,数越大PWM频率越高) TR0=1; //启动定时器 ET0=1; //允许定时器0中断 EA=1; //允许总中断 P2=0xff; //初始化P1 while(1) { for(n=0;n<600;n++); //延时,将响应定时器中断,灯会自动加/减一个档次的亮度//取值0-65535,数字越大变化越慢 if(flag==1) //灯渐亮 PWM_T++; else //灯渐熄 PWM_T--; if(PWM_T>=100) //设置灯亮度级别为10 flag=0; if(PWM_T==0) //限定最低亮度级别为0 flag = 1; } } ///////////////////定时器0中断模拟PWM//////////////////// timer0() interrupt 1 using 2 { static uchar t ; //PWM计数 t++; //每次定时器溢出加1 if(t==100) //PWM周期 { t=0; //使t=0,开始新的PWM周期 P2=0x00; //使LED灯亮 }

msp430呼吸灯程序

/******uestc*****/ //******************************************************************* //MSP430G2553 呼吸灯演示程序- 使用Timer_A,Up Mode, DCO SMCLK // // 介绍: 该程序利用TIMER A 的UP模式在P1.6脚产生PWM输出 // 将CCR0设置为1500来定义PWM的周期,利用循环不断改变CCR1的值,// 实现利用改变PWM的占空比来改变LED亮度. // ACLK = na, SMCLK = MCLK = TACLK = default DCO // // MSP430G2553 // ----------------- // /|\| XIN|- // | | | // --|RST XOUT|- // | | // | P1.6/TA1|--> CCR1 - PWM // // 使用MSP430 LaunchPad , MSP430G2553芯片 // 在IAR Embedded Workbench for MSP430 5.40下编译测试通过 //******************************************************************* #include "msp430g2553.h" // ************************************************************* // 延时函数,对于1M主频,约延时1ms // ************************************************************* void delay_1ms(void) { unsignedint k; for (k=0;k<195;k++); } // ************************************************************* // 延时函数,延时n*ms // ************************************************************* voiddelay_nms(unsigned int n) { unsignedint j; for (j=0;j

呼吸灯

郑州科技学院 单片机课程设计 题目呼吸灯学生姓名 专业班级 学号 院(系) 指导教师 完成时间

目录 1 前言 (1) 2 课程设计的目的 (1) 3 课程设计的任务与要求 (2) 3.1课程设计的任务 (2) 3.2课程设计的要求 (2) 4 设计方案与论证 (2) 4.1设计方案 (2) 4.2设计论证 (4) 5 设计原理及功能说明 (5) 5.1设计原理 (5) 5.2功能说明 (5) 6 单元电路的设计 (6) 7 硬件的制作与调试 (7) 7.1硬件制作 (7) 7.2实物调试 (8)

8 结论 (8) 参考文献 (10) 附录1:总体电路原理图 (11) 附录2:元器件清单 (12) 附录3:呼吸灯实物图 (13) 附录4:源程序 (14)

1 前言 单片机技术是人类在生产斗争和科学实验中发展起来的。随着科学技术的发展和人类的进步,单片机技术已经成了各种工程技术的核心,特别是进入信息时代以来,单片机技术更成了基本技术,其具体应用领域涵盖了通信领域、控制系统、测试系统、计算机等等各个领域。 众所周知,呼吸灯已经在我们的现实生活中得到了广泛应运,并有涉及到各个领域中。比如手机、电脑等实用工具的呼吸灯,又或是仓库、家庭保安系统中,都有使用呼吸灯电路。因此,呼吸灯的种类呈现出多样化。随着科技的发展,人们对呼吸灯的性能提出了越来越高的要求。本文设计了一种呼吸灯,这种呼吸灯通过AT89C51型单片机把电路中的电流经由单片机构成一个简单的电路系统。设计电路中应用到电阻、电容、LED等元器件。该呼吸灯的设计采用模块化结构,使得设计简单明了、方便、灵活性强。同时可以根据需要在原有的基础上加以扩充,很有经济利用价值。 这种呼吸灯不但使用很简单,可靠性强,并与传统的呼吸灯相比具有很强的稳定性、实用性,但是其应用范围目前来说相对会比较狭隘。 2 课程设计的目的 1.学习基本理论在实践中综合运用的初步经验,巩固和掌握单片机电路设计的综合理论知识和基本方法; 2.培养实践技能,掌握电子电路安装和调试的方法和故障排除方法,提高分析和解决问题的能力; 3.学会光呼吸灯的设计及相关仪表仪器的使用; 4.了解构成呼吸灯的电路及原理; 5.掌握元器件的特点,电路的仿真和线路的焊接; 1

实验3 呼吸灯设计实验 (1)

实验3 呼吸灯设计实验 一、实验目的 1、会使用单片机4个并行I/O端口连接外部设备并构建单片机最小应用系统。 2、能使用工具软件绘制单片机硬件原理图、能编写简单的C语言程序。 3、会编写常见的循环程序和延时子程序。 二、实验内容 采用STC89C52单片机构建最小系统,在P1.0口外接1只发光二极管,编程实现二极管出现呼吸灯的显示效果。 三、实验原理 1、P1口为准双向口,每一位都可独立地定义为输出线或输入线。 2、延时子程序采用指令循环指令来实现,在系统时间允许的情况下采用此方法。 循环时间=机器周期×指令所需机器周期×循环次数 (其中机器周期:晶振频率为12MHz时为1us,晶振频率为6MHz时为2us) 四、思考题 (1)采用任务1的单灯控制电路,编程实现P1端口连接的8个发光二极管闪动频率控制。 (2)采用任务1的单灯控制电路,编程实现P1端口连接的8个发光二极管自动变频控制。 表4 项目二考核标准 任务名称任务一:单灯闪烁控制设计 序号考核内容考核方式分 值 评分 1 工具软 件使用Kile软件操作 使用 实际操作 5 会操作使用3-5分不会操作0-3分 2 Proteus软件操 作使用 5 会操作使用3-5分不会操作0-3分3 下载工具使用 5 会操作使用3-5分不会操作0-3分 4 硬件 电路晶振电路绘制原理 图 4 正确4分不正确0分复位电路 4 正确4分不正确0分 5 电源电路 2 正确2分不正确0分 6 I/O口分配 存储器选择 2 正确2分不正确0分7 输出显示电路8 正确4-8分不正确0-4分 8 程序 设计程序设计思路编写程序 5 可行3-5分不可行0-3分 9 流程图绘制、存 储器分配 5 正确3-5分不正确0-3分 10 源程序编写10 编译正确 10分编译不正确 4-6分 无法编译 0-3分 11 程序 调试调试、仿真运行效果10 实现功能指标10分能仿真,没实现 功能指标0-3分 12 电路调 试制作硬件调试连接实验 板电路或 电路制作 5 电路正常运行5分不正常0-3分联合调试 5 达到功能指标5分没达到0-3分 13 加分 5 小组讨论、独立完 成5分不能独立完成 0-3分 说明:具体评分标准可根据教学过程中的实际情况进行合理调整。

51单片机实现七彩呼吸灯程序

51单片机用PWM的RGB呼吸灯程序 程序设计思路:灯在高速闪烁人眼是看不出来的,开的时候,以非常快的速度开-关,逐渐加大开的时间比率,减小关的时间比率。关的时候,以非常快的速度开-关,逐渐加大关的时间比率,减小开的时间比率。程序如下: #include typedef unsigned int WORD; /*-----------定义单片机引脚-----*/ sbit LED1=P1^1; sbit LED2=P1^2; sbit LED3=P1^3; void Delay(WORD t); //函数声明 WORD z,y; void main (void)//主函数 { WORD CYCLE=500,PWM_LOW=0;//定义周期并赋值 while (1) //主循环 { /*--------第一颜色LED灯呼吸---------*/ LED1=1; Delay(500); for(PWM_LOW=1;PWM_LOW0;PWM_LOW--) //实现亮缓慢到暗{ LED1=0; Delay(PWM_LOW); LED1=1; Delay(CYCLE-PWM_LOW); } //同理可以实现剩下的六种颜色 /*--------第二颜色LED灯呼吸----------*/ LED2=1; Delay(500); for(PWM_LOW=1;PWM_LOW

光立方呼吸灯程序

#include #define uint unsigned int #define uchar unsigned char int i=0; uchar code table[]={ 0,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,50,51,52,53,54, 55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72, 73,74,75,76,77,78,79,80,81,82, 83,84,85,86,87,88,89,90,91, 92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109, 110,111,112,113,114,115,116,117,118,119,120,121,122,123,124}; void delay(uint z) { uint x,y; for(x=15;x>0;x--) for(y=z;y>0;y--); } void light1(uchar num1) { uchar j; P2=0xff; P1=0x00; P2=0x00; j = table[num1]; delay(j); P2=0xff; P1=0xff; P2=0x00; delay(126-j); } void light2(uchar num2) { uchar j; P2=0xff; P1=0xff; P2=0x00;

stc15f2k60s2pwm呼吸灯实验程序

/**************************************************** 4个按键决定4个亮度 占空比:PWM_T/100,越大越亮 ****************************************************/ #include #define uInt unsigned int #define uchar unsigned char uchar PWM_T = 0; //占空比控制变量 //4个按键,决定输出PWM_T值 sbit KEY_4_PIN=P3^5; sbit KEY_3_PIN=P3^4; sbit KEY_2_PIN=P3^3; sbit KEY_1_PIN=P3^2; /**************************************************** 延时子程序 ****************************************************/ void delay_ms(unsigned char ms) { unsigned int i; do{ i = 11059200L / 13000; while(--i) ; //14T per loop }while(--ms); } /**************************************************** 主程序 ****************************************************/ void main(void) { uchar led_bh,led_fx=1; uInt n ; TMOD=0x02; //定时器0,工作模式2,8位定时模式 TH0=210; //写入预置初值(取值1-255,数越大PWM频率越高) TL0=210; //写入预置值(取值1-255,数越大PWM频率越高) TR0=1; //启动定时器 ET0=1; //允许定时器0中断 EA=1; //允许总中断 P1=0xff; //初始化P1,输出端口 P0=0xff; //初始化P0 while(1) //PWM周期100,高电平100- PWM_T,低电平PWM_T,低电平工作{ for(n=0;n<200;n++); //延时,取值0-65535,数字越大变化越慢 if(!KEY_4_PIN||!KEY_3_PIN||!KEY_2_PIN||!KEY_1_PIN) //通过按键改变占空比

51单片机呼吸灯实验报告

呼吸灯 1 功能与技术分析 呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上去和人的呼吸一样。可以展示出各种酷炫的图像。 1.1 呼吸灯的实现效果 使用调制的方法,灯在高速闪烁时人眼是看不出来的,每个循环给闪烁的熄灭时间加1,灯就会慢慢变暗,在设置熄灭时间加到一定程度就开始减一,就会渐渐变亮了。使得LED灯按照顺序逐渐改变亮度。 1.2 功能分析 灯光在微电脑控制之下完成由亮到暗的绝剑变化,感觉就像是在呼吸。广泛应用与数码产品,起到装饰和指示工作效果。目前被广泛用于手机之上,并成为各大品牌新款手机的卖点之一。 1.3 技术分析 用C语言编程实现PWM(脉宽调制)输出驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗……如此往复,再利用LED的余辉和人眼的暂留效应,

看上去就和人的呼吸一样。 2 硬件基础与设计 整个系统的搭建,由以下元器件组成: 1、12MHz晶振一个; 2、stc89c51单片机一个; 3、30pf无极性电容2个; 4,、按钮一个; 5、10K电阻一个; 6、10uf有极性电容一个; 7、洞洞板一个; 8、LED灯若干。

2.1 基于51单片机的最小系统的设计 STC89C51RC是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8K Bytes 的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C51RC系列单片机是单时钟/机器周期(1T)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成MAX810 专用复位电路。 组成部分包括: 1、一个八位中央处理器CPU; 2、一个片内震荡电路,时钟电路产生时钟信号,频率越高,速度越快; 3、128B的RAM。51中共有256BRAM单元,后面128B是寄存器; 4、4KB的ROM; 5、2个16位定时器/计数器; 6、32条可编程的I/O线,4个8位并行I/O端口P0、P1、P2、P3; 7、一个全双工串行口;

51单片机(呼吸灯)C语言版要点

基于单片机与PWM的呼吸灯设计 实训指导教师: 班级: 设计人姓名: 设计日期: 设计地点: 完成时间: 摘要

本设计是基于单片机的原理与接口设计,采用单片机I/O口,加以C 语言编程实现LED渐亮再渐暗类似人的呼吸一样的效果。 关键词 AT89C51,PWM(脉宽调制) 一、设计要求: 呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上去和人的呼吸一样。 二、设计原理: 用C语言编程实现PWM(脉宽调制)输出驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗……如此往复,再利用LED的余辉和人眼的暂留效应,看上去就和人的呼吸一样。三、整体方案设计 8个LED按照顺序逐个实现呼吸效果。加以其他闪烁花样增加更炫彩的效果。 四、实验元件及器材 (1)元件: LED(发光二极管)8个 1KΩ电阻8个 1nf电容2个 晶振1个 AT89C51芯片1个

(2)器件:Atmega128开发板1块 计算机1台 五、硬件原理 (1)主电路:8个LED分别连接AT89C51的P1口,使用共阳方式,并加以1kΩ的电阻接入电源。 (2)时钟电路:外部时钟方式是使用外部振荡脉冲信号。

六、软件设计及系统仿真调试 (1)调试方法:利用keil软件进行C语言程序编写及调试,再利用Proteus 仿真软件进行仿真实验。 (2)调试过程所遇问题: 1、由于呼吸灯的程序在仿真软件Proteus中实现的效果不明显,很难辨别LED是否具有呼吸的效果。所以边用keil调试程序边用STC烧写软件直接写入开发板,从而很明显看出LED是否具有呼吸效果; 2、程序运行时,出现LED闪烁过快,由于人眼的暂留效应看似LED全部一直亮着,经调试,修改延时时间,实现呼吸效果。 七、结论与心得 在本次设计中,C语言程序在开发板中得以实现应有的功能。在调试过程中,发现很多问题都是由于不细心导致的,因此在以后的设计方案中,要集中精力,莫粗心大意。再者就是知识量的不足,虽然是一个小小的设计方案,但是查阅了很多相关资料,在日后,要多充足自己的知识量,保证C程序的编写质量。

51单片机“呼吸灯”程序

51单片机“呼吸灯”程序 刚看了一份关于光立方的视频里片面提到“呼吸灯”一词,忙草草写了一个带数码管显示亮度变化的呼吸灯程序,其中整型frequency为调节呼吸频率的参数,附图为临时做的gif 文件,需等会儿才见效果/*12Mhz??§????*/ #include #define uchar unsigned char #define uint unsigned int uint f=100; /*????????f????????????1~10khz*/ uint H=6;/*????????·§????????0~10000/f????H>L*/ uint L=0;/*????????·§????????0~10000/f????H>L*/ uchar code wela[]={0xfe,0xfd,0xfb,0xf7}; uchar code

dula[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xD8,0x80 ,0x90}; uint m=0,t; uchar amp=0,frequency=100; sbit pwm=P1^7; sbit pwm_=P1^6; sbit hkey=P3^5; sbit lkey=P3^3; void diskey(); void delay(uint z); void display(); void xunhuan();

void main() { EA=1; ET0=1; TMOD=0x02; TH0=146; t=10000/f; TR0=1; while(1) { if(hkey==0)diskey();

led呼吸灯源程序

#include #include #define uchar unsigned char #define uint unsigned int sbit LED = P2^5; uchar top = 0; //一个周期里面高电平占的比重(一个周期分成200份,top从0~200)uchar flag = 0; //增减标志位,0标志渐亮,1表示渐暗 uchar count = 0; //定时器计数,100us记一次 void Init_T0()//以计数器T0工作方式2为例 { TMOD &= 0xf0; //设置工作方式 TMOD |= 0x02; TH0 = (256-100)%256; //装入初值 TL0 = (256-100)%256; EA = 1; //打开中断总开关 ET0 = 1; //打开TO中断开关 TR0 = 1; //启动T0开始工作 } void delay(uint x) { uint i; for(;x>0;x--) { for(i=120;i>0;i--) { _nop_();_nop_();_nop_();_nop_(); } } } void Timer0() interrupt 1 { ET0 = 0; //关中断 switch(LED==1) { case 0:if(count==(200-top)) { count = 0; LED = 1;

if(flag==0)//增减标志位,0表示加,1表示减 { top++; if(top==200) { flag = 1; LED = 1;//LED灯满周期高电平 delay(200);//延长LED灯暗时的时间 } } else { top--; if(top==0) { flag = 0; LED = 0;//LED灯满周期低电平 } } };break; case 1:if(count==top) { count = 0; LED = 0; if(flag==0)//增减标志位,0表示加,1表示减 { top++; if(top==200) { flag = 1; LED = 1;//LED灯满周期低电平 delay(200);//延长LED灯暗时的时间 } } else { top--; if(top==0) { flag = 0; LED = 0;//LED灯满周期低电平 } } };break;

51单片机(呼吸灯)汇编语言版

单片机实训课程之:呼吸灯 一.设计要求 二.相关原理 三.论证分析 四.硬件原理 五.软件程序设计 六.测试方法与结果 七.使用说明(附录)

一.设计要求 呼吸灯顾名思义就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗。二.相关原理 呼吸灯的原理:呼吸灯,是用LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗……如此往复,再利用LED的余辉和人眼的暂留效应,看上去就和人的呼吸一样了。 三.论证分析 程序流程图 (1)80C51 1.单片机定义 “单片机”就是将计算机的基本部件集成到一块芯片上,包括CPU、ROM、

RAM、并行口、串行口、定时器/计数器、中断系统、系统时钟等。 MCS-51的微处理器是由运算器和控制器构成所的。 运算器:主要用来对操作数进行算术、逻辑运算和位操作。主要包括算术逻辑运算单元ALU、累加器A、寄存器B、位处理器、程序状态字寄存器PSW以及BCD码修正电路等。 控制器:单片机的指挥控制部件,控制器的主要任务是识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动而协调地工作。

(2)时钟电路 外部时钟方式是使用外部振荡脉冲信号,常用于多片MCS-51单片机同时工作,以便于同步。 外部时钟电路,是由一个12MHz晶振和两个瓷片电容组成,为单片机提供标准时钟,其中两个瓷片电容起微调作用,外接晶振频率精确度直接影响电子钟计时的准确性。(外部时钟方式是把外部已经有的时钟信号引入到单片机内部。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。) 2.单片机电子钟利用内部定时/计数器溢出产生中断(12M晶振一般为50ms)再乘以相应的倍率来实现秒、分、时的转换。从定时/计数器产生中断请求到响应中断需要3-8个机器周期,定时中断子程序中的数据入栈和重装定时/计数器的初值还需要占用数个机器周期,还有从中断入口转到中断子程序也要占用一定的机器周期。

LED呼吸灯C源程序

L E D呼吸灯C源程序 Company number【1089WT-1898YT-1W8CB-9UUT-92108】

* 【使用说明】: 晶振为11.0592M 利用定时器控制产生占空比可变的 PWM 波 按K3,PWM值增加,则占空比减小,LED 灯渐亮 按K4,PWM值减小,则占空比增加,LED 灯渐暗 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警 *************************************************************** *******************/ #include #include sbit K1 =P3^4 ; //PWM值增加键 sbit K2 =P3^5; //PWM值减少键 sbit BEEP =P0^4; //蜂鸣器 unsigned char PWM=0x7f ; //赋初值 void Beep(); void delayms(unsigned char ms); void delay(unsigned char t); /*********************************************************/ void main()

{ P1=0xff; TMOD=0x21 ; TH0=0xfc ; //1ms延时常数 TL0=0x66 ; //频率调节 TH1=PWM ; //脉宽调节 TL1=0 ; EA=1; ET0=1; ET1=1; TR0=1 ; while(1) { do{ if(PWM!=0xff) {PWM++ ;delayms(10);} else Beep() ; } while(K1==0); do{ if(PWM!=0x02) {PWM-- ;delayms(10);}

相关主题
相关文档 最新文档