}
if(DisplayNumber==2) PTP&=0x7f;
switch(DisplayNumber) { case 0:
PTT=0xfe; break;
case 1:
PTT=0xfd; break;
case 2:
PTT=0xfb; break;
default: } delay(1); }
PTT=0xf7; break;
/*************************************************************/ /* 主函数 */ /*************************************************************/ void main(void) {
unsigned char i;
for(i=0;i<4;i++){ showdata[i]=16; Show(); }
vTmpPIT=0; second=0;
minute=0; pllclk(); initIOoutput(); initPIT(); EnableInterrupts; for(;;) {
showdata[0]=second; showdata[1]=second/10; showdata[2]=minute; showdata[3]=minute/10; Show(); } }
实验四、SPI练习
/*************************************************************/ /*实验内容:用SPI接口扩展数码管显示
实验原理:SPI作为串行外设接口,有4个外部引脚,分别为 SS(从机选择引脚)、SPSCK(SPI串行时钟引脚) MOSI、MISO;利用SPI进行数据传输时,有主机和从机之分,主机的程序控制着数据的传输,从机的程序必须配合主机的工作,本实验内容是主出从入方式,数据送到移位寄存器164中,数据串入并出, 点亮数码管。*/
//实验接线:1.实验板上SPI的MOSI接164的A脚,SCK接164的CLK脚; 其余空闲。 // 2.164的B脚和/MR脚接高电平,164的Q1~Q7脚)对应接到数码管的A~DP。 //实验现象:显示0-F十六个数字。(对应的选通位接地)
// 将来在产品中可做成静态的串行显示方式,不用再做动态扫描显示。 /*************************************************************/ #include
#include \//const
unsigned
char
table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
const
unsigned
char
table[]={0x88,0xeb,0x4c,0x49,0x2b,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
int a; //\的字型码\
/*************************************************************/ /* 延时函数 */ /*************************************************************/ void delay(int z) {
int x,y; for(z;z>0;z--) for(x=110;x>0;x--) for(y=15;y>0;y--); }
/*************************************************************/ /* SPI初始化 */ /*************************************************************/ void SPI_int(void) // SPI初始化 {
SPI0CR1=0x5e; //中断禁止 主机模式 时钟空闲为高 先发最高位. }
/*************************************************************/ /* 端口初始化 */
/*************************************************************/ void PORT_init() {
// DDRB=0xff;
DDRS=0xff; //选择S口的接口 // DDRT=0xff; }
/*************************************************************/ /* SPI写一个字节 */ /*************************************************************/ void send_data(word data) //写一个字节 {
SPI0DR=data; //将数据写入移位寄存器
while(!(SPI0SR&0x20)); //等数据发完, 查SPI0SR_SPTEF位,见书P79。 }
/*************************************************************/ /* 主函数 */ /*************************************************************/ void main(void) { a=0; PORT_init(); SPI_int(); EnableInterrupts; for(;;)