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

📄 main.c

📁 本程序是一个液晶时钟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
//功能:公历节日数据库表
void Festival (void) 
{  //在屏幕第一行显示节日
		if(mo==0x01&&dd==0x01){lcdword(0,0,1,"  新年快乐"); }//1月
		else if( mo == 0x02 && dd == 0x10 ){ lcdword(0,0,1,"国际气象日"); }//2月	
		else if( mo == 0x02 && dd == 0x14 ){ lcdword(0,0,1,"今天情人节"); }				
		else if( mo == 0x03 && dd == 0x08 ){ lcdword(0,0,1," 3.8妇女节"); }	//3月	
		else if( mo == 0x03 && dd == 0x12 ){ lcdword(0,0,1,"  植树节  "); }			
		else if( mo == 0x03 && dd == 0x15 ){ lcdword(0,0,1,"国际消费日"); }			
		else if( mo == 0x04 && dd == 0x01 ){ lcdword(0,0,1,"  愚人节  "); }//4			
		else if( mo == 0x04 && dd == 0x08 ){ lcdword(0,0,1,"  复活节  "); }		
		else if( mo == 0x04 && dd == 0x22 ){ lcdword(0,0,1,"世界地球日"); }				
		else if( mo == 0x05 && dd == 0x01 ){ lcdword(0,0,1,"国际劳动节"); }//5		
		else if( mo == 0x05 && dd == 0x04 ){ lcdword(0,0,1,"中国青年节"); }		
		else if( mo == 0x05 && dd == 0x08 ){ lcdword(0,0,1,"  红十字日"); }		
		else if( mo == 0x05 && dd == 0x12 ){ lcdword(0,0,1,"国际护士节"); }		
		else if( mo == 0x05 && dd == 0x05 ){ lcdword(0,0,1,"近日母亲节"); }		
		else if( mo == 0x05 && dd == 0x31 ){ lcdword(0,0,1,"世界无烟日"); }				
		else if( mo == 0x06 && dd == 0x01 ){ lcdword(0,0,1,"国际儿童节"); }//6
		else if( mo == 0x06 && dd == 0x15 ){ lcdword(0,0,1,"近日父亲节"); }
		else if( mo == 0x07 && dd == 0x01 ){ lcdword(0,0,1,"香港回归日"); }//7
		else if( mo == 0x07 && dd == 0x07 ){ lcdword(0,0,1,"警!!国耻日"); }
		else if( mo == 0x07 && dd == 0x11 ){ lcdword(0,0,1,"世界人口日"); }
		else if( mo == 0x08 && dd == 0x01 ){ lcdword(0,0,1,"八一建军节"); }//8
		else if( mo == 0x08 && dd == 0x15 ){ lcdword(0,0,1,"战胜日本日"); }
		else if( mo == 0x09 && dd == 0x08 ){ lcdword(0,0,1,"国际扫盲日"); }//9
		else if( mo == 0x09 && dd == 0x10 ){ lcdword(0,0,1,"中国教师节"); }
		else if( mo == 0x09 && dd == 0x18 ){ lcdword(0,0,1,"!!9.18记念"); }
		else if( mo == 0x09 && dd == 0x17 ){ lcdword(0,0,1,"国际和平日"); }
		else if( mo == 0x10 && dd == 0x01 ){ lcdword(0,0,1,"  国庆节  "); }//10
		else if( mo == 0x10 && dd == 0x16 ){ lcdword(0,0,1,"世界粮食节"); }
		else if( mo == 0x10 && dd == 0x24 ){ lcdword(0,0,1,"  联合国日"); }
		else if( mo == 0x11 && dd == 0x10 ){ lcdword(0,0,1,"世界青年节"); }//11
		else if( mo == 0x11 && dd == 0x28 ){ lcdword(0,0,1,"    感恩节"); }
		else if( mo == 0x12 && dd == 0x01 ){ lcdword(0,0,1,"世界艾滋日"); }//12
		else if( mo == 0x12 && dd == 0x24 ){ lcdword(0,0,1,"今晚平安夜"); }
		else if( mo == 0x12 && dd == 0x25 ){ lcdword(0,0,1,"  圣诞快乐"); }
		else if( mo == 0x12 && dd == 0x31 ){ lcdword(0,0,1,"  明日新年"); }
		 //非节日时显示时晨信息
		else if ( hh >= 0x04 && hh < 0x06 ){ lcdword(0,0,1,"★★▲凌晨"); }
		else if ( hh >= 0x06 && hh < 0x08 ){ lcdword(0,0,1,"☆○▲早晨"); }
		else if ( hh >= 0x08 && hh < 0x12 ){ lcdword(0,0,1,"●▲▲上午"); }
		else if ( hh == 0x12)              { lcdword(0,0,1,"▲●▲中午"); }
		else if ( hh >= 0x13 && hh < 0x18 ){ lcdword(0,0,1,"▲▲●下午"); }
		else if ( hh >= 0x18 && hh < 0x22 ){ lcdword(0,0,1,"▲●☆晚上"); }
		else if ( hh >= 0x22 && hh <=0x23 ){ lcdword(0,0,1,"★☆★夜里"); }
		else if ( hh >= 0x00 && hh < 0x04 ){ lcdword(0,0,1,"★★★深夜"); }
}
/***************************************************************/
//功能:向LCM中填写年
void lcm_w_yy(void)
{  //if(read_clock(0x8d) != yy)
	//{	
	yy=read_clock(0x8d);   //读取年
		lcdword(1,0,1,"20");	 //显示20
		lcdWriteData((yy/16)+0x30);  //显示年十位	
		lcdWriteData(yy%16+0x30);	  //显示年个位
   // }	
}
/***************************************************************/
//向LCM中填写月
void lcm_w_mo(void)
{
  //if(read_clock(0x89) != mo)
	  //{ 
	  mo = read_clock(0x89);	   //读取月
		lcdWriteCommand(0x92);
		lcdWriteData(0x16);              //显示“-”
			if(mo/16!=0)
			{lcdWriteData((mo/16)+0x30);}	//显示十位
			else{lcdWriteData(0x20);}   //十位为零则消隐			
		lcdWriteData(mo%16+0x30);       //显示月的个位
		lcdWriteData(0x16);	           //显示“-”
       //}	
}
/***************************************************************/
//功能:向LCD中填写日数据
void lcm_w_dd(void)
{
   //if(read_clock(0x87) != dd)
   //{
	dd = read_clock(0x87);	   //读取日
	lcdWriteCommand(0x94);
	if(dd/16!= 0){lcdWriteData((dd/16)+0x30);}	//显示十位
	else{lcdWriteData(0x20);}                    //十位为零则消隐	
	lcdWriteData(dd%16+0x30);				
   //}	
}
/***************************************************************/
//功能:星期处理并送入LCD的指定区域
void lcm_w_xq(void)
{
  unsigned char sel;
  if(read_clock(0x8b) != xq)
	{
	xq = read_clock(0x8b);		//读取星期
	sel = (read_clock(0x8b))%16; //字节低4位的BCD码放入sel
	if(sel==7)  {lcdword(1,6,1,"周日");}    //
  	if(sel==6)  {lcdword(1,6,1,"周六");}    //
  	if(sel==5)  {lcdword(1,6,1,"周五");}    //
  	if(sel==4)  {lcdword(1,6,1,"周四");}    //
  	if(sel==3)  {lcdword(1,6,1,"周");lcdWriteData(0xc8);lcdWriteData(0xfd);}
  	if(sel==2)  {lcdword(1,6,1,"周二");}    //
  	if(sel==1)  {lcdword(1,6,1,"周一");}    //星期一
    }	
}
/***************************************************************/
//向LCD中填写小时数据
void lcm_w_hh(void)
{
  if(read_clock(0x85) != hh)
  {
  hh = read_clock(0x85);  // 读取小时
  if (hh>0x07&&hh<0x22&&setting==0)
   { beepBl(); }   //整点报时音
  }
	lcdWriteCommand(0x9c);
	lcdWriteData((hh/16)+0x30);
	lcdWriteData(hh%16+0x30);     //显示小时位				
}
/***************************************************************/
//功能:向LCD中填写分钟
void lcm_w_mm(void)
{
	if(read_clock(0x83) != mm)
	{mm=read_clock(0x83);}
	if(setting==0)Festival();//节日显示				
	lcdWriteCommand(0x9d);	
	lcdWriteData(0x3a);	       //显示":"
	lcdWriteData((mm/16)+0x30);
	lcdWriteData(mm%16+0x30);   //显示分钟
	lcdWriteData(0x3a);	       //":"	
}
/***************************************************************/
//功能:刷新年月日星期时分
void Refresh(void)
{
		lcm_w_mm();   //刷新 分 
		lcm_w_hh();   //刷新 小时 
		lcm_w_dd();   //刷新 日
		lcm_w_xq();   //更新星期值	
		lcm_w_mo();   //刷新 月
		lcm_w_yy();   //刷新 年
}
/***************************************************************/
//功能:实时更新LCD界面的各个数据
void lcd_Interface(void)
{	uchar *p;
	uint i=0;
	uchar a=0,b=0,c=0;
	if(read_clock(0x81) != ss)
	{	//判断是否需要更新
		ss = read_clock(0x81);	    //更新数据
		lcdWriteCommand(0x9f);		    //秒值在LCD上的写入位置
		lcdWriteData((ss/16)+0x30);	//写十位		
		lcdWriteData(ss%16+0x30);	    //写个位
		led_secd=~led_secd;		    //LED闪烁
		Refresh();	                //刷新日期的其他数据

		/**lcdWriteCommand(0x85);		    //温度在LCM上的写入位置
		lcdWriteData(0x20);				//显示符号'|'
		i=ReadTemperature();        //读温度并送显
		a=i/100;
		lcdWriteData(a+0x30);	        //显示温度十位
		b=i/10-a*10;
		lcdWriteData(b+0x30);	        //显示个位
		lcdWriteData(0x2e);	            //显示"."
		c=i-a*100-b*10;
		lcdWriteData(c+0x30);            //显示小数位	
		lcdWriteData(0x43);	            //显示度C
		****/
	GetChinaCalendarStr(yy,mo,dd,p);
	lcdword(2,0,1,p);          //界面上更新农历
		//if(JieQiStr_2word(yy,mo,dd,q)==1)
		//lcdword(2,6,1,q);			//界面上更新节气
     }
 }
/***************************************************************/
void mode_one(void)
{   setting=1;
    lcdClear();
	lcdword(0, 0, 1, "    重设密码");
	lcdword(1, 0, 1, "    设置时间");
	lcdword(2, 0, 1, "    设置闹钟");
	lcdword(3, 0, 1, "    查看农历");
	switch(cishu)
	{ 	case 0:	convertChar(0, 2, 8);break;
	    case 1: convertChar(1, 2, 8);break;
		case 2:	convertChar(2, 2, 8);break;
		case 3: convertChar(3, 2, 8);break;
		case 4:	lcdword(0, 0, 1, "    设置时间");
	            lcdword(1, 0, 1, "    设置闹钟");
	            lcdword(2, 0, 1, "    查看农历");
				lcdword(3, 0, 1, "    查看阳历");
				convertChar(3, 2, 8);break;	
	}
	cishu++;
	if(cishu==5)cishu=0;
}
/***************************************************************/
//功能:根据获得的键值和当前的状态来确定下一步执行模块的次态
void view_state(void)
{ 
  uchar i,x,*p;
   switch(state)
   {case 0: p=&fun_zero[0];break;
	default: break;
	}
  for(i=1;i<+4;i++)
  { if(keys==*p)             //表中的是不是和读取的键码一致
   {++p;state=*p;		     //存放读取的状态
    ++p;x=*p;			     //附读取的执行模块的代码
    switch(x)
    {case 0: mode_one();i=4;break;
     //ase 2: in_min();i=4;break;
    // case 3: mode23_ret1();i=4;break;
    // case 4: add_one();i=4;break;
     //case 5: set_done_ret23();i=4;break;
    default: break;
    }
   }
   	else if(0==*p)i=4;
	p=p+3;
  }
}
/***************************************************************/
//读取键盘
void read_key(void)
{ 
  P1|=0x0f;keys=P1; //先保护P3口 
  keys|=0xf0;	  //屏蔽其他位
  if((~keys)!=0)		 //有效按键
   {delayMs(50);         //消抖动
    keys=P1; keys|=0xf0;
	if((~keys)==0) keys=0;
    switch(keys)
	{ case 0xfe:keys=1;break;
	  case 0xfd:keys=2;break;
	  case 0xfb:keys=3;break;
	  case 0xf7:keys=4;break;
	  default: break;		
	}
   }
   else keys=0;  
}
/***************************************************************/
//主程序开始
void main (void)
{ uchar InitLine,i;
  state=0;
  cishu=0;
 Init_1302();
 lcdInit ();
 lcdClear();
 lcdword(0, 0, 20, "  多功能液晶时钟");
 lcdword(1, 0, 20, "设计者: 电容器");
 lcdword(2, 0, 20, "仪表技术科陈志伟");
 lcdword(3, 0, 20, "交流QQ:287458808");
 delaySec(8);
 lcdClear();
 lcdword(0, 1, 20, "请稍等::::::::::");
 convertChar(0, 1, 8);
 lcdword(2, 0, 20, "系统初始化::::::");
 for (InitLine=0; InitLine<17; InitLine++)
  { convertChar(2, 0, InitLine);
	delaySec(2);
  }
 lcdClear();
 while(1)
 {if(setting==0) //正在设置则不刷新
  lcd_Interface(); //刷新主界面
   read_key();	  //读取键盘
   if(keys!=0) view_state(); //根据键值执行相应的操作
   for(i=1;i<=25;i++)
   delayMs(30);
   }
}

⌨️ 快捷键说明

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