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

📄 tc_clock.c

📁 在ICCAVR环境下做的ATMEGA128单片机实现模拟时钟
💻 C
📖 第 1 页 / 共 2 页
字号:
*函数名称:LCD_WRITE_COM(com)
*函数功能:向LCD写入命令
*入口参数:com
*出口参数:无
***********************************************/
void LCD_WRITE_COM(uchar com)
{
  LCDENL;
  delayUS(2);
  LCDDIL;
  delayUS(2);
  LCDENH;
  delayUS(2);
  PORTC=com;
  delayUS(2);
  LCDENL;
}
/*******************************************
*函数名称:LCD_WRITE_ADD_CHAR(uchar x,y ,uchar *p)
*函数功能:在坐标xy处写入西文字符
*入口参数:x,y 写入字符的坐标,  *p字符编码表的首地址
*出口参数:无
**********************************************/
void    LCD_WRITE_ADD_CHAR(uchar x, uchar y, uchar  p)
{
  uchar i;
  x=0xb8+x*2;
  y=0x40+y*8;
  LCD_WRITE_COM(x);    //x为行
  LCD_WRITE_COM(y);    // y为列
  for(i=0;i<8;i++)
  {
      LCD_WRITE_DAT(table[p][i]);     //西文字母的上半部分,由8行点构成(每行有8个点)
  }
   LCD_WRITE_COM(x+1);
  LCD_WRITE_COM(y);
    for(i=0;i<8;i++)                                 //写入西文字母的下半部分
  {
      LCD_WRITE_DAT(table[p][8+i]);
  }
}
void LCD_WRITE_ADD_CHINESE(uchar x,uchar y,uchar p)
{
   uchar i;
  x=0xb8+x*2;
  y=0x40+y*8;
  LCD_WRITE_COM(x);
  LCD_WRITE_COM(y);
  for(i=0;i<16;i++)
  {
      LCD_WRITE_DAT(Tab_Chinesepoem[2*p][i]);  
  }
   LCD_WRITE_COM(x+1);
  LCD_WRITE_COM(y);
    for(i=0;i<16;i++)
  {
      LCD_WRITE_DAT(Tab_Chinesepoem[2*p+1][i]);
  }
}

/********************************************************
*函数名称:LCD_WRITE_PICTURE()
*函数功能:在LCD液晶屏上显示图片‘南华大学电气工程学院’
*函数引用了字模软件生成的字模表Tab_pic2[][16]
*其取模方式为  :从第一列开始向下取8个点作为一个字节
,然后从第二列开始向下取8个点作为第二个字节...依此类推。
如果最后不足8个点就补满8位。  取模顺序是从低到高,即第
一个点作为最低位。如*-------取为00000001
***********************************************************/
void LCD_WRITE_PICTURE()
{
  uchar i,j,k;
  uint a;
  LCDCS1H;
  LCDCS2L; 
   LCD_WRITE_COM(0x3F);
  LCD_WRITE_COM(0xC0);
  for(k=0;k<8;k++)
  {
     LCD_WRITE_COM(0xB8+k);         //起始行,每页有八行
	 LCD_WRITE_COM(0x40);              //起始列,列自动加一
               for(i=0;i<4;i++)
                   for(j=0;j<16;j++)
                            {
                              LCD_WRITE_DAT(Tab_pic2[i+k*8][j]);
                              
                            }
							
  }
   LCDCS1L;
  LCDCS2H; 
   LCD_WRITE_COM(0x3F);
  LCD_WRITE_COM(0xC0);
  for(k=0;k<8;k++)
    {
         LCD_WRITE_COM(0xB8+k);         //起始行,每页有八行
	     LCD_WRITE_COM(0x40);              //起始列,列自动加一
               for(i=0;i<4;i++)
                   for(j=0;j<16;j++)
                            {
                              LCD_WRITE_DAT(Tab_pic2[i+4+k*8][j]);        
                              
                            }
     }
}
/***************12864液晶清屏**********************/
void LCD_CLS()
{
  uchar i,j;
  LCDCS1H;         //清左边屏幕
  LCDCS2L;
  LCD_WRITE_COM(0x3F);
  LCD_WRITE_COM(0xC0);
  for(i=0;i<4;i++)
    for(j=0;j<8;j++)
	{
	   LCD_WRITE_ADD_CHAR(i,j,0x0C);
	}
	
   LCDCS1L;       //清右边屏幕
   LCDCS2H;
   LCD_WRITE_COM(0x3F);
   LCD_WRITE_COM(0xC0);
  for(i=0;i<4;i++)
    for(j=0;j<8;j++)
	{
	   LCD_WRITE_ADD_CHAR(i,j,0x0C);
	}
}									  

//定时器0溢出中断函数

/*****************************************/
void   Timer1_INIT()
{
   TCNT1H=0xB9;                    //在18.432MHz晶振下,取1024分频时钟设初值
   TCNT1L=0xAF;
   TCCR1A=0x00;                    //普通模式
   TCCR1B|=0x05;                   //时钟选择为1024分频模式
   SREG|=BIT(7);                       //使能全局中断
   TIMSK|=0x04;                        //TIMSK的bit2为定时器1溢出中断使能
}
/****************************************
* 名称:Timer1_int()                定时器1中断函数
* 功能:实现秒计数
**************************************/
void  Timer1_int()
{
    TCNT1H=0xB9;                   //重装初值
    TCNT1L=0xAF;
	sec++;
	if(sec==60)
	{
	sec=0;
	min++;
	}
}
void CLOCK()
{
  if(min==60)
    {
	min=0;
	hour++;
	if(hour==24)
	   {
	   hour=0;
	   date++;
	    day++;
		if(day==8)
		{day=1;}
	     if(date==32&&((mon==1)|(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12)))
		   {
		    date=1;
			mon++;
			}
		  if(date==31&&mon!=2)
		   {
		     date=1;
			 mon++;
		   }	
		  if(date==29&&mon==2&&year%4==0)
		  {
		  date=1;
		  mon++;
		  }
		   if(date==30&&mon==2&&year%4!=0)
		   {
		   date=1;
		   mon++;
		   }
	   }
	   if(mon==13)
	     {
	       mon=0;
		   year++;
		   if(year==100)
		   {year=0;}
	     }
	}
}

/*********************************************
*函数名称:

⌨️ 快捷键说明

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