EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机C语言程序设计:用 ADC0808 控制 PWM 输出2 i A" L5 q D1 H1 x3 ]# K6 ?% D
+ z2 H/ I2 I1 L# R3 B/ K, b
! i; O: h: R2 g! s/* 名称:用 ADC0808 控制 PWM 输出 说明:使用数模转换芯片 ADC0808,通过调节可变电阻 RV1 来调节脉冲宽度, 运行程序时,通过虚拟示波器观察占空比的变化。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int ' Z& z1 k; S5 p2 h1 V5 b+ z0 }" s
sbit CLK=P2^4; //时钟信号
/ V1 V6 C( u5 z8 |1 x* Zsbit ST=P2^5; //启动信号 1 @( g p& U0 J" \
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) { . t3 |7 v3 G9 Z7 G) M/ w$ g( ]; y
% {9 Q* s, f1 F5 e7 d
ST=0;ST=1;ST=0; //启动 A/D 转换
0 u! ]: Y. X& e4 z# c) J( O+ gwhile(!EOC); //等待转换完成 OE=1; : E/ g. k& A! P9 M$ m! E9 W, j
7 w- n5 ?7 @. r0 t6 y9 u# e! p
Val=P1; //读转换值 OE=0; if(Val==0) //PWM 输出(占空比为 0%) { PWM=0; DelayMS(0xff); continue; } if(Val==0xff) //PWM 输出(占空比为 100%) { PWM=1;
" p# ~' ?: d& y) U& C* { DelayMS(0xff); continue;
- v+ b9 P& J% M2 k9 v } }
0 w7 Y, Z+ o1 B- [7 _
//T0 定时器中断给 ADC0808 提供时钟信号 void Timer0_INT() interrupt 1 { CLK=~CLK; }
% i( X6 W* e8 C9 {' Q 7 W6 j/ R8 ?' V$ s# e9 i7 ` h+ A1 o
PWM=1; //PWM 输出(占空比为 0%~100%) DelayMS(Val); PWM=0; DelayMS(0xff-Val); ) [$ j; E3 ~$ \5 H3 f, w5 k
x" u; q' u- J7 o
5 e7 ` `9 I# l, X# G$ b/ Q
5 K5 c2 C( \0 h- x" Y" {
5 s- t4 i: m' ]9 t
|