EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机C语言程序设计:用 ADC0808 控制 PWM 输出1 a/ e/ b5 P5 z8 t9 b& X V/ q: P
d' N) g6 I0 x! I0 J
* |) T. i2 u" n# L! {8 L6 U" U! B
/* 名称:用 ADC0808 控制 PWM 输出 说明:使用数模转换芯片 ADC0808,通过调节可变电阻 RV1 来调节脉冲宽度, 运行程序时,通过虚拟示波器观察占空比的变化。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int 5 g; \$ |& ~# Q' m4 x0 l
sbit CLK=P2^4; //时钟信号
5 U7 y- U2 Z7 V" B3 a- A; ^+ T7 Bsbit ST=P2^5; //启动信号
3 q# q$ i% |" wsbit EOC=P2^6; //转换结束信号 sbit OE=P2^7; //输出使能 sbit PWM=P3^0; //PWM 输出 //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<40;i++); } //主程序 void main() { uchar Val; TMOD=0x02; //T1 工作模式 2 TH0=0x14; TL0=0x00; IE=0x82; TR0=1; while(1) { 3 y0 ]0 u0 M) K0 e: m" [% ], `( U( X
. ?2 q" t5 I0 I [% V9 w3 i. P
ST=0;ST=1;ST=0; //启动 A/D 转换
* U" F: i4 J# O W/ w2 W# B3 ?while(!EOC); //等待转换完成 OE=1; 7 x: [2 s% d/ @) @9 C6 |1 X
+ y- W+ e9 X- Z" lVal=P1; //读转换值 OE=0; if(Val==0) //PWM 输出(占空比为 0%) { PWM=0; DelayMS(0xff); continue; } if(Val==0xff) //PWM 输出(占空比为 100%) { PWM=1; 2 @! \- I) Y8 h/ u- @
DelayMS(0xff); continue;
" k+ [6 Q4 V! ]1 K J) y; h0 W } } 4 j& X% d/ V2 a! j4 b
//T0 定时器中断给 ADC0808 提供时钟信号 void Timer0_INT() interrupt 1 { CLK=~CLK; } . J" W; m6 y, W8 T! [
3 q- G2 M1 V& k2 E, q! e' nPWM=1; //PWM 输出(占空比为 0%~100%) DelayMS(Val); PWM=0; DelayMS(0xff-Val);
$ D1 u# t+ Y0 J, ~9 P8 M
- ]" \- [0 l9 ^0 r6 d8 W
& J! i0 Y/ _8 U9 }# |; X8 h) M& a* i8 e. v- y* `1 [
' X# y z1 m/ T) _ |