XS128單片機(jī)實(shí)驗(yàn):在示波器上模擬乒乓球比賽
#include "derivative.h" /* derivative-specific definitions */
/*****************************************************************/
// This progam is the second homework from Fresscale Traning
// 本題是電子設(shè)計(jì)大賽的題目:在示波器上模擬乒乓球的比賽;
//示波器工作在XY李薩如圖模式下;設(shè)定兩路PWM波通過改變占空比,
// 在低通濾波器的作用下,控制電壓的變化,轉(zhuǎn)化為xy坐標(biāo)下,黑點(diǎn)的
// 的周期運(yùn)動(dòng)。本題的難點(diǎn)是PWM的產(chǎn)生,xy的關(guān)系用單片機(jī)內(nèi)的變量類型
// 準(zhǔn)確表示出來。還有就是根據(jù)自己的頻率選取不同的低通濾波電路。
//1)PWM初始化子程序
/*************************************************************************
//功 能:完成PWM模塊初始化
//入口參數(shù):無
//出口參數(shù):無
*************************************************************************/
void PWM_Init(void)
{
PWME = 0x00; //禁止PWM模塊
PWMPRCLK = 0x00; //CLOCKA的預(yù)分頻設(shè)置為8/clockb的預(yù)分頻設(shè)置為8
PWMSCLA = 5; //SA的分頻因子設(shè)置為5
PWMSCLB = 5; //SB的分頻因子設(shè)置為5
PWMCLK = 0x05; //通道0/2選擇SASB 作為PWM時(shí)鐘
PWMPER0 = 200; //通道0周期寄存器設(shè)置為200
PWMPER2 = 200; //通道2周期寄存器設(shè)置為200
PWMDTY0 = 0; //通道0占空比寄存器設(shè)置
PWMDTY2 = 0; //通道2占空比寄存器設(shè)置
PWMPOL = 0x05; //PWM輸出先為高電平,之后變?yōu)榈碗娖?br /> PWMCAE = 0x00; //左對(duì)齊輸出
PWMCTL = 0x00; //不級(jí)聯(lián)
PWME = 0x05; //使能PWM通道0/2
}
//2)延時(shí)子程序
/*************************************************************************
//功 能:實(shí)現(xiàn)一段時(shí)間的延時(shí)
//入口參數(shù):無
//出口參數(shù):無
*************************************************************************/
void delay(unsigned int delay_time)
{
unsigned int loop_i, loop_j; //定義循環(huán)變量
for (loop_i=0; loop_i< delay_time; loop_i++)
{
for (loop_j=0; loop_j<5000; loop_j++)
{
;
}
}
}
//3)主程序
/*************************************************************************
//功 能:初始化PWM模塊,并實(shí)現(xiàn)輸出波形占空比的增大和減小
//入口參數(shù):無
//出口參數(shù):無
*************************************************************************/
void main(void)
{
uchar loop_index; //定義循環(huán)變量
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);
}
}
}
評(píng)論