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

📄 lcd.c

📁 ucos在9200上的移植
💻 C
字号:
/*cuixinwei*/
/*cuixinwei3000@yahoo.com.cn*/
/*2008.3.3*/

#include "ucos_ii.h"
#include "lcd.h"
#include "AT91RM9200.h"

extern void	AT91F_PIO_SetOutput(AT91PS_PIO pPio,unsigned int flag);
extern void	AT91F_PIO_ClearOutput(AT91PS_PIO pPio,unsigned int flag);
extern void			AT91F_PIO_InterruptDisable(AT91PS_PIO pPio,unsigned int flag);
extern void			AT91F_PIO_CfgPullup(AT91PS_PIO pPio,unsigned int pullupEnable);
extern void			AT91F_PIO_CfgOutput(AT91PS_PIO pPio,unsigned int pioEnable);

/*configure PIO for LCD*/
void Configure_LCD(AT91PS_PIO pPio ,int position)
{
	*AT91C_PMC_PCER  |= 1 << AT91C_ID_PIOC;					//enable PIO_C clock
    AT91F_PIO_InterruptDisable(pPio,0x03<<position);	//disable interrupt PC14-15
    AT91F_PIO_CfgPullup(pPio,0x03<<position);			//enable pullup resistor PC14-15
    AT91F_PIO_CfgOutput(pPio,0x03<<position);			//configure output PC14-15
}

/*clear the RAM and AC=1*/
void Clear_Display(int* base_address)
{
	*base_address=0x01;
	OSTimeDly(1);
}

/*cusor returns home*/
void Home_Return(int* base_address)
{
	*base_address=0x01;
	OSTimeDly(1);
}

/*mode=0x04|(0x0z&0x03) z=2 means "Increase and not shift"*/
void Set_Entry_Mode(int* base_address, int mode)
{
	*base_address=mode;
}

/*display on or off*/
void Set_Display(int* base_address, int mode)
{
	*base_address=mode;
}

/*shift*/
void Set_Shift(int* base_address, int mode)
{
	*base_address=mode;
}

/*set function*/
void Set_Function(int* base_address, int mode)
{
	*base_address=mode;
}

/*set command mode, position: line of Data/Command(PC14)*/
void Set_Command_Mode(AT91PS_PIO pPio ,int position)
{
	unsigned int i;
	AT91F_PIO_ClearOutput(pPio,0x03<<position);
	for(i=0;i<1000;i++);
	//OSTimeDly(1);
}

/*set write mode, position: line of Data/Command(PC14)*/
void Set_Write_Mode(AT91PS_PIO pPio ,int position)
{
	/*AT91F_PIO_ClearOutput(AT91C_BASE_PIOC,0x03<<position);*/
	AT91F_PIO_SetOutput(pPio,0x1<<position);
}

/*which row to display,row=(0x80(1),0xc0(2),0x90(3),0xd0(4))*/
void Set_Display_Row(int* base_address, AT91PS_PIO pPio ,int position ,int row)
{
	unsigned int i;
	AT91F_PIO_ClearOutput(pPio,0x1<<position);
	OSTimeDly(1);
    *base_address=row;

    OSTimeDly(1);
    AT91F_PIO_SetOutput(pPio,0x1<<position);
    OSTimeDly(1);
}

/*config lcd*/
void Config_LCD(int* base_address, int set_entry_mode, int set_display, 
				int set_function, int position, AT91PS_PIO pPio, int row)
{
	Set_Command_Mode(pPio, position);
	Clear_Display(base_address);
	//Home_Return(base_address);
	Set_Entry_Mode(base_address, set_entry_mode);
	Set_Display(base_address, set_display);
	//Set_Shift(base_address,0x14);
	Set_Function(base_address, set_function);
	Set_Display_Row(base_address, pPio, position, row);
	Set_Write_Mode(pPio, position);
}

/*write LCD*/
void Write_To_LCD(int* base_address, char written)
{
	*base_address=written;
}





⌨️ 快捷键说明

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