2条回答 默认 最新
- CSDN专家-深度学习进阶 2021-06-10 11:11关注
可以参考下这个
#include <reg52.h> #define LED1 P0 #define LED2 P2 #define PWM_Module_Num 16 sbit KEY1 = P3^2; sbit KEY2 = P3^3; sbit KEY3 = P3^4; sbit KEY4 = P3^5; unsigned int LED_Temp[PWM_Module_Num]={ 0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080, 0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000}; unsigned char Flow_Mode; void Delay(unsigned int Num) { unsigned int i,j; for(i=0;i<Num;i++) for(j=0;j<110;j++) ; } void Time0_Mode1(void) { TMOD=0x01; //设置T0为工作方式0 TH0=(65535-50000)/256; //5000us延时 TL0=(65535-50000)%256; /*Timer0工作在模式0下时为13位定时/计数器, TL0只使用前5位,故对32进行求余/模 */ EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 } void KEY_Scan(void) { if(KEY1 == 0) { Delay(1); if(KEY1 ==0) { Flow_Mode = 1; while(!KEY1); } } if(KEY2 == 0) { Delay(1); if(KEY2 ==0) { Flow_Mode = 2; while(!KEY2); } } if(KEY3 == 0) { Delay(1); if(KEY3 ==0) { Flow_Mode = 3; while(!KEY3); } } if(KEY4 == 0) { Delay(1); if(KEY4 ==0) { Flow_Mode = 4; while(!KEY4); } } } void main() { unsigned int LED; Time0_Mode1(); while(1) { KEY_Scan(); } } unsigned char i=0; unsigned char Old_Mode; void Timer0()interrupt 1 { TH0=(65535-50000)/256; //5000us延时 TL0=(65535-50000)%256; switch(Flow_Mode) { case 1: i++; if(i==PWM_Module_Num) i=0; Old_Mode = Flow_Mode; LED1 = ~LED_Temp[i]/256; LED2 = ~LED_Temp[i]%256; break; case 2: i--; LED1 = ~LED_Temp[i]/256; LED2 = ~LED_Temp[i]%256; if(i==0) i=PWM_Module_Num-1; Old_Mode = Flow_Mode; break; case 3: P2 = 0x0f; i=0; break; case 4: Flow_Mode = Old_Mode; P2 = 0xf0; break; default: Flow_Mode = 1; break; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用 1