📄 lcd.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 + -