⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 飞利浦的LPC2103的实验二:四位数码管动态显示0~F
💻 C
字号:
/*===========================================================================
			CopyLeft(CL) FORVERE Late Lee 
			   All rights NOT reserved
		     版权所无,翻版不究,但请保留此处信息。
			http://blog.ednchina.com/guiltcool     
			  any problem or suggestion 
			  mail to:  latelee@163.com
*文件名:	
*文件说明:	
*版本:		v1.0
*芯片:		lpc2103
*晶振:		(外)内部10MHz晶振
*作者:		Late Lee
*日期:		2009年4月5日 noon	
*编译环境:	keil3+proteus7
*tab Width:	
*结果:		仿真通过	
*说明:		四位数码管依次显示0~F,分四次

=============================================================================*/
#include<lpc210x.h>

#define   SPI_CLK   0x00000001            /*P0.0*/
#define   SPI_DATA  0x00000002            /*P0.1*/
#define   SPI_CS    0x00000004            /*P0.2*/

void DelayNS(int dly)
{  int  i;
   for (;dly>0;dly--)
      for(i=0;i<1000;i++);
}

void HC595_SendDat(unsigned char dat,unsigned char position)
{ int i;
  IOCLR=SPI_CS;                       //SPI_CS=0

  IOCLR = 0x00000f00;
// 注意:这里的算术运算优先级高于移位运算!
// 此处是将第position+8的那一位置1,即选择这一位
  IOSET = 1 << position + 8;

  for (i=0;i<8;i++)                    //发送8位数据
  {
	IOCLR=SPI_CLK;                     //SPI_CLK=0
   /*设置SPI的DATA输出值*/
   	if((dat&0x80)!=0) IOSET=SPI_DATA;
        else IOCLR=SPI_DATA;
    dat<<=1;
    IOSET=SPI_CLK;                   //SPI_CLK=1
  }
  IOSET=SPI_CS;                      //SPI_CS=1,输出显示数据
}
 
int main()
{
	const unsigned char DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
                            0x88,0x83,0xC6,0xA1,0x86,0x8E};
  int i = 0,position = 0,num =4;
  unsigned long time = 0;
  IODIR=0x00000f07;
   while(1)
  { 
// 0~3
  while(1)
  {
  for (i= 0;i<num;i++)
    {
	  HC595_SendDat(DISP_TAB[i],position++);
	  DelayNS(5);
	  if(position == 4) position=0;	   
	}
	time++;
	if(time == 50) break;
  }
   position = 0;
   num = 8;
   time=0;

// 4~7
   while(1)
   {
	for (i=4;i<num;i++)
    {
	  HC595_SendDat(DISP_TAB[i],position++);
	  DelayNS(5);
	  if(position == 4) position=0;	
	}
	time++;
	  if(time == 50) break; 
	}
	position = 0;
   num = 12;
   time=0;

// 8~B
   while(1)
   {
	for (i=8;i<num;i++)
    {
	  HC595_SendDat(DISP_TAB[i],position++);
	  DelayNS(5);
	  if(position == 4) position=0;	
	}
	time++;
	  if(time == 50) break; 
	}

   num = 16;
   time=0;

// C~F
   while(1)
   {
	for (i=12;i<num;i++)
    {
	  HC595_SendDat(DISP_TAB[i],position++);
	  DelayNS(5);
	  if(position == 4) position=0;	
	}
	time++;
	  if(time == 50) break; 
	}

	num = 4;
   time=0;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -