#include \"derivative.h\"
uchar table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
byte a;
void delay(word z) {
byte x,y;
for(z;z>0;z--)
for(x=110;x>0;x--)
//延时函数1 / 6
for(y=25;y>0;y--);
}
void crg_init(void) //总线时钟调整
{
CLKSEL=0; //bus=2*16M*(2+1)/(1+1)
PLLCTL_PLLON=1;
SYNR=0x00|0x01;
REFDV=0x80|0x01;
POSTDIV=0X00;
while(!(CRGFLG_LOCK)); //总线频率为24m
CLKSEL_PLLSEL=1;
}
void SPI_int(void) // SPI初始化
2 / 6
{
MODRR_MODRR4=1; //使用PM口
SPI0CR1=0x5e; //中断禁止 主机模式 时钟空闲为高 先发最高位
}
void init()
{
DDRB=0xff;
DDRM=0xff; //选择M口的接口 我做实验时犯的低级错误
}
void send_data(word data) //写一个字节
{
PTM_PTM3=0; //M口的第三引脚为低
SPI0DR=data; //将数据写入移位寄存器
3 / 6
while(!(SPI0SR&0x20)); //等数据发完
}
uchar read(void) //SPI读一个字节
{
while(!(SPI0SR_SPIF)); //检测传输是否完成
4 / 6
return SPI0DRL; //读数据并返回
while(SPI0SR_SPIF==0); //清除该位 为下次读数据做准备
}
void main(void)
{
init();
crg_init();
SPI_int();
EnableInterrupts;
for(;;)
{
a++;if(a==10)a=0;
// a=read();
send_data(a); //发送a的值
PORTB=table[a]; //在数码管上显示a的植
delay(1000); //延时1秒左右
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容