专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

XS128单片机实验:在示波器上模拟乒乓球比赛

作者:韩冰   来源:本站原创   点击数:  更新时间:2013年11月29日   【字体:

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
/*****************************************************************/
//  This progam is the second homework from Fresscale Traning
//  本题是电子设计大赛的题目:在示波器上模拟乒乓球的比赛;
//  示波器工作在XY李萨如图模式下;设定两路PWM波通过改变占空比,
//  在低通滤波器的作用下,控制电压的变化,转化为xy坐标下,黑点的
//  的周期运动。本题的难点是PWM的产生,xy的关系用单片机内的变量类型
//  准确表示出来。还有就是根据自己的频率选取不同的低通滤波电路。
//1)PWM初始化子程序
/*************************************************************************
//功    能:完成PWM模块初始化
//入口参数:无
//出口参数:无
*************************************************************************/
void PWM_Init(void)
{
    PWME     = 0x00;    //禁止PWM模块
    PWMPRCLK = 0x00;    //CLOCKA的预分频设置为8/clockb的预分频设置为8
    PWMSCLA  = 5;       //SA的分频因子设置为5
    PWMSCLB  = 5;       //SB的分频因子设置为5
    PWMCLK   = 0x05;     //通道0/2选择SA\SB 作为PWM时钟
    PWMPER0  = 200;      //通道0周期寄存器设置为200
    PWMPER2  = 200;     //通道2周期寄存器设置为200
    PWMDTY0  = 0;       //通道0占空比寄存器设置
    PWMDTY2  = 0;       //通道2占空比寄存器设置
    PWMPOL   = 0x05;    //PWM输出先为高电平,之后变为低电平
    PWMCAE   = 0x00;    //左对齐输出
    PWMCTL   = 0x00;    //不级联
    PWME     = 0x05;      //使能PWM通道0/2
}
//2)延时子程序
/*************************************************************************
//功    能:实现一段时间的延时
//入口参数:无
//出口参数:无
*************************************************************************/
void delay(unsigned int delay_time)
{
    unsigned int loop_i, loop_j;                   //定义循环变量
  
    for (loop_i=0; loop_i< delay_time; loop_i++)
    {
        for (loop_j=0; loop_j<5000; loop_j++)
        {
            ;
        }
    }
}        
//3)主程序
/*************************************************************************
//功    能:初始化PWM模块,并实现输出波形占空比的增大和减小
//入口参数:无
//出口参数:无
*************************************************************************/
void main(void)
{
   uchar loop_index;    //定义循环变量
   long  temp;
   uchar ceshi ;
   PWM_Init();
    while(1){
    for(loop_index=0;loop_index<200;loop_index++) {
        temp=loop_index;
        PWMDTY0  = temp;
     
        PWMDTY2 = (1480*temp-7*temp*temp+95000)/1000;
        delay(5);
    }
         
     for(loop_index=200;loop_index>0;loop_index--) {
        temp=loop_index;
        PWMDTY0  = temp;
        PWMDTY2  = (1480*temp-7*temp*temp+95000)/1000;
        delay(5);
    }      
    }
  
}

关闭窗口

相关文章