找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4584|回复: 2
打印 上一主题 下一主题
收起左侧

按键控制单片机PWM对LED灯调光的汇编语言源程序

[复制链接]
跳转到指定楼层
楼主
ID:90014 发表于 2015-9-15 22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

/////////////////////////////////////////////
汇编程序
/////////////////////////////////////////////
/***********************************************************************/
/***名称:按键控制PWM对LED灯调光         *******************************/
/***功能:此程序为主模块,改变LOOP_NUM1的值就改变了占空比,初值50%      */
/*** 按键KEY1,KEY2对LOOP_NUM1的调整实现8级亮度调节                    */
/***********************************************************************/

/*---------------------------------------------------------------------*/
/*--   端口定义                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
PORT_3        EQU P3
PORT_2        EQU P2
PORT_1        EQU P1

KEY1        EQU P3.6
KEY2        EQU P3.7

LOOP_NUM1        EQU 30H          
LOOP_NUM2        EQU 31H
LOOP_NUM3        EQU 32H               
/*---------------------------------------------------------------------*/
/*--   程序开始                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
        ORG 0000H
        SJMP MAIN
        ORG 0003H
        SJMP EX_INT0
        ORG 0030H
/*---------------------------------------------------------------------*/
/*--   主程序                   ---------------------------------------*/
/*---------------------------------------------------------------------*/
MAIN:        MOV PORT_2,#00H         //端口初始化
          MOV PORT_1,#00H
        CLR IT0
        SETB EX0
        SETB EA

START:        MOV LOOP_NUM3,#255
        MOV LOOP_NUM2,#255
        MOV LOOP_NUM1,#127 //改变LOOP_NUM1的值就改变了占空比,初值50%
LOOP:        MOV A,LOOP_NUM1
        CJNE A,LOOP_NUM2,LOOP2
LOOP2:    JC LOOP3
        MOV PORT_2,#0FFH
        SJMP EXIT
LOOP3:        MOV PORT_2,#00H       
EXIT:        DJNZ LOOP_NUM2,LOOP
        MOV LOOP_NUM2,#255
        MOV A,LOOP_NUM1
        CJNE A,#255,LOOP
        SJMP START

/*---------------------------------------------------------------------*/
/*--   中断子程序               ---------------------------------------*/
/*---------------------------------------------------------------------*/
EX_INT0:  JNB KEY1,PWM_ADD
        JNB KEY2,PWM_SUBB
        SJMP EXIT_INT

PWM_ADD:        JNB KEY1,PWM_ADD
        MOV A,LOOP_NUM1
        CJNE A,#250,PWM_ADD2
PWM_ADD2:        JC PWM_ADD3
        MOV LOOP_NUM1,#251
        SJMP EXIT_INT
PWM_ADD3:        ADD A,#31
        MOV LOOP_NUM1,A
        SJMP EXIT_INT
/*--------------------------------*/
PWM_SUBB:        JNB KEY2,PWM_SUBB

        MOV A,LOOP_NUM1
        CJNE A,#4,PWM_SUBB2

PWM_SUBB2:JC PWM_SUBB3
        SUBB A,#31
        MOV LOOP_NUM1,A
        SJMP EXIT_INT

PWM_SUBB3:MOV LOOP_NUM1,#3
        SJMP EXIT_INT




EXIT_INT:        RETI
/*---------------------------------------------------------------------*/
/*--   程序结束                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
        END

       

回复112帖
2014/04/19 15:55:41 113帖 yueyunno1 师长     
                               
////////////////////////////////
C程序
////////////////////////////////
/***********************************************************************/
/***名称:按键控制PWM对LED灯调光         *******************************/
/***功能:此程序为主模块,改变LOOP_NUM1的值就改变了占空比,初值50%      */
/*** 按键KEY1,KEY2对LOOP_NUM1的调整实现8级亮度调节                    */
/***********************************************************************/
#include<reg51.h>
typedef unsigned char U8;
typedef unsigned int  U16;
/*---------------------------------------------------------------------*/
/*--   端口定义                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
#define PORT_2 P2

sbit KEY1 = P3^6;
sbit KEY2 = P3^7;

U8 j;       
/*---------------------------------------------------------------------*/
/*--   中断子程序               ---------------------------------------*/
/*---------------------------------------------------------------------*/
void  exint0() interrupt 0
{
        if(KEY1==0)
        {
                while(~KEY1);
                if(j<251)
                        j+=31;
                else
                        j=251;
        }
        else if(KEY2==0)
        {
                while(~KEY2);
                if(j>3)
                        j-=31;
                else
                        j=3;
        }       
}

/*---------------------------------------------------------------------*/
/*--   主程序                   ----------------------------------------------*/
/*---------------------------------------------------------------------*/
void main()
{
        U8 i;
        PORT_2=0X00;

        IT0 = 0;                        //set INT0 int type (1:Falling 0:Low level)
        EX0 = 1;                        //enable INT0 interrupt
        EA = 1;                         //open global interrupt switch
        j=127;                                                          //改变j的值就改变了占空比,初值50%
        while(1)
        {
                for(i=255;i>0;i--)
                        PORT_2=(j<i)?0x00:0xff;
        }
}
/*---------------------------------------------------------------------*/
/*--   程序结束                 ---------------------------------------*/
/*---------------------------------------------------------------------*/



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:74784 发表于 2015-9-15 22:14 | 只看该作者
看见汇编真亲切~~~~~~~~~~~~~~~~
回复

使用道具 举报

板凳
ID:247864 发表于 2017-11-12 13:38 | 只看该作者
有电路图吗?这是控制几个灯亮度的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表