PWM控制led灯渐亮渐灭程序

适用ME500开发系统

短接JP41-2选用8个LED灯

PWM—PulseWidthModulation(脉冲宽度调制)

PWM足?种周期?走而高低电平的rV空比可以调制的方波信兮.

按K2—下,PWM值减小,则占空比增加。

兗度逐渐增加,直到8个LED灯达到高亮,蜂鸣器响。

按K1—下,PWM值增加,则占空比减小。

立度逐渐减弱,直到8个LED灯达到最峭,蜂鸣器响。

单片机汇编语言源程序如下:

; PWM 控制 LED 灯渐亮渐灭程序

; 适用 ME500 开发系统

; 晶振为11.0592M

; 利用定时器控制产生占空比可变的 PWM 波

; 按K1,PWM值增加,则占空比减小,LED 灯渐暗。

; 按K2,PWM值减小,则占空比增加,LED 灯渐亮。

; 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。

;----------------------------

PWM   EQU  7FH            ;PWM赋初始值

OUT   EQU  P0             ;8个LED灯的接口

INCKEY EQU  P1.4          ;K1,PWM值增加键。

DECKEY EQU  P1.5          ;K2,PWM值减小键。

BEEP   EQU  P3.7

;----------------------------

ORG   0000H

SJMP  START

ORG   000BH

SJMP  INTT0

ORG   001BH

SJMP  INTT1

ORG   0030H

;----------------------------

;主程序

;定时器0工作在模式1,定时器1工作在模式2。

;----------------------------

START:

MOV  SP,#30H

MOV TMOD,#21H

MOV TH1,PWM              ;脉宽调节

MOV TL1,#00H

MOV TH0,#0FCH             ;1ms延时常数

MOV TL0,#066H             ;频率调节

SETB EA

SETB ET0

SETB ET1

SETB TR0

LOOP:     MOV A,PWM                ;

JB INCKEY,LOOP1          ;增加键是否按下?

CALL DELAY               ;延时去抖动

JB INCKEY,LOOP1

CJNE A,#0FFH,PWMINC      ;是否到最大值?

CALL  BEEP_BL            ;是,蜂鸣器报警。

SJMP LOOP

PWMINC:

INC PWM                  ;调节脉宽(脉宽减小)

SJMP LOOP

LOOP1:    JB DECKEY,LOOP2          ;减小键是否按下?

CALL DELAY               ;延时去抖动

JB DECKEY,LOOP2

CJNE A,#02H,PWMDEC       ;是否到最小值?

CALL  BEEP_BL            ;是,蜂鸣器报警。

SJMP LOOP

PWMDEC:

DEC PWM                  ;调节脉宽(脉宽增加)

LOOP2:    SJMP LOOP

;------------------------------

;T0中断服务子程序   (频率)

;控制定时器1中断

;------------------------------

INTT0:

CLR  TR1

MOV TH0,#0FCH             ;1ms延时常数

MOV TL0,#066H              ;频率调节

MOV  TH1,PWM

SETB TR1

MOV  OUT,#00H             ;启动输出

RETI

;------------------------------

;T1中断服务子程序      (脉宽)

;控制PWM脉冲宽度

;------------------------------

INTT1:

CLR  TR1         ;脉宽调节结束

MOV  OUT,#0FFH   ;结束输出

RETI

;------------------------------

;10ms延时子程序

;------------------------------

DELAY:

MOV R6,#50

DELAY1:

MOV R7,#100

DJNZ R7,$

DJNZ R6,DELAY1

RET

;-----------------------------------------------

;蜂鸣器响一声子程序

;-----------------------------------------------

BEEP_BL:

MOV   R6,#100

BL1:     CALL  BL2

CPL   BEEP

DJNZ  R6,BL1

MOV   R5,#25

CALL  DELAY2

RET

BL2:     MOV   R7,#180

BL3:     NOP

DJNZ  R7,BL3

RET

DELAY2:                    ;延时R5×10MS

MOV   R6,#50

BL4:     MOV   R7,#100

BL5:     DJNZ  R7,BL5

DJNZ  R6,BL4

DJNZ  R5,DELAY2

RET

;---------------------------------------------------

END

C语言版本:

/*********************************************************/

#include#includeunsigned int PWM=0xff70 ;   //赋初值

void delayms(unsigned char ms);

void delay(unsigned char t);

sbit k1=P3^0;

sbit k2=P1^0;

sbit k3=P1^1;

/*********************************************************/

void main()

{

int a,b;

int temp;

temp=a^b;

TMOD=0x11 ;

TH0=0xfe ;           //1ms延时常数

TL0=0xcd ;           //频率调节

TH1=PWM/256 ;            //脉宽调节

TL1=PWM%256 ;

EA=1;

ET0=1;

ET1=1;

TR0=1 ;

while(1)

{

if(k2==0)

{

PWM=PWM+0x01;

while(k2==0);

}

if(k3==0)

{

PWM=PWM-0x01;

while(k3==0);

}

}

}

/*********************************************************/

// 定时器0中断服务程序  (频率)

/*********************************************************/

void timer0() interrupt 1

{

TR1=0 ;

TH0=0xfe;

TL0=0xcd ;

TR0=0 ;

TH1=PWM/256 ;            //脉宽调节

TL1=PWM%256 ;

TR1=1 ;

TR0=1 ;

k1=0;      //启动输出

}

/*********************************************************/

// 定时器1中断服务程序 (脉宽)

/*********************************************************/

void timer1() interrupt 3

{

TR1=0 ;

k1=1;     //结束输出

}

/*********************************************************/

//蜂鸣器子程序

/*********************************************************/

/*void Beep()

{

unsigned char i  ;

for (i=0  ;i<100  ;i++)

{

delay(100)  ;

BEEP=!BEEP  ;                //Beep取反

}

BEEP=1  ;                        //关闭蜂鸣器

delayms(100);

}

/*********************************************************/

// 延时子程序

/*********************************************************/

void delay(unsigned char t)

{

unsigned char i;

while(t--)

{

for(i=0;i<10;i++)

{

delayms(100);

}

}

}

……………………

单片机自动调光C语言,51单片机led灯渐变PWM调光(渐亮渐灭)C语言和汇编源程序相关推荐

  1. pmw调光c语言程序,51单片机led灯渐变PWM调光(渐亮渐灭)C语言和汇编源程序

    ; PWM 控制 LED 灯渐亮渐灭程序 ; 适用 ME500 开发系统 ; 晶振为11.0592M ; 利用定时器控制产生占空比可变的 PWM 波 ; 按K1,PWM值增加,则占空比减小,LED 灯 ...

  2. 单片机自动调光C语言,51单片机触控调光程序C语言

    /********************************************************************************************* 程序名: ...

  3. 51单片机8255扩展c语言,51单片机8255之PC口控制

    程序编写步骤: 1.设置8255工作方式(PB工作在模式0且为输出,PC上半位在工作模式0且为输入)本文引用地址:http://www.eepw.com.cn/article/201611/32210 ...

  4. c语言51单片机外部中断,51单片机外部中断0实例详解

    今天就以51单片机的外部中断0为例,来简单讲解一下单片机中断的用法. 1 51单片机的中断源 51单片机共有5个中断源,分别为:外部中断0 定时器0中断 外部中断1 定时器1中断 串口中断 每一个中断 ...

  5. 基于单片机的c语言倒计时程序,30秒倒计时c语言51单片机实现.doc

    30秒倒计时c语言51单片机实现 原理图: 程序: #include #define uchar unsigned char #define uint unsigned int sbit dula=P ...

  6. 步进电机c语言控制程序6,步进电机控制程序(c语言+51单片机)

    步进电机控制程序(c语言+51单片机) #include #define uint  unsigned int #define uchar unsigned char #define ms *77 / ...

  7. php控制步进电机,步进电机控制程序(c语言+51单片机)

    步进电机控制程序(c语言+51单片机) #include #define uint  unsigned int #define uchar unsigned char #define ms *77 / ...

  8. 单片机波特率不加倍c语言,51单片机硬件系统设计时,为什么用11.0592MHz的晶振而不用12MHz晶振的原因及串口波特率误...

    在设计51系列的单片机系统时,一般选用11.0592MHz的晶振而不选用12MHz的晶振,为什么?12M的晶振,振荡频率明显高于11.0592M的,按理说12MHz的晶振可以提高单片机的性能,那么我们 ...

  9. 《电子DIY》之《单片机实践项目》之(51单片机)proteus中带编码信号的电机的详细讲解及电路图绘制(motor encoder)

    此课程主要讲解如何使用51单片机进行实战应用,分为多次课,每次课都会分别围绕一个课程设计或毕业设计(实践项目)展开.手把手叫你学51单片机."Proteus仿真","电子 ...

最新文章

  1. Magento开发的特点有哪些?
  2. SQL Server 跨数据库事务
  3. Java核心类库-IO-字节数组流/内存流
  4. CentOS7 安装LNMP(Linux+Nginx+MySQL+PHP)
  5. MyBatis第二天
  6. 树莓派linux驱动学习之LED控制
  7. 建立STM32的工程步骤(版本1)
  8. mysql出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'如何解决?
  9. P4231 三步必杀 二次差分
  10. LeetCode 90. 子集 II(回溯+剪枝)
  11. Jodd 工具包之StringUtil
  12. 数据科学 IPython 笔记本 8.2 Matplotlib 的应用
  13. qt qlabel 布局重叠_Pyqt5布局管理实例
  14. 算法题解题方法技巧及典例汇总
  15. 嵌入式培训经验分享——初识
  16. html页面中的快捷键设置
  17. 网易免费/付费163企业邮smtp服务器地址
  18. psf2otf函数的解释
  19. (三)音视频:解析H264 SPS 更进一步理解H264
  20. linux boot引导修复工具,修复linux的grub2引导(单独/boot,lvm-root)

热门文章

  1. RTL8811/RTL8812/RTL8821/RTL8822系列11ac标准WiFi模块应用选型参考
  2. Shell脚本-判断文件有无进而复制
  3. origin干嘛用的
  4. 在家用手机薅羊毛也能挣点零花钱
  5. Java 8 Stream的基本详解
  6. JAVA初中面试题集
  7. 找工作学历重要还是经验重要?巴菲特:看简历的时候,我从来不看他从哪个学校毕业的...
  8. Flyway migration 问题
  9. 【个人开发】通过企业微信实现消息推送到个人微信
  10. $.inArray()方法介绍