EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机C语言程序设计:用 ADC0808 控制 PWM 输出
/ l% O5 I7 i n, u: `
U# H3 g: y( N# k! f
) W7 q3 P1 q+ m$ d% |! v3 x! N7 w/* 名称:用 ADC0808 控制 PWM 输出 说明:使用数模转换芯片 ADC0808,通过调节可变电阻 RV1 来调节脉冲宽度, 运行程序时,通过虚拟示波器观察占空比的变化。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int
& f. s o9 K( z# `sbit CLK=P2^4; //时钟信号
5 x P. j, s" Ysbit ST=P2^5; //启动信号 ( B/ V/ Z& f; q+ ^* w" h/ C6 _
sbit 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) {
$ W, Q T5 S' d6 m3 I% v% Y) C0 Z1 z& }' I6 o/ K
ST=0;ST=1;ST=0; //启动 A/D 转换
* R0 j! A* R" K! i% Bwhile(!EOC); //等待转换完成 OE=1; 5 `5 S2 h T5 R! I" ]
" v' R/ x+ j7 o5 P0 s6 a. [* \
Val=P1; //读转换值 OE=0; if(Val==0) //PWM 输出(占空比为 0%) { PWM=0; DelayMS(0xff); continue; } if(Val==0xff) //PWM 输出(占空比为 100%) { PWM=1;
- z, t7 S9 }4 v4 s7 l' g$ r* V. j DelayMS(0xff); continue;
/ t# y1 E% h A+ J( l } } 0 m$ y: g/ q' ?* {
//T0 定时器中断给 ADC0808 提供时钟信号 void Timer0_INT() interrupt 1 { CLK=~CLK; } ; u# B! Z: J) ^# [
: i8 p4 H7 X* e6 O4 E [* A3 dPWM=1; //PWM 输出(占空比为 0%~100%) DelayMS(Val); PWM=0; DelayMS(0xff-Val); 4 m, q R, ]# a) C
9 A( u* W- ?$ K; ?% k& p& r
1 p$ V, P: [- O. T+ G* \8 Q) w X$ ~+ i7 x
; Z+ V2 |# E. Z) N/ Y3 o8 V$ _$ i |