历史上的今天
返回首页

历史上的今天

今天是:2024年10月18日(星期五)

正在发生

2019年10月18日 | 51单片机led灯渐变PWM调光(渐亮渐灭)C语言和汇编源程序

2019-10-18 来源:eefocus

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

#include

unsigned 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);

            }

        }

}


……………………




推荐阅读

史海拾趣

Alutronic Kuhlkorper Gmbh & Co Kg公司的发展小趣事

由于Alutronic Kuhlkorper Gmbh & Co Kg公司并非一个广为人知的品牌,且其具体的发展故事可能涉及公司内部信息,我无法直接提供关于该公司的5个发展故事。但是,我可以为您提供一种创作电子行业企业发展故事的基本框架和方法,您可以在此基础上,结合该公司的发展历程和行业背景,自行创作相关故事。

每个故事可以围绕以下几个方面展开:

  1. 创业初期:描述公司创始人或团队的创业初衷和背景,可能是一个技术创新或市场需求的发现。例如,公司创始人发现电子设备散热问题的重要性,决定投身于开发高效散热解决方案。

  2. 技术创新与突破:介绍公司在技术研发方面取得的关键性突破或创新成果。这些突破可能是新的散热材料、更高效的散热结构设计,或者是智能化的散热控制系统。

  3. 市场拓展与合作:描述公司如何逐步打开市场,可能包括与大型电子厂商的合作、参加国际展会、扩大产品线等。这些努力帮助公司逐渐在电子散热领域树立起了良好的口碑。

  4. 行业挑战与应对:分析公司在发展过程中遇到的行业挑战,如市场竞争加剧、原材料价格波动等。描述公司如何应对这些挑战,保持业务的稳定增长。

  5. 未来发展规划:展望公司未来的发展战略和规划,可能包括进一步的技术研发、市场拓展、品牌建设等方面。这些规划展示了公司对未来的信心和期待。

在创作这些故事时,建议注意以下几点:

  • 确保故事的真实性,基于公司的实际情况进行创作。
  • 保持故事的连贯性和逻辑性,避免出现矛盾或不合理的地方。
  • 突出公司的核心价值和优势,展示其在电子行业中的独特地位。

希望这些建议能够帮助您创作出关于Alutronic Kuhlkorper Gmbh & Co Kg公司的发展故事。

Daco Semiconductor Co Ltd公司的发展小趣事

Daco Semiconductor在成立之初就专注于半导体技术的研发与创新。公司由一群对半导体行业充满热情的工程师创立,他们致力于开发更高效、更稳定的半导体产品。一次偶然的实验中,Daco的研发团队发现了一种新型的材料组合,这种材料组合能够显著提高半导体的性能和稳定性。这一技术突破成为了Daco的核心竞争力,也为其在竞争激烈的半导体市场中打开了新的局面。

台湾凌通(Generalplus)公司的发展小趣事
确认光敏元件是否损坏或老化,导致无法感知光线变化。可尝试更换新的光敏元件。
CONTRINEX公司的发展小趣事

在数控加工领域,Contrinex的数字测量智能传感器带来了革命性的变革。这些先进的传感器能够精确实时地测量拉杆位置,通过智能决策,确保加工精度,防止潜在损坏。其卓越的性能和稳定性,使得Contrinex在这一领域取得了显著的成绩,并赢得了众多客户的赞誉。

浙江东亚电子(DongYa)公司的发展小趣事

浙江东亚电子不仅在国内市场上取得了显著成绩,还积极开拓国际市场。公司已为多家世界五百强企业、上市公司提供服务,如华为、中兴、通用电气及西门子等。通过与这些国际知名企业的合作,公司不仅提升了自身品牌的影响力,还积累了丰富的国际市场经验。

EDAC公司的发展小趣事

随着全球环保意识的提高,ECS-C公司积极响应国家号召,将绿色环保理念融入到企业的生产经营中。公司采用环保材料和生产工艺,减少废弃物排放和能源消耗。同时,ECS-C公司还积极参与环保公益活动,推动社会环保事业的发展。这些环保举措不仅提升了公司的社会形象,也为企业带来了可持续发展的动力。

问答坊 | AI 解惑

集成主板优化攻略4项方法

   集成主板通常指那些在主板上直接集成了显卡、声卡或网卡等部件的主板,其中以集成显卡为重要特征。虽然集成主板并不是主流产品,但它以较低的价格及安装的简便性还是在主板市场占有一席之地。集成主板上的显卡、声卡、网卡等部份由于 ...…

查看全部问答>

乔布斯你凭什么这么牛?

最近IT业的人没有不知道iPhone 4的信号门,为此展开的口水战也屡见于各大媒体。“信号门”本不是什么好事,对于其他公司甚至可能是灭顶之灾,但苹果有个乔布斯,信号门不仅乔布斯出尽风头,出现在各大媒体头版头条,iPhone 4手机的销售也好像丝毫没 ...…

查看全部问答>

高分求助:关于ws2_32.lib的很难的问题 ,————急

我修改一个实例程序:用到下面语句(在evc中) #pragma  comment(lib,  \"ws2_32.lib \"),但却出现下面错误。 cannot open file \'ws2_32.lib \' 我在setting->link->Object/library  modules:中填上:ws2_32 ...…

查看全部问答>

嵌入式设备里,添加java游戏,如何支持Java?

因为手头的开发板是mips32+linux,嵌入式设备里,想添加java游戏,应该移植哪种JVM比较好,比较快,比较容易?据说kaffe是一个不错的JVM,有没有移植过的朋友,可以参考指点的,谢谢!…

查看全部问答>

ov7620逐行扫描设置问题?

请问ov7620逐行扫描模式怎样设置呀?我象7620的寄存器0x28写入0x20为什么不行(7620一直忙)呀?是不是还要写其他寄存器呀,怎样写呀?急呀? 谢谢先!…

查看全部问答>

CPU的疑问

小弟我是新手,我想请问下大虾们几个问题: 1.操作系统是用来协调进程和调度CPU处理进程的,每个进程通过相同的时间片 来被CPU处理,那么操作系统自己是不是也通过时间片来被CPU处理 2.当我开启一个windows窗口后,我不关闭这个窗口,那么CPU是 ...…

查看全部问答>

有了解长三角的技术行业情况的么?

     各位有对长三角技术行业了解的吗?情况如何?自动化控制,电子技术方面等,对人才的需求情况等等。学历不高,机会是否大呢?二三线城市都行,只要工作喜欢…

查看全部问答>

有个想法,MSP430 LaunchPad 仿真 msp430fr5739

突然用MSP430 LaunchPad 仿真 fr5739发现不能正常仿真,仿真脚是DVCC,DVSS,P2.0,P2.1,TEST,RST,管脚有错误吗?报错图片请看     另,可以串口下载的msp430f149,MSP430 LaunchPad也不能仿真。难道MSP430 LaunchPad仿真范围只 ...…

查看全部问答>

基于DSP的波形发生器

求助, 请问基于DSP的波形发生器设计中波形发生器的原理是什么? 正弦波的产生原理是什么? 方波的产生原理是什么?…

查看全部问答>

任务栈空间检测机制(rtos使用者必看)

目前绝大部分的rtos都是没有基于mmu或者mpu来运行的,也就是说没有内存保护机制。在没有内存保护机制的前提下,最揪人心的莫过于任务栈空间的溢出了,任务栈空间的溢出随时就像一颗定时炸弹等着引爆,使用者浑身不自在。有没有100%的任务栈空间溢出 ...…

查看全部问答>