51单片机lcd1602的keil代码报错

#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int  uint;
sbit Lcden = P2^7;
sbit Lcdrs = P2^6;
sbit Lcdwr = P2^5;
uchar code display[] = "I like study" ;
void delay(uint i)
{
  while(i--);
  }
void write_com(uchar com)//按照时序图设置RS、R/W、EN的高低电平
{
  Lcdrs = 0;
  Lcdwr = 0;
  Lcden = 0;
  P0 = com;
  delay(1000);//延时没有严格的限制,只要表格中要求的时间即可
  Lcden = 1;
  delay(1000);
  Lcden = 0;
}
void write_dat(uchar dat)
{
  Lcdrs = 1;
  Lcdwr = 0;
  Lcden = 0;
  P0 = dat;
  delay(100);
  Lcden = 1;
  delay(100);
  Lcden = 0;
}
void Init()
{
 write_com(0x38);//设定8位数据线,显示两行,5*7的点阵/字符
 write_com(0x0f);// 控制显示开关
 write_com(0x06);//每次写入数据狗光标右移,整屏不移动
 write_com(0x01);//清屏指令
}
void main()
{
uchar i,num;
Init();
write_com(0x80+0x10);//设定初始地址。  显示地址只有0x00~0x0f和第二行0x40~0x4f;其他地址在屏幕右边,
//不显示出来,如果要让整个屏幕从右边显示出来,就需要将初始地址设置在屏幕右边,
//然后通过屏幕整体向左移动来实现
for(i=0;i<12;i++)
 {
   write_dat( display[i] );
   delay(100);
 }
 for(num=0;num<16;num++)
 {
     write_com(0x18);//整屏向左移动
  delay(10000);  
 }
 while(1);//有这个程序后,显示屏不会闪烁显示。如果没有这个程序,不将程序停留在这成死循环,
 //则LCD会闪烁显示文字。 
}


img


img


代码来源
https://blog点csdn点net/weixin_45950842/article/details/104187352
自己写的一些lcd1602的代码也会出现同样的问题。求帮助

学会看错误提示
右键点#include <reg52.h>
打开reg52.h看看6,8,10行是啥

你居然把主要代码写到一个编译器自带的头文件reg52.h里去了。