中级会员
- 积分
- 362
- 威望
- 185
- 贡献
- 101
- 兑换币
- 107
- 注册时间
- 2013-7-25
- 在线时间
- 38 小时
- 毕业学校
- 湖北汽车工业学院
|
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
const byte LedData[19] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0xce,0x6e} ;
unsigned int counter=0;
unsigned int i,j,first,secend;
/********************************延迟函数****************************************/
void delay(uint num)
{
uint i,j;
num*=100;
for(i=0;i<600;i++)
for(j=0;j<num;j++);
}
/********************************spi初始化*************************************/
void spibegin(void)
{
//DDRP_DDRP1=1;
//DDRP_DDRP2=1;
DDRP=0X06;
DDRK_BIT1=1;
PORTK_BIT1=1;
}
void spiput(uint a)
{
int i;
for(i=0;i<8;i++)
{
PTP_PTP2=0;
if(a%2==1)
PTP_PTP1=1;
else
PTP_PTP1=0;
PTP_PTP2=1;
a=a/2;
}
}
void bitput (uint b)
{
uint A1,A2,A3,A4,A5;
A5=b/10000;
A4=b/1000-b/10000*10;
A3=b/100-b/1000*10; spi那段是数码管显示,bitput(5)数码管就显示5
A2=b/10-b/100*10;
A1=b%10 ;
if(b<10000&&b>=1000)
{
A5=18;
}
if(b<1000&&b>=100)
{
A5=18;
A4=18;
}
if(b<100&&b>=10)
{
A5=18;A4=18;A3=18;
}
if(b<10&&b>=0)
{
A5=18;A4=18;A3=18;A2=18;
}
spiput(LedData[A1]);
spiput(LedData[A2]);
spiput(LedData[A3]);
spiput(LedData[A4]);
spiput(LedData[A5]);
}
/********************************PLL初始化******************************/
void PLL(void)
{
CLKSEL=0X00;
PLLCTL_PLLON=1;
SYNR=0X02; //f(BUS)=8M*2*(2+1)/(1+1)=24M
REFDV=0X01;
asm NOP;
asm NOP;
while(!(CRGFLG_LOCK==1));
}
/*********************************PWM初始化**************************************/
void PWM(void)
{
PWMCLK=0X00;
PWMPRCLK=0X55;
PWMSCLA=0;
PWMSCLB=0;
PWMCAE=0XFF;
PWMPOL=0X20;
PWMDTY5=6;
PWMPER5=2;
}
/***********************************ECT0初始化***************************************/
void ECT0_init(void)
{
TIOS_IOS0=1; //0通道设置为输入捕捉
TCTL4=0x01; //仅在上升沿捕捉
TSCR1=0X80; //开启定时器
TIE_C0I=1; //允许0通道中断
TSCR2=0X06; //预分频因子为128,主定时器时钟=1/(24000000/128)=5.3us
ICSYS=0x02; //输入捕捉缓冲允许
}
void PACA_init(void)
{ //
PACTL=0X50;
PACN10=0X00;
}
/***************************************MC9S12D64*******************************/
void main(void)
{ unsigned int i;
spibegin(); //spi初始化
PLL(); //PLL初始化
PWM(); //PWM初始化
ECT0_init(); //ECT0初始化
PACA_init(); //16位脉冲累加器A初始化
PWME_PWME5=1; //开启PWM通道5,转动风扇
DDRA_BIT7=1; //使通道7为输出,灯亮
PORTA_BIT7=1; //输出高电平,灯灭
for(;;)
{
EnableInterrupts; //等待中断
}
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 8 void IC0(void) //8为定时器通道0的中断标号
{
first=TC0-secend; //两次计数的差值
secend=TC0; //将TC0赋值给secend用于下次计算差值
TFLG1_C0F=1; //中断发生在0通道对0通道清除标志位
if(PAFLG_PAOVF==1) //如果脉冲累加器A溢出,清除溢出标志
{
PAFLG_PAOVF=1;
}
i=PACN32-j;
j=PACN32;
bitput(first);
delay(1);
PORTA_BIT7=~PORTA_BIT7;
}
|
|