XS128单片机实验:在示波器上模拟乒乓球比赛
时间:12-01
来源:互联网
点击:
#include /* 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选择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);
}
}
}
#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);
}
}
}
XS128单片机实验示波器模拟乒乓 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)