完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请大神帮我看下哪出错了,一直能产生PWM波,但是用矩阵键盘却调不了占空比
#include < reg51.h > void delay(unsigned char t); unsigned char key; ***it KEY=P1^0; //PWM输出 unsigned char PWM=0xce ; //赋初值脉宽50% /*********************************************************/ void main() { TMOD=0x22; //T0、T1方式 2 TH0=0x9c ; //产生频率10kHZ 即周期100us TL0=0x9c ; //频率调节 TH1=PWM; //脉宽调节 TL1=PWM; EA=1; //开定时器中断T0、T1 ET0=1; ET1=1; //开定时器T0关定时器T1 TR0=1; TR1=0; { unsigned char temp; P2=0xff; while(1) { do {temp=P2;} while(temp==0xff); delay(10); do{temp=P2;} while(temp==0xff); switch(temp) { case 0xfe:key=1;break; case 0xfd:key=2;break; case 0xfb:key=3;break; case 0xf7:key=4;break; case 0xef:key=5;break; case 0xdf:key=6;break; case 0xbf:key=7;break; case 0x7f:key=8;break; default: break; } while(temp!=0xff)//等待键释放 {temp=P2;} } } while(1) { if(key==1) //增加脉宽 { if(PWM!=0xfa) { delay(10); if(key==1) { PWM++; while(key==1); } } } if(key==2) //减少脉宽 { if(PWM!=0x0A) { delay(10); if(key==2) { PWM--; while(key==2); } } } if(key==3) //脉宽复位 { delay(10); if(key==3) { PWM=0xce; while(key==3); } } } } /*********************************************************/ // 定时器0中断服务程序. /*********************************************************/ void timer0() interrupt 1 { TR0=0 ; TH1=PWM; //赋脉宽值 TL1=PWM; TR1=1; TR0=1; KEY=0; //输出高脉宽 } /*********************************************************/ // 定时器1中断服务程序 /*********************************************************/ void timer1() interrupt 3 { TR1=0 ; KEY=1 ; //输出低脉宽 } /*********************************************************/ // 延时子程序 /*********************************************************/ void delay(unsigned char t) { while(t--); } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-9 06:59 , Processed in 0.535236 second(s), Total 46, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号