打印

~~~~~~~~~~~

[复制链接]
1517|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dyw07|  楼主 | 2007-12-1 21:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
*********************************************************************************************/
#include "reg52.h"                               // 包含头文件    

/* 与编译器无关的数据类型定义 */
/********************************************************************************************/
typedef unsigned char      uint8;                // 无符号8位整型变量
typedef signed   char      int8;                 // 有符号8位整型变量
typedef unsigned short     uint16;               // 无符号16位整型变量
typedef signed   short     int16;                // 有符号16位整型变量
typedef unsigned int       uint32;               // 无符号32位整型变量
typedef signed   int       int32;                // 有符号32位整型变量
typedef float              fp32;                 // 单精度浮点数(32位长度)
typedef double             fp64;                 // 双精度浮点数(64位长度)
/********************************************************************************************/

/* 定义位变量 */
sbit P1_7 = P1 ^ 7;                              // 控制LED11               
sbit P1_6 = P1 ^ 6;                              // 控制LED10
sbit P1_5 = P1 ^ 5;                              // 控制LED9
sbit P1_2 = P1 ^ 2;                              // PWMDAC输出,用户可以在PWM测试点上用万用表测量

uint8 scale_0;                                   // 用于保存占空比中输出0的时间份额,总共10份
 
/********************************************************************************************
* 函数名称:Timer2_Server()
* 功    能:定时器2溢出中断服务程序。1/2000 秒中断1次。
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Timer2_Server(void) interrupt 5  
{
  static uint8 tt;                               // tt用来保存当前时间在1秒中的比例位置
  
  TF2=0;
  
  tt++;
  if(tt==10)                                     // 每1/200秒整开始输出低电平
   {
     tt=0;

     if(scale_0!=0)                              // 加入该句的目的是避免灭灯时发生闪烁
      {
        P1_7=0;
          P1_6=0;
        P1_5=0;
        P1_2=0;
      }
   }
  if(scale_0==tt)                                // 按照当前占空比切换输出高电平
   {
     P1_7=1;
       P1_6=1;
     P1_5=1;
     P1_2=1;
   }
}

/********************************************************************************************
* 函数名称:main()
* 功    能:模拟PWM输出控制LED灯的10个亮度级别。LED9~LED11将同时依次产生10个级别的亮度。与此
*           同时,用户可以用万用表在ARMSKY-51Easy教学实验开发板上的PWM测试点进行测量观察。
*********************************************************************************************/       
void main (void)                
{
  uint16 n;
        
  RCAP2H =0xFE;                                  // 赋T2的预置值,溢出1次是1/2000秒钟
  RCAP2L =0x0C;    
  TR2=1;                                         // 启动定时器2
  ET2=1;                                         // 打开定时器2中断
  EA=1;                                          // 打开总中断    

  while(1)                                       // 死循环
      {
        for(n=0;n<50000;n++);                    // 每过一会儿就自动加一个档次的亮度
        scale_0++;
        if(scale_0==10) scale_0=0;                 // 当档次达到10后,归0
      }
}
占空比怎么算

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

71

帖子

0

粉丝