微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 独立键盘调节PWM的程序

独立键盘调节PWM的程序

时间:10-02 整理:3721RD 点击:

/*

程序名:单片机的PWM实验。

编写人:曾文豪杰

编写时间:2012年10月13日

硬件环境:STC89C52单片机,12M晶振,2块74HC573锁存器,4位一体共阴数码管。两个触点键盘。

接口说明:74HC573锁存器数据输入口依次接单片机P2口,段选接P1.6,位选接P1.7

*/

#include <reg52.h>

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

作用:变量宏定义

备注:

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

#define uchar unsignd char

#define uint unsigned int

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

作用:IO口定义

备注:PWM方波输出口接P1.0,74HC573段选接P1.6,位选接P1.7PWM方波输出口接P1.0。两个独立键盘接P3.4和P3.5.分别控制PWM方波的高电平增量和减量

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

sbit shuchu=P1^0;

sbit dula=P2^6;

sbit wela=P2^7;

sbit jia_key=P3^4;

sbit jian_key=P3^5;

uchar a,b;

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

作用:八位共阴数码管编码,码表为不带小数

备注:如果想调用小数,可以这样写:    table【?】|0x80;

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

uchar code table[]={0x3f,0x06,0x5b,0x4f,                 //0-3

                 0x66,0x6d,0x7d,0x07,              //4-7

                 0x7f,0x6f};                             //8-9

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

函数名:微秒级延时子程序

调用:delayus(?)

参数:0~65535

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

void delayus(uint xms)

{

      uint i;

      for(i=xms;i>0;i--);

}

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

函数名:键盘子程序

调用:key()

作用:按下jia时实现增大调节PWM方波的占空比,按下jian时实现减小调节PWM方波的占空比。调节级数为100级。

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

void key()

{

      if(jia_key==0)

      {

           delayus(1200);

           if(jia_key==0)

           {

                 if(a!=100)

                      a=a+1;

                 else

                      a=100;

                 while(!jia_key);

           }

      }

      

      if(jian_key==0)

      {

           delayus(1200);

           if(jian_key==0)

           {

                 if(a!=0)

                      a=a-1;

                 else

                      a=0;

                 while(!jian_key);

           }

      }

      b=100-a;

}

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

函数名:显示子程序

作用:只是提供感性的PWM方波的占空比情况,并不是精确的。

调用:display(?)

参数:0~255

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

void display(uchar temp)

{

      uchar bai,shi,ge;

      bai=temp/100;

      shi=temp%100/10;

      ge=temp%10;

      dula=1;

      P0=table[bai];

      dula=0;

      P0=0xfe;

      wela=1;

      wela=0;

      delayus(120);

      dula=1;

      P0=table[shi];

      dula=0;

      P0=0xfd;

      wela=1;

      wela=0;

      delayus(120);

      dula=1;

      P0=table[ge];

      dula=0;

      P0=0xfb;

      wela=1;

      wela=0;

      delayus(120);

}

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

函数名:主函数

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

void main()

{

      uchar i;

      a=100;

      b=0;

      while(1)

      {

           

           for(i=a;i>0;i--)                        //输出低电平

            {

                 shuchu =0;

                 display(a);         //把显示和键盘扫描放在这里

                 key();                      //可起到延时作用,一举两得

            }

           for(i=b;i>0;i--)                         //输出高电平

           {

                 shuchu =1;

                 display(a);                 //把显示和键盘扫描放在这里

                 key();                      //可起到延时作用,一举两得

           }

      }

}

帮你顶一个!

支持,帮顶

帮顶一个

支持、、顶

支持  试试看

顶一个!

好, 顶一个...

感谢分享~~~

收藏额啊啊啊啊

有问题?

收藏额啊啊啊啊

顶一个哦哦哦哦

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top