📄 main.c
字号:
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
char b;
int nDataToDisplay=0,nIndex=0,a=0;
char Table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//LED动态扫描注意事项
/*LED动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象,
一般只要在1S内一个发光管亮24次以上,如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,
所以一般均取几个ms左右为宜。每次LED点亮的时间维持2MS以上,则人眼感觉不到闪烁。 */
void SPI_Init(void) //SPI初始化
{
DDRB=0XFF;
SPI0CR1 = 0x50;
SPI0CR2 = 0x00; /*初始化SPI端口的主模式,主入从出MISO*/
SPI0BR = 0x77; //设置波特率
SPI0DR=0x00; /*虚写,初始化SPI标帜*/
PTH_PTH1=1;
DDRH_DDRH1=1;
PTH_PTH0=1;
DDRH_DDRH0=1;
}
void delay(unsigned int j) /*延时*/
{
unsigned char i;
for(i=0;i<255;i++)
{
for(j=0;j<10;j++)
{}
}
}
void Update_LED() //显示程序
{
int nTemp;
nTemp=nDataToDisplay;
PORTB_BIT5=0;
if((nTemp>0)||(nTemp==0))
{
nIndex=nTemp%10;
while((SPI0SR & 0X80)==0);
SPI0DR=Table[nIndex];
PORTB_BIT5=0;
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
PORTB_BIT5=1;
}
nTemp=nTemp/10;
if(nTemp>0)
{
nIndex=nTemp%10;
while((SPI0SR & 0X80)==0);
SPI0DR=Table[nIndex];
PORTB_BIT4=0;
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
PORTB_BIT4=1;
}
nTemp=nTemp/10;
if(nTemp>0)
{
nIndex=nTemp%10;
while((SPI0SR & 0X80)==0);
SPI0DR=Table[nIndex];
PORTB_BIT3=0;
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
PORTB_BIT3=1;
}
nTemp=nTemp/10;
if(nTemp>0)
{
nIndex=nTemp%10;
while((SPI0SR & 0X80)==0);
SPI0DR=Table[nIndex];
PORTB_BIT2=0;
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
PORTB_BIT2=1;
}
nTemp=nTemp/10;
if(nTemp>0)
{
nIndex=nTemp%10;
while((SPI0SR & 0X80)==0);
SPI0DR=Table[nIndex];
PORTB_BIT1=0;
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
PORTB_BIT1=1;
}
nTemp=nTemp/10;
if(nTemp>0)
{
nIndex=nTemp%10;
while((SPI0SR & 0X80)==0);
SPI0DR=Table[nIndex];
PORTB_BIT0=0;
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
delay(1000000000);
PORTB_BIT0=1;
}
}
void main(void)
{
SPI_Init();
DDRB=0xff;
PORTB_BIT5=0;
PORTB_BIT4=0;
PORTB_BIT3=0;
PORTB_BIT2=0;
PORTB_BIT1=0;
PORTB_BIT0=0;
while(1)
{
Update_LED();
nDataToDisplay= nDataToDisplay+1;
if(nDataToDisplay>999999)
{
nDataToDisplay=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -