附件里包括proteus仿真,c源碼,hex文件等
單片機三路PWM輸出仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (8.29 KB, 下載次數: 64)
下載附件
2018-6-8 03:48 上傳
0.png (51.44 KB, 下載次數: 65)
下載附件
2018-6-8 03:48 上傳
單片機三路PWM輸出源程序如下:
- #include<reg51.h> //
- sbit P1_0 = P1^0; // 三路PWM輸出
- sbit P1_1 = P1^1;
- sbit P1_2 = P1^2;
- sbit key10 = P3^2;
- sbit key11 = P3^3;
- sbit key20 = P3^4;
- sbit key21 = P3^5;
- sbit key30 = P3^7;
- sbit key31 = P3^1;
- unsigned char Set_PWM0 = 2; // 占空比調整
- unsigned char Set_PWM1 = 5;
- unsigned char Set_PWM2 = 8;
- unsigned char counter = 0; // 計數的
- bit bdata tt1,tt2,tt3; // 標志位
- void main()
- {
- TMOD=0x01;
- TH0=(65536-2000)/256; // 定時時間 可以修改
- TL0=(65536-2000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- { // 開關調整 PWM 占空比
- if(key10==0 && tt1==0) {tt1 = 1; Set_PWM0++;} // K1、K2
- if(key11==0 && tt1==0) {tt1 = 1; Set_PWM0--;}
- if(key10==1 && key11==1) tt1=0;
- if(key20==0 && tt2==0) {tt2 = 1; Set_PWM1++;} // K3、K4
- if(key21==0 && tt2==0) {tt2 = 1; Set_PWM1--;}
- if(key20==1 && key21==1) tt2=0;
- if(key30==0 && tt3==0) {tt3 = 1; Set_PWM2++;} // K5、K6
- if(key31==0 && tt3==0) {tt3 = 1; Set_PWM2--;}
- if(key30==1 && key31==1) tt3=0;
- }
- }
- void Timer0(void) interrupt 1 // 定時器0 PWM 控制
- {
- TH0=(65536-2000)/256; // 定時時間 可以修改
- TL0=(65536-2000)%256;
- counter++;
- if(counter >= 16) counter = 0; // PWM 16級 可以修改
- if(counter >= Set_PWM0) P1_0 = 0; else P1_0 = 1;
- if(counter >= Set_PWM1) P1_1 = 0; else P1_1 = 1;
- if(counter >= Set_PWM2) P1_2 = 0; else P1_2 = 1;
- }
復制代碼
所有資料51hei提供下載:
8051三路PWM(可適用于51系列單片機).zip
(53.13 KB, 下載次數: 113)
2018-6-7 09:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|