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

📄 nedu_drive_lcd.c

📁 一个基于单片机的小型操作系统
💻 C
字号:
/*
*********************************************************************************************************************
*                  东软培训中心教学项目:基于ARM和uc/os-II的PDA系统
*
*                      (c) Copyright 2005, 东软培训中心
*                             All Rights Reserved
*
* 模块名称:驱动程序模块
* 文件名:NEDU_DRIVE_LCD.C
* 作者:朱成果
* 时间:2005年9月20日
* 版本:V0.01
**********************************************************************************************************************
*/
#include "def.h"
#include "44b.h"
#include "driven.h"


U32* pLCDBuffer16=(U32*)0xc000000;

extern RTC_REG RTC_data, RTC_Sdata;
extern char intstr[9];
extern RECLIST numturm[100];

void LCDDisplayOpen(U8 isOpen);
void Delay(int time);
/*
**********************************************************************************************************************
*                      LCD_INIT
*
* 作者:北京博创兴业科技有限公司
*
* 时间:2005年9月20日
*
* 描述:初始化显示控制器的相关寄存器,清除从0x0c000000开始的缓冲区320*240=768000字节。
*
* 参数:无
*
* 返回值:无
* 
***********************************************************************************************************************
*/
void LCD_Init()
{
	int i;
	U32 LCDBASEU,LCDBASEL,LCDBANK;

    	LCDDisplayOpen(FALSE);
    	rLCDCON1=(0);
	    // disable LCD display
	rLCDCON2=(239)|(119<<10)|(15<<21);
	    //320x240LCD  LINEBLANK=15 (without any calculation) 
	LCDBANK=0xc000000>>22;//((U32)LCDBuffer16)>>22;
	LCDBASEU=0x0;//((U32)LCDBuffer16)&0x3fffff;
	LCDBASEL=LCDBASEU+(160)*240;
	rLCDSADDR1= (0x3<<27) |(LCDBANK<<21)|LCDBASEU;//| ((((U32)LCDBuffer16)>>1)&0x7ffffff);
	    // color_mode, LCDBANK, LCDBASEU
	rLCDSADDR2= (0<<29)|(0<<21)|LCDBASEL;
	rLCDSADDR3= (320/2)|(0<<9);
	    //No virtual screen. 
	rREDLUT=0xfca86420;
	rGREENLUT=0xfca86420;
	rBLUELUT=0xfffffa50;

	rLCDCON1=LCDCON1_ENVID|0<<1|0<<2|0<<3|(2<<5)|1<<7|(0x3<<8)|(0x3<<10)|(CLKVAL<<12);//|LCDCON1_MMODE;
	    // enable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk,CLKVAL=20

	for(i=0;i<80*240;i++)	//清除显示缓冲区
		*(pLCDBuffer16+i)=0x0;

	LCD_loard_tig(PDA_NEUTIG);
	Delay(500);
	LCDDisplayOpen(TRUE);
}
/*
**********************************************************************************************************************
*                       LCDDISPLAYOPEN
*
* 作者:北京博创兴业科技有限公司
*
* 时间:2005年9月20日
*
* 描述:根基输入参数通过GPB4开关显示。
*
* 参数: isOpen,逻辑变量,为TRUE时,打开显示,FALSE时关闭显示。
*
* 返回值:无
* 
***********************************************************************************************************************
*/
void LCDDisplayOpen(U8 isOpen)
{
	if(isOpen){
		rPDATB&=~LCDDisplayPin;
	}
	else{
		rPDATB|=LCDDisplayPin;
	}
}

/*
**********************************************************************************************************************
*                       LCD_CLEAR
*
* 作者:朱成果
*
* 时间:2005年10月27日
*
* 描述:自动清除屏幕上"Neusoft东软"下方的所有内容。
*
* 参数:int mod:0:清除工作区;1:清除工作区和状态区;2:清除状态区;default:清除工作区。
*
* 返回值:无
* 
***********************************************************************************************************************
*/
void LCD_Clear(int mod)
{
	int i,clrnum;
	U32* pList;
	
	switch (mod)
        {  case 0:
        	 pList =(U32*)0xc002300;
        	 clrnum = 0x3b60;
             break;
           case 1:
           	 pList =(U32*)0xc002300;
        	 clrnum = 0x42e0;
             break;
           case 2:
           	 pList =(U32*)0xc010e00;
        	 clrnum = 0x780;
             break;
           default:
           	 pList =(U32*)0xc002300;
        	 clrnum = 0x3b60;
             break;  
        }  
           
	//LCDDisplayOpen(FALSE);
	for (i=0;i<clrnum;i++)
	{
		*pList = 0xDBDBDBDB;
		pList +=1;
	}
	//LCDDisplayOpen(TRUE);
}

/*
**********************************************************************************************************************
*                       LCD_INIT_FRAME
*
* 作者:朱成果
*
* 时间:2005年9月23日
*
* 描述:初始化所有显示缓冲区
*
* 参数:无
*
* 返回值:无
* 
***********************************************************************************************************************
*/
void LCD_loard_tig(int tignum)
{
	//LCDDisplayOpen(FALSE);
	LCD_DDB(tignum);
	//LCDDisplayOpen(TRUE);
}
/*
**********************************************************************************************************************
*                       LCD_PUTCF
*
* 作者:朱成果
*
* 时间:2005年10月2日
*
* 描述:把ASCII字符按指定颜色,直接打印到屏幕指定位置。
*	 
* 参数:ch:所要打印的字符ASCII值;color:所要打印的颜色,256色;pput:字符要打印屏幕位置左上角地址。
*
* 返回值:TRUE:打印成功;FALSE:打印失败。
* 
***********************************************************************************************************************
*/
U8 LCD_Putcf(char ch, U32 fcolour, U32 *pdis, U32 bcolour)
{
	
	U8 i;
	
	i = LCD_PUTC(ch, fcolour, pdis, bcolour);
	
	return(i);
}
/*
**********************************************************************************************************************
*                       LCD_PRINTS
*
* 作者:朱成果
*
* 时间:2005年10月2日
*
* 描述:把ASCII字符串按指定颜色,直接打印到屏幕指定位置。
*	 
* 参数:plist:所要打印的ASCII字符串首地址;color:所要打印的颜色,256色;pput:字符要打印屏幕位置左上角地址。
*
* 返回值:TRUE:打印成功;FALSE:打印失败。
* 
***********************************************************************************************************************
*/
U8 LCD_Prints(char *plist, U32 fcolour, U32 *pdiss, U32 bcolour)
{

	U8 i;
    while ( *plist != 0x0d & *plist != 0x0 )
	{
		i = LCD_Putcf(*plist,fcolour,pdiss,bcolour);
		if(i == FALSE)
			break;
		plist += 1;
		pdiss += 2;
	}
	return(i);
}
//end of lcd module

⌨️ 快捷键说明

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