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

📄 main.c

📁 LPC214X驱动LCD128x64 时钟显示
💻 C
📖 第 1 页 / 共 2 页
字号:
0x00,0x00,0x00,0xFE,0x10,0x52,0x32,0x34,0x14,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,/*"平",16*/

0x00,0x00,0x00,0x08,0x7F,0x51,0x51,0x10,0x7F,0x24,0x24,0x34,0x08,0x16,0x60,0x00,/*"安",17*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"空格",18*/

};
// *********************************************** */
// **
// **
// *********************************************** */
// 此表为图形显示方式下(西文字符:8*8点阵数据)的字模 */
uint8 const CTAB_8_8[]	 ={

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

};
/*
*********************************************************************************************************
** 函数名称 :WRI_CC()
** 函数功能 :写入点阵数据子程序**            
** 入口参数 : LCD_X(0-128),LCD_Y(0-8),CODE,dat8_16(其值表示:
**            1表示8*16点阵式数据,2表示16*16点阵数据即汉字写入,3表示8*8点阵数据)
** 出口参数 :无
*********************************************************************************************************
*/
void WRI_CC	(uint8 x,uint8 y,uint8 cod,uint8 dat8_16)
{
	uint8  m;
	uint8  n;
	uint16 i;
	
	LCD_X = x;
	LCD_Y = y;
	CODE  = cod;
	n     = dat8_16;

	
 	/*  写入汉字,16*16点阵数据  */	
	if(n  == 2)
	{		   	 
		i = CODE * 0x18;
		
		for(m=0;m<12;m++)
		{
		 LCD_POS(LCD_X,LCD_Y);
			
			LCD_WD(CCTAB[i]);    // 写入上半部汉字数据
			i++;
			LCD_Y++;
			LCD_POS(LCD_X,LCD_Y);
			LCD_WD(CCTAB[i]);	// 写入上半部汉字数据
			i++;
				LCD_Y--;
				LCD_X ++;
		}
	}
	/*  写入8*16点阵数据  */	
	if(n  == 1)
	{
		i = CODE * 16;

		for(m=0;m<8;m++)
		{
		  LCD_POS(LCD_X,LCD_Y);
			
			LCD_WD(CTAB_8_16[i]);    // 写入上半部汉字数据
			i++;
			LCD_Y++;
			LCD_POS(LCD_X,LCD_Y);
			LCD_WD(CTAB_8_16[i]);	// 写入上半部汉字数据
			i++;
				LCD_Y--;
				LCD_X ++;
		}      	
	}
	/*  写入8*8点阵数据  */	
	if(n == 3)
	{
		i = CODE * 8;

		for(m=0;m<8;m++)
		{
			 LCD_POS(LCD_X,LCD_Y);
			
			LCD_WD(CTAB_8_8[i]);    // 写入上半部汉字数据
			i++;
			LCD_X ++;
		}  
	    	
	}
}

/*
*********************************************************************************************************
** 函数名称 :Kaiji_Dis_()
** 函数功能 :开机显示子程序**            
** 入口参数 : 
** 出口参数 :无
*********************************************************************************************************
*/
void Kaiji_Dis(void)
{
	
	WRI_CC( 0,0,2,1);//2   
	WRI_CC( 8,0,0,1);//0
	WRI_CC(15,0,0,1);//0
	WRI_CC(23,0,7,1);//7
	WRI_CC(31,0,5,2);//年
 	WRI_CC(43,0,1,1);//1
	WRI_CC(51,0,6,2);//年
	WRI_CC(63,0,1,1);//1
	WRI_CC(71,0,7,2);//日	

	WRI_CC(0,2,1,1);//1
	WRI_CC(8,2,2,1);//2
	WRI_CC(16,2,10,1);//:
	WRI_CC(24,2,0,1);//0
	WRI_CC(32,2,0,1);//0
	WRI_CC(40,2,10,1);//:
	WRI_CC(48,2,0,1);//0
	WRI_CC(56,2,0,1);//0

	WRI_CC(80,2,8,2);//星
	WRI_CC(96,2,9,2);//期
	WRI_CC(112,2,11,2);//一
}


void AD_SET	(void)
	{uint32 ADC_Data;
	PINSEL1 = 1 << 28;		// P0.30连接到AD0.3
	
	/* 进行ADC模块设置 */
	AD0CR = (1 << 3)						|	// SEL=8,选择通道3
			((Fpclk / 1000000 - 1) << 8)	|	// CLKDIV=Fpclk/1000000-1,转换时钟为1MHz
			(0 << 16)						|	// BURST=0,软件控制转换操作
			(0 << 17)						|	// CLKS=0, 使用11clock转换
			(1 << 21)						|  	// PDN=1,正常工作模式
			(0 << 22)						|  	// TEST1:0=00,正常工作模式
			(1 << 24)						|	// START=1,直接启动ADC转换
			(0 << 27);						 	// 直接启动ADC转换时,此位无效
		AD0CR |= 1 << 24;					// 进行第一次转换
		while ((ADDR & 0x80000000) == 0);	// 等待转换结束
		AD0CR |= 1 << 24;					// 再次启动转换
		while ((AD0DR & 0x80000000) == 0);	// 等待转换结束
		ADC_Data = AD0DR;					// 读取ADC结果
		ADC_Data = (ADC_Data >> 6) & 0x3ff;
		ADC_Data = ADC_Data * 2480;			// 参考电压经过3/4分压
		ADC_Data = ADC_Data / 1024;
		WRI_CC(0,6,(ADC_Data / 1000),1);
//		WRI_CC(0,6,(ADC_Data / 1000),1)
		WRI_CC(8,6,(ADC_Data / 100),1);
		WRI_CC(16,6,(ADC_Data / 10),1);
		WRI_CC(24,6,(ADC_Data % 1),1) ;

	}

/*
*********************************************************************************************************
** 函数名称 :
** 函数功能 :时间处理子程序**            
** 入口参数 : 
** 出口参数 :无
*********************************************************************************************************
*/


void YEAR_SET(void)
{ uint8 i;
  DelayNS(1000);
  	for(i= 0;i<1;)				 //修改年
   	 {
	 uint32 year;
   	  	if ((IO0PIN & KEY_B) == 0)
	    { 
	  	YEAR++;
		}
		if ((IO0PIN & KEY_C) == 0)
		{
		YEAR--;
		}
		if (YEAR ==2018)
		{YEAR=2007;
		}
	  	WRI_CC(0,0,18,1);//
		WRI_CC(8,0,18,1);//
		WRI_CC(16,0,18,1);//
		WRI_CC(24,0,18,1);//
		DelayNS(200);
		year= YEAR;
		WRI_CC(0,0,(year / 1000),1);
		year =  year % 1000; 
		WRI_CC(8,0,(year / 100),1);//
		year =  year % 100;
		WRI_CC(16,0,(year / 10),1);//
		WRI_CC(24,0,(year % 10),1);//
		DelayNS(200);
		if ((IO0PIN & KEY_A) == 0)
		{
		DelayNS(10);
		if ((IO0PIN & KEY_A) == 0)
		i=1;
	 	}
	}
}
void MOON_SET(void)	   //修改月份
{  uint8 i;
  DelayNS(1000);
  	for(i= 0;i<1;)				  
	  {uint8 moon;
		if ((IO0PIN & KEY_B) == 0)
	  	{
	  	MONTH++;
		}
		if ((IO0PIN & KEY_C) == 0)
		{
		MONTH--;
		}
			if (MONTH ==13)
		{MONTH=0X00;
		}
		moon = MONTH;			// 获取 月
		WRI_CC(44,0,18,1);
		WRI_CC(52,0,18,1);
		DelayNS(200);		
		WRI_CC(44,0,(moon / 10),1);
		WRI_CC(52,0,(moon % 10),1);
		DelayNS(200);
		if ((IO0PIN & KEY_A) == 0)
		{
		   DelayNS(10);
		   if ((IO0PIN & KEY_A) == 0)
		   {
			i=1;
			}
		}			  
	  }

}
void DAY_SET(void)	   //修改天
{  uint8 i;
  DelayNS(1000);
  	for(i= 0;i<1;)
	  {uint8 day;
		if ((IO0PIN & KEY_B) == 0)
	  	{
	  	DOM++;
		}
		if ((IO0PIN & KEY_C) == 0)
		{
		DOM--;
		}
			if (DOM ==32)
		{DOM=1;
		}
		day = DOM;			// 获取 日
		WRI_CC(72,0,18,1);
		WRI_CC(80,0,18,1);
		DelayNS(200);		
		WRI_CC(72,0,(day / 10),1);
		WRI_CC(80,0,(day % 10),1);
		DelayNS(200);
		if ((IO0PIN & KEY_A) == 0)
		{
		   DelayNS(10);
		   if ((IO0PIN & KEY_A) == 0)
		   {
			i=1;
			}					  
	  	}
	 }
}
void HOUR_SET(void)
{  uint8 i;
  DelayNS(1000);
  	for(i= 0;i<1;)
	  {uint8  hour;
		if ((IO0PIN & KEY_B) == 0)
	  	{
	  	HOUR++;
		}
		if ((IO0PIN & KEY_C) == 0)
		{
		HOUR--;
		}
		if (HOUR ==24)
		{HOUR=0X00;
		}
		hour = HOUR;			// 获取 小时
		WRI_CC(0,2,18,1);
		WRI_CC(8,2,18,1);
		DelayNS(200);		
		WRI_CC(0,2,(hour / 10),1);
		WRI_CC(8,2,(hour % 10),1);
		DelayNS(200);
		if ((IO0PIN & KEY_A) == 0)
		{
		   DelayNS(10);
		if ((IO0PIN & KEY_A) == 0)
		   {
			i=1;
			}					  
	  	}
					  
	 }
}

void MIN_SET(void)
{  uint8 i;
  DelayNS(1000);
  	  for(i= 0;i<1;)
	  {uint8  min;
		if ((IO0PIN & KEY_B) == 0)
	  	{
	  	MIN++;
		}
		if ((IO0PIN & KEY_C) == 0)
		{
		MIN--;
		}
			if (MIN ==60)
		{MIN=0X00;
		} 
		WRI_CC(24,2,18,1);
		WRI_CC(32,2,18,1);
		DelayNS(200);
		min = MIN;			// 获取 分				
		WRI_CC(24,2,(min / 10),1);
		WRI_CC(32,2,(min % 10),1);
		DelayNS(200);
			if ((IO0PIN & KEY_A) == 0)
		{
		   DelayNS(10);
		if ((IO0PIN & KEY_A) == 0)
		   {
			i=1;
			}					  
	  	}
		 }

}	           // 启动RTC	  											   	
void WEEK_SET(void)
{  uint8 i;
  DelayNS(1000);
  	for(i= 0;i<1;)
	  {uint8  dow;
		if ((IO0PIN & KEY_B) == 0)
	  	{
	  	DOW++;
		}
		if ((IO0PIN & KEY_C) == 0)
		{
		DOW--;
		}
			if (DOW ==7)
		{DOW= 0;
		}
		WRI_CC(112,2,18,1);
		WRI_CC(120,2,18,1);
		DelayNS(200);
		dow = DOW;			// 获取 分	
		if(DOW == 0 )
	{	
		WRI_CC(112,2,7,2);
	}
	else
	{
		WRI_CC(112,2,(dow +10),2);//一
	}			
		DelayNS(200);
	
	if ((IO0PIN & KEY_A) == 0)
		{
		DelayNS(10);
		if ((IO0PIN & KEY_A) == 0)
		   {
			i=1;
			}					  
	  	}		  
	  }

}

void Time_set(void )
{	
	CCR   = 0x00;
  	YEAR_SET();
	MOON_SET();
	DAY_SET();
	HOUR_SET();
	MIN_SET();
	WEEK_SET();          
								// 启动RTC	  											   	
 
	CIIR  = 0x01;	           // 设置秒值的增量产生1次中断
	//AMR   = 0xFF;			   // 所有报警都被屏蔽	
	ILR   = 0x03;			   // 清除RTC增量和报警中断标志
	CCR   = 0x11;
}		  
void Key_Scan(void)
{
//	
	if ((IO0PIN & KEY_A) == 0)
	{
	DelayNS(2000);
	if ((IO0PIN & KEY_A) == 0)
	  {
	  Time_set();
	  }
	}
}

/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :实现数字时钟功能
*********************************************************************************************************
*/
int main (void)				 
{ 
	PINSEL0 = 0x00000000; 
	IO0DIR  = 0X0007FFFF; 
	PLLCON = 1;							// 使能PLL
	PLLCFG = 0x40;						// 设置M为6,P为2
	
    PLLFEED = 0xaa;						// 发送PLL馈送序列
    PLLFEED = 0x55; 
	 while((PLLSTAT & (1 << 10)) == 0);	// 等待PLL锁定
    PLLCON = 3;							// PLL使能和连接
    PLLFEED = 0xaa;						// 发送PLL馈送序列
    PLLFEED = 0x55;
	/***********************************/
	        
//	IO0SET = BEEP;
	/***********************************/	
   	/* LCD is inited */
	INI();					   //LCD初始化
	Kaiji_Dis();  			   //显示2007年1月1日	   12
//	AD_SET();
	IRQEnable();               // IRQ中断使能
	RTCInt();
	while(1)
   {
	VIC_Init();
	AD_SET();
	Key_Scan();
	}

}


/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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