ææä¸ç¨åºï¼ç¨STC5410åçæºï¼æ¯çæ£ç¡¬ä»¶PWM å¯20æ¡£è°å
并ç¨æ¶²æ¶å±æ¾ç¤ºçº§æ°ï¼å½ç¶å¯ä»¥å»ææ¾ç¤ºç¨åº
#include<STC12C54.H>
#define uchar unsigned char
#define uint unsigned int
uchar vx=10;//vx=10 å¨ä¸çµæ¶ä¸ºå亮度ç¶æï¼å¯æ ¹æ®èªå·±çç¨éåè¦æ±ä»»æè®¾å® vx=20为æ亮
sbit rw=P1^4;
sbit rs=P1^3;
sbit lcden=P1^5;
sbit s2=P2^5;
sbit s3=P2^6;
sbit led=P3^7;//å¯ä»¥ä¸è¦ï¼,å PWM0è¾åºå¯¹åºçå°±æ¯P3^7
#define db P2
void Delay1ms(uint i) //1ms延æ¶ç¨åº,并ä¸è¦å¾åï¼å ææ¯ä¸¤ä¸ªç¨åºåä¸åçï¼
//æ以æ两个延æ¶å½æ°ï¼å¯ååé¢ç延æ¶å½æ°å并
ï½
uint j;
for(;i>0;i--)
{
for(j=0;j<250;j++)
{;}
}
}
void write_com(uchar com) //åLCD1602åå½ä»¤
{
db=com;
rs=0;
rw = 0;
lcden=0;
Delay1ms(10);
lcden=1;
Delay1ms(10);
lcden=0;
}
void write_date(uchar date)ã//åLCD1602åæ°æ®
{
db=date;
rs=1;
rw = 0;
lcden=0;
Delay1ms(10);
lcden=1;
Delay1ms(10);
lcden=0;
}
void init2()ï¼ï¼æ¶²æ¶å±åå§å
{
rw=0;
write_com(0x38);
Delay1ms(10);
write_com(0x0f);
Delay1ms(10);
write_com(0x06);
Delay1ms(10);
write_com(0x01);
Delay1ms(10);
}
void display_brightness (uchar temp1) //æ¾ç¤ºç¨åº æ¾ç¤ºå½åãè°å
å·¥ä½çº§æ°
{
uchar A1,A2;
init2();
A1=temp1/10;
A2=temp1%10;
write_com(0x80);
Delay1ms(10);
write_date(0x30+A1);
write_com(0x81);
Delay1ms(10);
write_date(0x30+A2);
}
/*******************************************************************************/
void PWM_init (void){//PWMåå§åå½æ°
//CMOD=0x02; //设置PCAå®æ¶å¨ æ¶é fosc/2
CMOD=0x00; //设置PCAå®æ¶å¨ æ¶é fosc/12 24/12=2MHZ PWMé¢ç1/256 =1/128 MHz ãããã //å¨æ 128US
CCAPM0=0x42; //PWM0设置PCAå·¥ä½æ¹å¼ä¸ºPWMæ¹å¼ï¼0100 0010ï¼
CCAP0L=0x00; //设置PWM1åå§å¼ä¸CCAP0Hç¸å
CCAP0H=0x00; // PWM1åå§æ¶ä¸º0
CR=1; //å¯å¨PCAå®æ¶å¨
}
/******************************************************************************/
void PWM1_set (uchar a){//PWM1å 空æ¯è®¾ç½®å½æ°
CCAP0L=a; //设置å¼ç´æ¥åå
¥CCAP1L
CCAP0H=a; //设置å¼ç´æ¥åå
¥CCAP1H
}
/*****************************************************************************/
void DelayM(unsigned int a){//延æ¶å½æ° 1mS/次(ç¨äº1Tåçæº)
unsigned char n,i,j;
while(--a!=0){
for(n=1;n>0;n--)
for(j=222;j>0;j--)
for(i=12;i>0;i--);
}
/****************************************************************************/
void main(void)
{
s2= 1;
s3 = 1;
PWM_init ();
display_brightness (vx);
while(1)
{
PWM1_set(vx*12);//æ°å12æ¯é
åvxè°è¯åå¾çï¼æ¤æ¶vxçèµå¼èå´çº¦ä¸º1-20对åºææ-æ亮
if (s2 == 0 )//--------åè°æ´---------//
{
DelayM(20); //延æ¶20毫ç§æ¶æå¨
if(s2 == 0) //å¦æ20MSå s2è¿æ¯0ç¶æå确认ä¸è°é®æ¯æä¸ç
{
vx--;
if(vx<1) //å¦æ设å®vx=20,å°è¯å¥æ¹ä¸ºif(vx<1){vx=10;}å为åæé®å¾ªç¯æ§å¶ï¼åå¯å»é¤å è°æ´æ§å¶é¨å
{
vx=10;
}
}
display_brightness (vx);
while(s2 == 0);//çå¾
é®æ¾å¼
}
if (s3== 0 )ã//--------å è°æ´---------//
{
DelayM(20);
if(s3 == 0)
{
vx++;
if(vx>20)
{
vx=10;
}
}
display_brightness (vx);
while(s3 == 0);
}
}
}
追é®ç¼è¯ä¸äºçï¼
追çç¼è¯éä¸è¿ï¼å¯è½ä½ 没æSTC头æ件ï¼æ®é51 / 52åçæ¯æ 硬件PWMåè½çï¼æ以ä¸è½ç¨51ï¼52ç头æ件ãSTCç½ç«ä¸æ头æ件çï¼æä¹å¯ç»ä½ åï¼ç´æ¥å¤å¶å°å·¥ç¨æ件夹ä¸æå å°KEIL-C51- INCæ件夹ä¸ï¼è¥å¤å¶å°å·¥ç¨æ件夹ä¸#includeè¯å¥å°æ¬å·æ好æ¹æåå¼å·
ãå¦å¤ï¼è¥ä½ ç´æ¥ä»ç½ä¸å¤å¶ç²è´´ä»£ç ç±äºæ ¼å¼é®é¢å¯è½ä¼æä¹±ç ï¼è¦äºæä¹å¯ç»ä½ å