📄 main.c
字号:
//RS=0;
// RW=1;
while(IO0PIN&0x80)
{
//Dataport=0x00;
IO1SET = LCD_E;
//DelayNS(1);
IO1CLR = LCD_E;
//dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
}
//while(1);
}
void SendCommandToLCD(uint8 command) //写命令到LCD中
{
CheckState();
IO1CLR = LCD_RS; //向LCD发送命令
IO1CLR = LCD_RW;
IO0PIN=(IO0PIN & 0xffffff00) | command; //command :命令
IO1SET = LCD_E;
IO1CLR = LCD_E;
}
void SetLine(uint8 page) //设置页 0xb8是页的首地址
{
page=0xb8|page; //1011 1xxx 0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页
SendCommandToLCD(page);
}
void SetStartLine(uint8 startline) //设定显示开始行,0xc0是行的首地址
{
startline=0xc0|startline; //1100 0000
SendCommandToLCD(startline); //设置从哪行开始:0--63,一般从0 行开始显示
}
void SetColumn(uint8 column) //设定列地址--Y 0-63 ,0x40是列的首地址
{
column=column &0x3f; //column最大值为64,越出 0=<column<=63
column= 0x40|column; //01xx xxxx
SendCommandToLCD(column);
}
void SetOnOff(uint8 onoff) //开关显示,0x3f是开显示,0x3e是关显示
{
onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
SendCommandToLCD(onoff);
}
void WriteByte(uint8 dat) //写显示数据
{
CheckState();
IO1SET = LCD_RS;
IO1CLR = LCD_RW;
IO0PIN=(IO0PIN & 0xffffff00) | dat; //dat:显示数据
IO1SET = LCD_E;
IO1CLR = LCD_E;
}
void SelectScreen(uint8 screen) //选择屏幕screen: 0-全屏,1-左屏,2-右屏
{
switch(screen)
{ case 0: IO1CLR = cs1;//全屏
// _nop_(); _nop_(); _nop_();
IO1CLR = cs2;
// _nop_(); _nop_(); _nop_();
break;
case 1: IO1CLR = cs1;//左屏
// _nop_(); _nop_(); _nop_();
IO1SET = cs2;
//_nop_(); _nop_(); _nop_();
break;
case 2: IO1SET = cs1;//右屏
// _nop_(); _nop_(); _nop_();
IO1CLR = cs2;
//_nop_(); _nop_(); _nop_();
break;
}
}
void ClearScreen(uint8 screen) //清屏screen: 0-全屏,1-左屏,2-右
{
uint8 i,j;
SelectScreen(screen);
for(i=0;i<8;i++) //控制页数0-7,共8页
{
SetLine(i);
SetColumn(0);
for(j=0;j<64;j++) //控制列数0-63,共64列
{
WriteByte(0x00); //写点内容,列地址自动加1
}
}
}
void InitLCD() //初始化LCD
{
CheckState();
SelectScreen(0);
SetOnOff(0); //关显示
SelectScreen(0);
SetOnOff(1); //开显示
SelectScreen(0);
ClearScreen(0);//清屏
SetStartLine(0); //开始行:0
}
void Display(uint8 ss,uint8 page,uint8 column,uint8 number)
{
uint8 i; //ss选屏参数,page选页参数,column选列参数,number选第几汉字输出
SelectScreen(ss);
column=column&0x3f;
SetLine(page); //写上半页
SetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
WriteByte(Hzk[i+32*number]); //i+32*number汉字的前16个数据输出
}
SetLine(page+1); //写下半页
SetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
WriteByte(Hzk[i+32*number+16]); //i+32*number+16汉字的后16个数据输出
}
}
void maininit(void)
{
//IO1CLR = LED;
PINSEL0 = 0x00000000; // 选择GPIO
PINSEL1 = 0x00000000;
PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]连接GPIO
IO1DIR = LEDS8;
IO0DIR = LEDS0;
//IO0SET = BUSY;
IO0PIN=(IO0PIN | 0xffffffff) ;
IO1PIN=(IO1PIN | 0xffffffff) ;
TargetInit ();
InitLCD();
}
void Task1(void *pdata)
{
pdata = pdata; /* 避免编译警告 */
/* 目标板初始化 */
for (;;) //(1)
{
OSTaskCreate(Task2, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 1); //(4)
OSTaskCreate (Task3,(void *)0, &TaskledStk[TASK_STK_SIZE - 1], 2);
while (1) /* 等待松开按键 */
{
OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延时20毫秒 */ //(5)
}
}
}
void Task2(void *pdata)
{
uint8 i=0;
pdata = pdata; /* 避免编译警告 */
ClearScreen(0);//清屏
SetStartLine(0);
// Display(2,0,i*16,i);
for(i=0;i<4;i++)
{
Display(1,1,i*16,i);
//OSTimeDly(10);
Display(2,1,i*16,i+4);
//OSTimeDly(10);
Display(1,3,i*16,i+8);
//OSTimeDly(10);
Display(2,3,i*16,i+12);
Display(1,5,i*16,i+16);
//OSTimeDly(10);
Display(2,5,i*16,i+20);
}
OSTimeDly(100);
ClearScreen(0);//清屏
SetStartLine(0);
while(1)
{
for(i=0;i<4;i++)
{
OSTimeDly(10);
Display(1,1,i*16,i+24);
OSTimeDly(10);
Display(2,1,i*16,i+28);
OSTimeDly(10);
Display(1,3,i*16,i+32);
OSTimeDly(10);
Display(2,3,i*16,i+36);
OSTimeDly(10);
Display(1,5,i*16,i+40);
OSTimeDly(10);
Display(2,5,i*16,i+44);
}
OSTimeDly(10);
}
//OSTaskDel(OS_PRIO_SELF); /* 删除自己 */ //(4)
}
void Task3(void *pdata)
{
pdata = pdata; // 避免编译警告
//PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]选择GPIO
IO1DIR |= LED; // 设置LED1控制口输出
IO1SET = LED;
while(1)
{
IO1CLR = LED;
OSTimeDly(10);
IO1SET = LED;
OSTimeDly(10);
}
}
int main (void)
{
maininit();
OSInit(); //(4)
OSTaskCreate(Task1, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0); //(5)
OSStart(); //(6)
return 0; //(7)
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -