📄 sp0604_实验19_脉宽可调和显示的pwm信号.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 + -