📄 tc_clock.c
字号:
*函数名称: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 + -