#include
#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挑选SASB 作为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);
}
}
}