|
程序自己模仿的 可是仿真出來(lái)pwm端口一直處于高電平狀態(tài) 想問(wèn)問(wèn)是什么問(wèn)題
電路原理圖如下:
2018-09-04_213334.png (16.67 KB, 下載次數(shù): 30)
下載附件
2018-9-4 21:56 上傳
單片機(jī)源程序:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ALL 65536 //定時(shí)器工作方式1時(shí),最大基數(shù)長(zhǎng)度 65536;
- #define F_osc 12000000 //晶振頻率12M;
- sbit s1=P3^2;//上調(diào)頻率(500-9500hz)
- sbit s2=P3^3;
- sbit s3=P3^4;//上調(diào)占空比(0.1-0.9)
- sbit s4=P3^5;
- sbit pwm=P1^0;
- int i=0,q=0.5,f=500;//設(shè)置初值占空比0.5 頻率0.5khz
- void delay(uchar t); //延時(shí)函數(shù),用于按鍵去抖;
- void init(); //初始化函數(shù),用于定時(shí)器的初始化;
- void key_scan(); //按鍵掃描函數(shù);
- void timer0;
- void delay(uchar t);
- void delay(uchar t)
- {
- uchar a,b;
- while(t--) //每個(gè)脈沖為1us
- {
- for(a=0;a<100;a++)
- for(b=0;b<100;b++);
- }
- }
- void key_scan()
- {
- delay(4);
- if(!s1)
- {
- f=f+500;;
- {
- if(f>9500)
- f=500;
- }
- }
- if(!s2)
- {
- f=f-500;
- {
- if(f<500)
- f=9500;
- }
- }
- if(!s3)
- {
- q=q+0.1;
- {
- if(q>0.9)
- q=0.1;
- }
- }
- if(!s4)
- {
- q=q-0.1;
- {
- if(q<0.1)
- q=0.9;
- }
- }
- }
- void timer0() interrupt 1
- { TR0=1;
- TH0=(65536-(10000*(double (1/f)))/256;
- TL0=(65536-(10000*(double (1/f)))%256;
- i++;
- if(i<=100*q)
- pwm=1;
- if(100*q<i<=100)
- pwm=0;
- if(i>100)
- i=0;
- void init()
- {
- TMOD=0x01;
- ET0=1;
- EA=1;
- TR0=1;
- }
- void main()
- {
- init();
- while(1)
- {
- key_scan();
- }
- }
復(fù)制代碼
|
|