51单片机PWM占空比调整

发布者:collectors最新更新时间:2016-09-12 来源: eefocus关键字:51单片机  PWM  占空比调整 手机看文章 扫描二维码
随时随地手机看文章
//51单片机PWM占空比调整演示程序
//(通过测试,注意:AT89S51单片机,有的单片机P3_7需要改为P3^7)

/***************************************************************************** 
* 程序名称:PWM占空比调整演示程序                                            * 
*程序思路说明:                                                              * 
* 只需要4个按键。                                                            * 
*关于频率和占空比的确定,对于12M晶振,输出频率为1KHZ,这样定时中断次数设定为 *
*10,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样可以设 *
*定占空比可从1-99%变化。即0.01ms*100=1ms                                     * 
******************************************************************************/

#include
#define uchar unsigned char 
#define uint unsigned int
uchar timer0_tick,ZKB=1;//timer0_tick计数,ZKB占空比
uchar i=0,n=0,temp=0;
code seven_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//1,2,3, 4, 5, 6, 7, 8, 9
code scan[2]={0xfd,0xfe};
uchar counter[2]={0,0};
sbit AN1=P3^2;//调整个位
sbit AN2=P3^3;//调整十位
sbit AN3=P3^4;//启动按键
sbit AN4=P3^5;//确认按键
void delay(uint z)//软件延时函数
{
   uint x,y;
   for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
static void timer0_isr(void) interrupt 1 using 0 //中断函数
{
   TR0=0;
   TL0=0xf6;
   TH0=0xff;
   TR0=1;
   if (ZKB>99) ZKB=1; 
    if (ZKB<1) ZKB=99;
   counter[0]=ZKB%10;
   counter[1]=ZKB/10;
   n++;
   if(n==100)
    {
     n=0;
     i++;
     if(i==2) i=0;
     P0=seven_seg[counter[i]];
     P2=scan[i];
    }
   timer0_tick++;
   if(timer0_tick++==100)
    {
     timer0_tick=0;
  
    }
     if(AN2==0)
    { 
     delay(100);
     if(AN2==0)
      {
       temp=1;
       counter[0]++;
       if(counter[0]==10)
        {
         counter[0]=0;
        }

      }
    }
   if(AN1==0)
    {
     delay(100);
     if(AN1==0)
      {
       temp=1;
       counter[1]++;
       if(counter[1]==10)
        {
         counter[1]=0;
        }

      }
      }
ZKB=counter[0]+counter[1]*10;
if(AN4==0)
   {
    delay(5);
    if(AN4==0)
    temp=0;
   }
if(temp==1)
P3_7=0;// P3_7为脉冲输出引脚
else 
   {
    if (timer0_tick<=ZKB)      /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/ 
        {
      P3_7=1;
     } 
       else 
        {
     P3_7=0;
     }

   }
} 
static void timer0_initialize(void)//中断初始化
{
   EA=0;
   timer0_tick=0;
   TR0=0;
   TMOD=0x01;
   TL0=0xf6;
   TH0=0xff;
   PT0=0;
   ET0=1;
   TR0=1;
   EA=1;
}
void main(void)
{
   STAR: delay(100); 
     if(AN3!=0) goto STAR;//按键3启动脉冲
     timer0_initialize();
     while(1);
}
//按按键3启动脉冲器,初始设置占空比为1%,按键1调整十位,
//按键2调整个位,一旦调整,输出为0,必须按确认键确认,
//输出正确脉冲.可以占空比1-99%任意调节。
关键字:51单片机  PWM  占空比调整 引用地址:51单片机PWM占空比调整

上一篇:以51单片机为例,一个简单的串口通信协议C程序
下一篇:单片机控制 舵机 参考程序

推荐阅读最新更新时间:2024-03-16 15:09

51单片机设计的超声波测距器
  一、设计要求   设计一个超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量范围在0.10-3.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。   二、设计思路    超声波传感器及其测距原理    超声波是指频率高于20KHz的机械波。为了以超声波作为检测手段,必须产生超生波和接收超声波。完成这种功能的装置就是超声波传感器,习惯上称为超声波换能器或超声波探头。超声波传感器有发送器和接收器,但一个超声波传感器也可具有发送和接收声波的双重作用。超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声
[单片机]
<font color='red'>51单片机</font>设计的超声波测距器
基于51单片机的语音采集系统设计
功能: 基于51单片机的语音实时采集系统 系统由STC89C52单片机+ISD4004录音芯片+LM386功放模块+小喇叭+LCD1602+按键+指示灯+电源构成 具体实现功能: (1)可通过按键随时选择相应的录音进行播放; (2)可以通过按键随时录音,可以录制4段声音,并可以按键控制播放和暂停,最长可以录制8分钟; (3)播放的音量可以通过调节电位器改变。 第1章前言 1.1 研究意义 数码录音笔对于我们现如今的人们己经是再熟悉不过的产品了,它己经应用在了很多地方,其中主体部分应该是记者了。正是基于录音笔能够录音的特点,在你无法凭借记忆记住重要谈话,或者重要会议的重要内容的时候,它便体现除了它的优势,清晰完整无误的记录下你要记录
[单片机]
基于<font color='red'>51单片机</font>的语音采集系统设计
一种基于51单片机的可控成像系统设计
0 引言 光学成像系统是将光学信息转化为人们更易处理的电子信息的重要工具,特别对于智能监控、医学诊断及消费电子领域,其重要性就更大。随着成像系统功能的复杂化,摄像机的便携易控性成了设计中需考虑的重要要素。自从1969年Willard S.Boyle和George E.Smith发明电荷耦合器(CCD)以来,它一直就是光学成像系统的首选传感器。相对于目前发展快速CMOS图像传感器,它仍然具备噪声低,动态范围高的优点。而CCD的模拟前端决定了采集信号的质量,对整个系统信噪比有着决定性的影响,因此对它的噪声抑制是设计中的重点。完成各种图像处理功能的模块是成像系统的核心,针对低照度视频信号成像的设计要求,采用专业信号处理芯片进行各种处理
[单片机]
一种基于<font color='red'>51单片机</font>的可控成像系统设计
基于51单片机的实时时钟设计
功能: 通过8位数码管实现实时时钟,可以设置时间,切换显示模式,显示年月日,时分秒信息;可通过按键修改信息,增加、减少、确定、取消、上一个、下一个、切换模式、设置等功能。 时分秒 年月日: 部分程序: #include reg51.h #include MAX7221.h #include DS1302.h void InitTimer0(void); //定时器T0初始化函数 void Disp(void); //时间显示函数 void SSetTime(unsigned char n,unsigned char m,unsigned char *readvalue,unsigned char *Cfla
[单片机]
51单片机与ARINC429航空总线接口设计
1 DEI1016的主要功能   DEI1016是Device Engineering Incorporated 生产的一种可支持ARINC429航空总线协议的串行接收、发送器件。该器件的主要功能如下:   ●串行数据字长为32或25位;   ●串行数据速率为100kbps或12.5kbps;   ●具有独立的收、发电路;   ●两个独立的接收器可直接与ARINC429总线接口;   ●具有串/并接收数据转换,和并/串发送数据转换功能;   ●对接收的数据可进行奇偶状态校验;并可对发送数据奇偶状态进行设置;   ●可自动产生字与字之间的间隔;   ●采用单一+5V供电。 2 DEI1016的工作原理   D
[单片机]
<font color='red'>51单片机</font>与ARINC429航空总线接口设计
基于8051单片机的温湿度采集系统设计
通过前面的学习,我们学会了如何用串口发送数据和接收固定字节的命令。今天,我们继续讨论串口应用协议,主要焦点还是在如何有效地使用串口发送数据。为了简化描述,假设我们基于8051单片机开发一个温湿度采集系统,周期将温度和湿度数据上报到上位机。温度和湿度定义如下: float temperature = 25.0; //温度 float humidity = 70.0; //湿度 我们至少可以设计出以下两种不同的串口应用协议: 1.固定大小的消息:先发送float类型的温度,再发送float类型的湿度。每次传输8个字节。 温度(4字节) 湿度(4字节) 代码实现: // 固定消息发送温度和湿度函数 void se
[单片机]
基于80<font color='red'>51单片机</font>的温湿度采集系统设计
51单片机C51精确延时
如下程序能实现ms级的比较精确的延时: void Delayms(unsigned int n) { unsigned int i,j; for(j=n;j 0;j--) for(i=112;i 0;i--); } 用keil可以看出这个延时的时间,我们先延时1ms(Delayms(1))。 进入Delayms前,sec=0.00042209s 延时后,sec=0.00142253s 可以知道Delayms(1)实际延时0.00142253s 0.00042209s=0.00100044s 1ms 同样如果想延时15ms的话,用Delayms(15),实际延时0.01480903s 15ms
[单片机]
<font color='red'>51单片机</font>C51精确延时
51单片机学习:定时器0实验
实验名称:定时器0实验 接线说明: 实验现象:下载程序后,D1指示灯间隔1s闪烁 注意事项: ***************************************************************************************/ #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; //定义LED1管脚 sbit LED1=P2^0; /********************************************************************
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved