📄 main.c
字号:
#include "config.h"
#define rs (1<<8)
#define rw (1<<9)
#define en (1<<10)
#define busy (1<<7)
#define TASK_STK_SIZE 64
OS_STK TaskStartStk[TASK_STK_SIZE];
void TaskStart(void *data);
uint8 txt[]={"helloworld"};
uint8 BCD[6];
uint32 t=1000;
void delay(uint32 t)
{ while(t--);
}
/****************************************************************************
* 名称:ChkBusy()
* 功能:检查总线是否忙
****************************************************************************/
void ChkBusy()
{
//PINSEL0=0xffc00000;
IODIR=0x700;
while(1)
{
IOCLR=rs;
IOSET=rw;
IOSET=en;
if(!(IOPIN & busy))break;
IOCLR=en;
}
IODIR=0x7ff;
}
/****************************************************************************
* 名称:LCDCls()
* 功能:LCD清屏
****************************************************************************/
void LCDCls()
{ChkBusy();
IOCLR=rs; //全部清零
IOCLR=rw;
IOCLR=0xff;
IOSET=0x00000001;
IOSET=en;
IOCLR=en;
}
/****************************************************************************
* 名称:LCDWraction()
* 功能:写指令到LCD
****************************************************************************/
void LCDcmd(uint8 cmd)
{ChkBusy();
IOCLR=rs; //全部清零
IOCLR=rw;
IOCLR=0xff;
IOSET=cmd;
IOSET=en;
//delay(1000000);
IOCLR=en;
// delay(1000000);
}
/****************************************************************************
* 名称:LCDsetxy()
* 功能:LCD光标定位到xy处
****************************************************************************/
void LCDsetxy(uint8 x,uint8 y)
{ uint8 temp;
if(x==1)
{temp=0x80+y-1;
LCDcmd(temp);
}
else
{temp=0xc0+y-1;
LCDcmd(temp);
}
}
/****************************************************************************
* 名称:LCDgohome()
* 功能:LCD光标归位
****************************************************************************/
void LCDgohome(void)
{LCDcmd(0x02);
}
/****************************************************************************
* 名称:WrOp()
* 功能:写函数
****************************************************************************/
void LCDWrdata(uint8 dat)
{
ChkBusy();
IOSET=rs; //全部清零
IOCLR=rw;
IOCLR=0xff; //先清零
IOSET=dat; //再送数
IOSET=en;
IOCLR=en;
}
/****************************************************************************
* 名称:LCDinit()
* 功能:初始化LCD
****************************************************************************/
void LCDinit()
{LCDcmd(0x38);/*8位数据,2行显示*/
// LCDcmd(0x08);/*显示关闭*/
// LCDcmd(0x01);/*清屏*/
/*清屏和光标归位需要较长的时间*/
LCDcmd(0x06);/*写入数据后光标右移*/
LCDcmd(0x0c);/*显示开,不显示光标*/
// LCDCls();
}
/****************************************************************************
* 名称:DisText()
* 功能:显示文本函数
****************************************************************************/
void DisplayText(uint8 x,uint8 y,uint8 *p)
{
LCDsetxy(x,y);
while(*p !='\0')
LCDWrdata(*(p++));
}
void ShowInt(uint8 x,uint8 y,uint16 num) //在addr处显示数字num
{//将num转化成五个BCD码存放在全局数组BCD[5]中
uint8 i;
for(i=5;i>0;i--) //将NUM数据转化成ASCII码,如521会转化为00521
{
BCD[i-1]=(uint8)(num%10+0x30); //取出最低位
num/=10; //去掉最低位
}
i=0;
while(BCD[i] ==0x30 && i<4) BCD[i++]=' '; //NUM转换成数组存放,但还没有加上小数点
BCD[5]='\0';
DisplayText(x,y,BCD);
}
/****************************************************************************
* 名称:main()
* 功能:显示文本
****************************************************************************/
int main (void)
{ PINSEL0=0xffc00000;
OSInit();
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 3);
OSStart();
return 0;
}
/****************************************************************************
* 名称:TaskStart()
* 功能:任务
****************************************************************************/
void TaskStart(void *pdata)
{ pdata=pdata;
TargetInit();
//LCDWrdata(0x0c);
LCDinit();
IODIR=0x7ff; //设置为输出
IOCLR=0x7ff;
//IOSET=0x7ff;
//LCDcmd(0x7f);
//IOSET=0x7ff;
//LCDsetxy(1,1);
DisplayText(2,15,txt);
ShowInt(1,1,t);
OSTaskDel(3);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -