⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sp0604_实验19_脉宽可调和显示的pwm信号.c

📁 基于AT89S52的pwm脉宽调制的C语言编程
💻 C
字号:
#include <REGX51.H>



#define KEY_ADD (P3 & 0x04)
#define KEY_SUB (P3 & 0x08)



#define PWM P1_0
unsigned char PWM_High=50;
unsigned char PWM_Count=0;


void timer0(void) interrupt 1
{
  if(PWM_Count<PWM_High)PWM=0;
    else PWM=1;
  PWM_Count++;
  if(PWM_Count==100)PWM_Count=0;
}


const unsigned char LEDDATA[]={0x3f,0x06,0x5b,0x4f,0x66,
                               0x6d,0x7d,0x07,0x7f,0x6f,
							                 0x77,0x7c,0x39,0x5e,0x79,0x71,
							                };
//数码管扫描代码表
unsigned char code LEDBITDATA[]=
{
  0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
};

#define LEDDATAPORT P0
#define LEDBITPORT  P2
unsigned char ScanLedCount;
unsigned char LEDBuffer[2];

void timer1(void) interrupt 3
{
  TH1=(65536-2000)/256;
  TL1=(65536-2000)%256;

  LEDDATAPORT=LEDDATA[LEDBuffer[ScanLedCount]];
  LEDBITPORT =LEDBITDATA[ScanLedCount];
  ScanLedCount++;
  if(ScanLedCount==sizeof(LEDBuffer))ScanLedCount=0;  
}



void Delay(unsigned int t)
{
  while(t)t--;
}



void main(void)
{
  TMOD=0x12;
  TH0=256-184;
  TL0=TH0;
  TH1=(65536-2000)/256;
  TL1=(65536-2000)%256;
  TR0=1;
  TR1=1;
  ET0=1;
  ET1=1;
  EA=1;

  LEDBuffer[0]=PWM_High%10;
  LEDBuffer[1]=PWM_High/10;
  while(1)
    {
      if(KEY_ADD==0)
        {
          Delay(1000);
          if(KEY_ADD==0)
            {
              PWM_High--;
              if(PWM_High==0)PWM_High=1;
              LEDBuffer[0]=PWM_High%10;
              LEDBuffer[1]=PWM_High/10;
              while(KEY_ADD==0);
            }
        }

      if(KEY_SUB==0)
        {
          Delay(1000);
          if(KEY_SUB==0)
            {
              PWM_High++;
              if(PWM_High==100)PWM_High=99;
              LEDBuffer[0]=PWM_High%10;
              LEDBuffer[1]=PWM_High/10;
              while(KEY_SUB==0);
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -