📄 main.c
字号:
#include<REG51F.H>
#include<KEY.h>
#include<LED.h>
#include<communicate.h>
sbit pwms=P1^6;
sbit pwmout=P1^7;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
unsigned char pkey;
unsigned int pwmset[4];
unsigned char highTh[4],highTl[4],lowTh[4],lowTl[4],mode,i,Mtoset;
float ftemp;
unsigned int temp;
bit pwmhigh;
/////
////
void delay()
{unsigned i;
for(i=0;i<200;i++);
}
void INIT_PWM()
{
TMOD=0x01;
IP=0x08;
IE|=0x02;
EA=1;
TH0=0xee; //20us;
TL0=0xee;
TR0=1;
}
#if 0
void init_serialcomm( void )
{
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable receive */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xF4; /* TH1: reload value for 2400 baud @ 11.0592MHz */
TR1 = 1; /* TR1: timer 1 run */
TI = 0;
ES=1;
RI =0; /* TI: set TI to send first char of UART */
}
#endif
void int1() interrupt 1
{
EA=0;
TF0=0;
if(pwmhigh)
{
P1=P1&(~(0x80>>Mtoset));
TH0=lowTh[Mtoset];
TL0=lowTl[Mtoset];
pwmhigh=0;
Mtoset++;
if(Mtoset>=4)Mtoset=0;
}
else
{
P1=P1|(0x80>>Mtoset);
TH0=highTh[Mtoset];
TL0=highTl[Mtoset];
pwmhigh=1;
}
EA=1;
}
void sett(unsigned char a,unsigned int temp2)
{
pwmset[a]=temp2;
if(pwmset[a]>5000)pwmset[a]=0;
if(pwmset[a]>995)pwmset[a]=995;
ftemp=(pwmset[a]+1000)/1.085;
temp=0xffff-ftemp;
highTh[a]=temp>>8;
highTl[a]=temp&0x00ff;
temp=0xffff-(temp-0xedff);
lowTh[a]=temp>>8;
lowTl[a]=temp&0x00ff;
}
void comintreputer()
{
switch(command[0])
{
case 0x01: //+=5,as key1
{
if(mode==0)
{
for(i=0;i<4;i++)
{
sett(i,pwmset[i]+5);
setdig(&pwmset[0]);
}
}
else
{
sett(mode-1,pwmset[mode-1]+5);
if(pwmset[mode-1]>995)pwmset[mode-1]=995;
setdig(&pwmset[mode-1]);
}
break;
}
case 0x02: //-=5,as key2
{
if(mode==0)
{
for(i=0;i<4;i++)
{
sett(i,pwmset[i]-5);
setdig(&pwmset[0]);
}
}
else
{
sett(mode-1,pwmset[mode-1]-5);
setdig(&pwmset[mode-1]);
}
break;
}
case 0x03: //set pwmset=0;
{
if(mode==0)
{
for(i=0;i<4;i++)
{
sett(i,0);
setdig(&pwmset[0]);
}
}
else
{
sett(mode-1,0);
setdig(&pwmset[mode-1]);
}
break;
}
case 0x04: //mode++;
{
mode++;
if(mode>=5)mode=0;
if(!mode)
{setdig(&pwmset[0]);}
else
{
setdig(&pwmset[mode-1]);
}
dig[3]=mode;
break;
}
case 0x05: //set mode
{
mode=command[1]%4;
if(!mode)
{setdig(&pwmset[0]);}
else
{
setdig(&pwmset[mode-1]);
}
dig[3]=mode;
break;
}
case 0x06: //set pmw[command[1]]=command[2]<<8+command[3]
{ mode=command[1];
temp=command[2];
temp=temp<<8;
temp+=command[3];
sett(mode-1,temp);
setdig(&pwmset[mode-1]);
dig[3]=mode;
break;
}
}//end of switch
}//end of comintpretor
void main()
{
INIT_PWM();
Init_UART();
SBUF='#';
IP=0x02;//set timer0 high interrupt level
mode=0;
for(i=0;i<4;i++)
{
sett(i,0);
}
setdig(&pwmset[0]);
dig[3]=mode;
while(1)
{
//key4
if((P1&0x08)==0)
{
if(pkey&0x08)
{
//begin of cottents a keypress
mode++;
if(mode>=5)
mode=0;
if(!mode)
{setdig(&pwmset[0]);}
else
{
setdig(&pwmset[mode-1]);
}
dig[3]=mode;
//end of cottens of a keypress
}
pkey&=0xff-0x08;
}
else
{
pkey|=0x08;
}//end key4
///key1
if((P1&0x01)==0)
{ if(pkey&0x01==1)
{
//////////
if(mode==0)
{
for(i=0;i<4;i++)
{
sett(i,pwmset[i]+5);
setdig(&pwmset[0]);
}
}
else
{
sett(mode-1,pwmset[mode-1]+5);
setdig(&pwmset[mode-1]);
}
////////////////
}
pkey&=0xfe; //set pkey.0=0;
}
else
{
pkey|=0x01; //set pkey.0=1;
}
//key2
if((P1&0x02)==0)
{
if(pkey&0x02)
{
////////////////
if(mode==0)
{
for(i=0;i<4;i++)
{
sett(i,pwmset[i]-5);
setdig(&pwmset[0]);
}
}
else
{
sett(mode-1,pwmset[mode-1]-5);
setdig(&pwmset[mode-1]);
}
/////////////////////
}
pkey&=0xff-0x02;
}
else{
pkey|=0x02;
}
///key3
if(SW3_Pressed)
{
if(mode==0)
{
for(i=0;i<4;i++)
{
sett(i,pwmset[i]-5);
setdig(&pwmset[0]);
}
}
else
{
sett(mode-1,pwmset[mode-1]-5);
setdig(&pwmset[mode-1]);
}
}
if(commandready)
{
ES=0;
comintreputer();
commandready=0;
ES=1;
}
showdig();
}//end while
}//end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -