登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] PWM应用(渐变灯)

[复制链接]
发表于 2019-1-28 20:34:30 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 熟练掌握
开始时间: 2019-01-28
结束时间: 2019-01-28
      PWM就是用数字方式产生模拟信号的方法其产生模拟信号幅度由数字信号的宽度决定。#include<STC12C5A60S2.H>
sbit ENLED=P1^1;
sbit p20=P0^0;
unsigned char HighRH=0;
unsigned char HighRL=0;
unsigned char LowRH=0;
unsigned char LowRL=0;
void ConfigPWM(unsigned int fr, unsigned char dc);
void ClosePWM();
void main()
{
unsigned int i;

EA=1;
ENLED=0;
P2=0xFE;

while(1)
{
  ConfigPWM(100, 10);   //&AElig;&micro;&Acirc;&Ecirc;1000hz&pound;&not;&Otilde;&frac14;&iquest;&Otilde;±&Egrave;10
  for(i=0;i<40000;i++);
  ClosePWM();
  ConfigPWM(100,40);
  for(i=0;i<40000;i++);
  ClosePWM();
  ConfigPWM(100,90);
  for(i=0;i<40000;i++);
  ClosePWM();
  for(i=0;i<40000;i++);
}
}

void ConfigPWM(unsigned int fr, unsigned char dc)
{
  unsigned int high, low;
  unsigned long tmp;
  
  tmp=(33784300/12)/fr;
  high=(tmp*dc)/100;
  low=tmp-high;
  high=65536-high+12;
  low=65536-low+12;
  HighRH=(unsigned char)(high>>8);
  HighRL=(unsigned char)high;
  LowRH=(unsigned char)(low>>8);
  LowRL=(unsigned char)low;
  TMOD=0xF0;
  TMOD=0x01;
  TH0=HighRH;
  TL0=HighRL;
  ET0=1;
  TR0=1;
  p20=1;
}

void ClosePWM()
{
  TR0=0;
  ET0=0;
  p20=1;
}

void InterruptTimer0() interrupt 1
{
  if (p20==1)
  {
   TH0=LowRH;
   TL0=LowRL;
   p20=0;
  }
  else
  {
   TH0=HighRH;
   TL0=HighRL;
   p20=1;
  
}

QQ图片20190128203244.jpg
QQ图片20190128203251.jpg
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表