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

📄 hello.c

📁 COG-VP12864液晶屏驱动代码及对应RTC实例
💻 C
📖 第 1 页 / 共 2 页
字号:
	for(j = 0;j < 2;j ++){
		for( i =0 ; i < width ; i++,col++)
			WrData(&row,&col,0x00);  //先清一页
		row = row + 1;  //该页清完 页加1
		col = k ;  //从起始列开始
		}				
}
/******************************************************
函数名称:lcd_clear_line
函数功能:清屏,清行
传入参数:start,lines
返 回 值:无
建立时间:2006.04.20
修改时间:
建 立 人:Satellite
修 改 人:
其它说明:start -- 起始行(0~3) lines -- 行数(0~3)
******************************************************/
void lcd_clear_line(INT8U start,INT8U lines)
{
	INT8U	i;
	
	for(i = 0; i < lines ; i++,start++)
		ClrScreen0(start,0,192);	
}
/******************************************************
函数名称:ClrScreenBlack
函数功能:清屏,全屏幕黑
传入参数:无
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void ClrScreenBlack(void)
{
	INT8U row,col;
	for(row = 0; row < 8; row++)
	    for(col = 0; col < LCMLIMIT; col++)
	        WrData(&row,&col,0xFF);	
}
/******************************************************
函数名称:ClrScreenBlack0
函数功能:黑屏,具体清
传入参数:row,col,width
返 回 值:无
建立时间:2006.04.20
修改时间:
建 立 人:Satellite
修 改 人:
其它说明:row -- 行(0~3) col -- 起始列(0~192) width --清屏的宽度(0~192)
******************************************************/
void ClrScreenBlack0(INT8U row,INT8U col,INT8U width)
{
	INT8U	i,j,k;
	k = col ;
	row = 2*row;
	for(j = 0;j < 2;j ++){
		for( i =0 ; i < width ; i++,col++)
			WrData(&row,&col,0xFF);
		row = row + 1;
		col = k ;
		}
}
/******************************************************
函数名称:LcmInit
函数功能:LCM初始化
传入参数:无
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void LcmInit(void)
{
	INT8U cbyte;

	cbyte = DISPOFF;     //关闭显示屏
	WrCmdL(cbyte);
	WrCmdM(cbyte);
	WrCmdR(cbyte);
	cbyte = DISPON;     //打开显示屏
	WrCmdL(cbyte);
	WrCmdM(cbyte);
	WrCmdR(cbyte);
	cbyte = DISPFIRST;  //定义显示起始行为零
	WrCmdL(cbyte);
	WrCmdM(cbyte);
	WrCmdR(cbyte);
	lcd_clear();
}
/******************************************************
函数名称:GetChineseCharactrMode
函数功能:取汉字字模
传入参数:ChineseCharacter,hzmode_buf
返 回 值:无
建立时间:2006.0.20
修改时间:
建 立 人:Satellite
修 改 人:
其它说明:ChineseCharacter -- 汉字 hzmode_buf -- 存字模信息
******************************************************/
GetChineseCharactrMode(INT8U ChineseCharacter,INT8U hzmode_buf[16])
{
	INT16U	offset,i;
	
	offset = ChineseCharacter*16;		
	
	for(i = 0 ; i < 16 ; i ++){
		hzmode_buf[i] = ASCII_dis[offset + i];	
	}
}
/******************************************************
函数名称:ArkLcmDisp
函数功能:显示汉字及字符
传入参数:row,col,strhz
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void ArkLcmDisp(INT8U row,INT8U col,PINT8U strhz)
{
	INT8U	i;
	INT8U  	hzmode_buf[32];

        while(*strhz!=NULL){
	    if(*strhz & 0x80){
	        GetHzMode(strhz, 32,hzmode_buf);
	        PuteDot(&row,&col,hzmode_buf,16);
	        strhz+=2;
	    } else {
                //read_char_lib((int)((*strhz)*16),16,2,hzmode_buf);
                GetChineseCharactrMode(*strhz,hzmode_buf);
	        PuteDot(&row,&col,hzmode_buf,8);
	        strhz++;
	    }
	}
	//DebugPrint("完成正向显示的第 %d 行!!!\n",row/2);
}


/******************************************************
函数名称:ArkLcmDispCtr
函数功能:显示汉字及字符
传入参数:row,col,strhz
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void ArkLcmDispCtr(INT8U row,INT8U col,PINT8U strhz)
{
	INT8U  hzmode_buf[32];

        while(*strhz!=NULL){
	    if(*strhz & 0x80){
	        GetHzMode(strhz, 32,hzmode_buf);
	        PuteDotCtr(&row,&col,hzmode_buf,16);
	        strhz+=2;
	    } else {
                //read_char_lib((int)((*strhz)*16),16,2,hzmode_buf);
                GetChineseCharactrMode(*strhz,hzmode_buf);
	        PuteDotCtr(&row,&col,hzmode_buf,8);
	        strhz++;
	    }
	}
	//DebugPrint("完成反向显示的第 %d 行!!!\n",row/2);
}


/******************************************************
函数名称:PuteDot
函数功能:字符点阵码数据输出
传入参数:row,col,hzaddr,width
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void PuteDot(PINT8U row,PINT8U col,PINT8U hzaddr,INT8U width)
{
	INT8U i;
	INT8U dbyte;
	INT8U ix,iy;
		
	ix = *row;                  //暂存行列坐标,以备下半个字符使用
	iy = *col;
	
	for(i=0;i<width;i++){
	    dbyte = *hzaddr;
	    WrData(row,col,dbyte);
	    hzaddr++;
	    (*col)++;
	    if(*col == LCMLIMIT){
	        *col = 0;
	        *row += 2;
	    }
            if(*row > 7) 
                *row = 0;
        }
        
	*row = ix+1;
	*col = iy;
	
	for(i=0;i<width;i++){
	    dbyte = *hzaddr;
	    WrData(row,col,dbyte);
	    hzaddr++;
	    (*col)++;
	    if(*col == LCMLIMIT){
	        *col = 0;
	        *row += 2;
	    }
            if(*row > 7)
                *row = 1;
	}
	*row = ix;
}


/******************************************************
函数名称:PuteDotCtr
函数功能:字符点阵码数据反显输出
传入参数:row,col,hzaddr,width
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:
******************************************************/
void PuteDotCtr(PINT8U row,PINT8U col,PINT8U hzaddr,INT8U width)
{
	INT8U i;
	INT8U dbyte;
	INT8U ix,iy;

	
	ix = *row;                  //暂存行列坐标,以备下半个字符使用
	iy = *col;
	
	
	for(i=0;i<width;i++){
	    dbyte = ~(*hzaddr);
	    WrData(row,col,dbyte);
	    hzaddr++;
	    (*col)++;
	    if(*col == LCMLIMIT){
	        *col = 0;
	     	*row += 2;
	    }
            if(*row > 7)
                *row = 0;
        }
        
	*row = ix+1;
	*col = iy;
	
	for(i=0;i<width;i++){
	    dbyte = ~(*hzaddr);
	    WrData(row,col,dbyte);
	    hzaddr++;
	    (*col)++;
	    if(*col == LCMLIMIT){
	        *col = 0;
	     	*row += 2;
	    }
            if(*row > 7)
                *row = 1;
	}
	*row = ix;
}

/******************************************************
函数名称:GetHzMode
函数功能:取汉字点阵字模
传入参数:pTmpStr,hz_size,pTmpData
返 回 值:无
建立时间:2005.07.29
修改时间:
建 立 人:Carl
修 改 人:
其它说明:通过read_char_lib()从FLASH中读取
******************************************************/
void GetHzMode( PINT8U pTmpStr, INT8U hz_size,PINT8U pTmpData )
{
	INT8U     qhz,whz,i;
	INT32U    offset;

	qhz=pTmpStr[0]-0xA0;
	whz=pTmpStr[1]-0xA0;
	offset=(94*(qhz-1)+(whz-1))*hz_size;
        //read_char_lib(offset,32,1,pTmpData);
        for(i = 0 ; i < 32 ; i++)
        	pTmpData[i] = mhzk16_dis[offset + i];      
}
/*********************************************************
函数名称:lcd_disp
函数功能:LCD显示
传入参数:row ,col, mode, buf
返 回 值:无
创建时间:2006.04.12
修改时间:
创 建 人:satellite
修 改 人:
其它说明:row-->显示的行(0~3)  col-->开始显示的列(0~192) mode-->显示的模式 0-正显 	其它-反显 buf-->显示的内容
**********************************************************/
void lcd_disp(INT8U row,INT8U col,INT8U mode,INT8U *buf)
{
	if(mode==0)	ArkLcmDisp(2*row,col,buf);
	else		ArkLcmDispCtr(2*row,col,buf);	
}
/******************************************************
函数名称:lcd_init
函数功能:初始化LCD
传入参数:无
返 回 值:无
建立时间:2006.0.20
修改时间:
建 立 人:Satellite
修 改 人:
其它说明:
******************************************************/
void lcd_init(void)
{
	printf("start to initial gpio [15:0] \r\n");
	LcdPortInit();	
	printf("start to initial LCM \r\n");
	LcmInit();
  printf("initialization is completed \r\n");
}


INT8U num0[] = "0";
INT8U num1[] = "1";
INT8U num2[] = "2";
INT8U num3[] = "3";
INT8U num4[] = "4";
INT8U num5[] = "5";
INT8U num6[] = "6";
INT8U num7[] = "7";
INT8U num8[] = "8";
INT8U num9[] = "9";
INT8U year[] = "年";
INT8U month[] = "月";
INT8U date[] = "日";
INT8U dayofweek[] = "星期";
INT8U maohao[] = ":";

unsigned char *cnum(unsigned char num)
{
	unsigned char *p;
	switch(num)
	{
		case 0:p=num0;
			break;
		case 1:p=num1;
			break;
		case 2:p=num2;
			break;
		case 3:p=num3;
			break;
		case 4:p=num4;
			break;
		case 5:p=num5;
			break;
		case 6:p=num6;
			break;
		case 7:p=num7;
			break;
		case 8:p=num8;
			break;
		case 9:p=num9;
			break;
		default: break;
		}
		return p;
	}

/*********************************************************************************
/     输出 年
/************************************************************************/
void coutyear(void)
{
	unsigned char year[5];
	unsigned short tmp;
	tmp = RTC_READ(RTCYEAR);
	year[4] = (tmp & 0xF000)>>12;
	year[3] = (tmp & 0xF00)>>8;
	year[2] = (tmp & 0xF0)>>4;
	year[1] = (tmp & 0xF);
	lcd_disp(0,16,0,cnum(year[4]));
	lcd_disp(0,32,0,cnum(year[3]));
	lcd_disp(0,48,0,cnum(year[2]));
	lcd_disp(0,64,0,cnum(year[1]));
//	lcd_disp(0,80,0,year);
}

/***********************************************************************************
/  输出 月
/****************************************************************************/
void coutmonth(void)
{
	unsigned char month[3];
	unsigned short tmp;
	tmp = RTC_READ(RTCMON);
	month[2] = (tmp & 0x10)>>4;
	month[1] = (tmp & 0xF);
	lcd_disp(0,96,0,cnum(month[2]));
	lcd_disp(0,112,0,cnum(month[1]));
}

/**************************************************************************************
/  输出 日
/************************************************************************************/

void coutdate(void)
{
	unsigned char date[3];
	unsigned short tmp;
	tmp = RTC_READ(RTCDATE);
	date[2] = (tmp & 0x30)>>4;
	date[1] = (tmp & 0xF);
	lcd_disp(0,144,0,cnum(date[2]));
	lcd_disp(0,160,0,cnum(date[1]));
}

/**************************************************************************************
/  输出 星期
/*************************************************************************************/
void coutdayofweek(void)
{
	unsigned char dayofweek[2];
	unsigned short tmp;
	tmp = RTC_READ(RTCDAY);
	dayofweek[1] = (tmp & 0x7);
	lcd_disp(1,128,0,cnum(dayofweek[1]));
}

/************************************************************************************
/  输出 小时
/************************************************************************************/
void couthour(void)
{
	unsigned char hour[3];
	unsigned short tmp;
	tmp = RTC_READ(RTCHOUR);
	hour[2] = (tmp & 0x30)>>4;
	hour[1] = (tmp & 0xF);
	lcd_disp(3,32,0,cnum(hour[2]));
	lcd_disp(3,48,0,cnum(hour[1]));
}

/**********************************************************************************
/  输出 分钟
/**********************************************************************************/
void coutmin(void)
{
	unsigned char min[3];
	unsigned short tmp;
	tmp = RTC_READ(RTCMIN);
	min[2] = (tmp & 0x70)>>4;
	min[1] = (tmp & 0xF);
	lcd_disp(3,80,0,cnum(min[2]));
	lcd_disp(3,96,0,cnum(min[1]));
}

/***********************************************************************************
/  输出 秒
/***********************************************************************************/
void coutsec(void)
{
	unsigned char sec[3];
	unsigned short tmp;
	tmp = RTC_READ(RTCSEC);
	sec[2] = (tmp & 0x70)>>4;
	sec[1] = (tmp & 0xF);
	lcd_disp(3,128,0,cnum(sec[2]));
	lcd_disp(3,144,0,cnum(sec[1]));
}






void main()
{ 
	int i;
	struct SYSTEMTIME *time1,*time2;
//	struct SYSTEMTIME realtime;
	struct SYSTEMTIME settime = {2008,4,4,10,14,8,0};
	lcd_init();
//	time1 = &realtime;
	time2 = &settime;
	SetTime(time2);
	
	while(1)
	{
	coutyear();
	lcd_disp(0,80,0,year);
	coutmonth();
	lcd_disp(0,128,0,month);
	coutdate();
	lcd_disp(0,176,0,date);
	lcd_disp(1,80,0,dayofweek);
	coutdayofweek();
	couthour();
	lcd_disp(3,64,0,maohao);
	coutmin();
	lcd_disp(3,112,0,maohao);
	coutsec();
}
}

⌨️ 快捷键说明

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