大佬们51单片机密码锁报错1.c(168): error C214: illegal pointer conversion怎么改啊,代码如下
#include<reg51.h> //请添加程序首部
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^6; //定义引脚
sbit WR1=P2^5;
sbit LCDEN=P2^7;
unsigned char L1[]="PASS WORD:"; //字符串
unsigned char code L2[]="Old:";
unsigned char code L3[]="1234567890*#-+=";
uchar ptr;
uchar n;
delay(unsigned int ms) //延时子程序
{ int i,j;
for(i=0;i<ms;i++)
for(j=0;j<120;j++);
}
void busy() //判断LCD是否忙
{
unsigned char i;
P0=0xff;
RS=0;
WR1=1;
LCDEN=1;
for(i=0;i<20;i++)
if((P0&0x80)==0)break; //D7=0,表示LCD空闲,推出监测
LCDEN=0;
}
void cmd_wr(uchar com ) //写控制字 设置形参
{
busy(); //LCD显示控制器忙检测
RS= 0 ; //设置写命令状态
WR1=0;
P0= com ;
delay(5); //设置下降沿
LCDEN= 1 ;
delay(5);
LCDEN= 0 ;
}
/**************************************************************
函数名称:inti_lcd()
函数功能:LCD1602显示初始化
****************************************************************/
void inti_lcd() //设置LCD方式,查指令表
{
LCDEN=0;
cmd_wr(0x38); //功能设定指令,显示设置 8位,2行,5*7点矩阵
cmd_wr(0X01); //清屏
cmd_wr(0x0f); //开显示指令,显示屏ON,光标ON,闪烁ON
cmd_wr(0x06); //设置字符光标移动模式,光标右移,整屏显示不移动
cmd_wr(0x0c); //显示器打开,在显示屏上不显示光标
}
/**************************************************************
函数名称:write_dr1(unsigned char x)
函数功能:将单个数据x写到LCD数据存储器
****************************************************************/
void write_dr1(unsigned char x)
{
RS=1 ; //向控制器写数据
WR1=0 ;
P0=x;
delay(5);
LCDEN=1 ; //下降沿
delay(5);
LCDEN=0 ;
}
/**************************************************************
函数名称:show_lcd(unsigned char *ch,unsigned char n)
函数功能:LCD显示子程序字符串
****************************************************************/
void show_lcd(unsigned char *ch,unsigned char n )
{
unsigned char i;
for(i=0;i<n;i++)
{
RS=1;
WR1=0;
P0=*(ch+i);
delay(5);
LCDEN=1;
delay(5);
LCDEN=0;
}
}
/**************************************************************
函数名称:uchar anjian44(void)
函数功能:44矩阵按键扫描程序
****************************************************************/
uchar anjian44(void)
{
uchar key_value=0;
P1=0x0f;//给所有行赋值0,列全为1
if(P1!=0x0f)//判断按键是否按下
{
delay(10);//消抖
if(P1!=0x0f)
{
//测试列
P1=0x0f;
switch(P1)//保存行为0,按键按下后的列值
{
case 0x07: key_value=1;break;
case 0x0b: key_value=2;break;
case 0x0d: key_value=3;break;
case 0x0e: key_value=4;break;
}
//测试行
P1=0xf0;
switch(P1)//保存列为0,按键按下后的键值
{
case 0x70: key_value=key_value;break;
case 0xb0: key_value=key_value+4;break;
case 0xd0: key_value=key_value+8;break;
case 0xe0: key_value=key_value+12;break;
}
while(P1!=0xf0);//等待按键松开
}
}
else
key_value=0;
return key_value;
}
/**************************************************************
函数功能:第一行显示“PASS WORD:"
第二行显示” 1“
****************************************************************/
void main()
{
uchar t,key,mm;
uchar mima1[8];
uchar mima2[8];
inti_lcd(); //初始化
cmd_wr(0x00|0x80); //设置显示位置,调用写指令
ptr=&L1;
n=10;
show_lcd( ptr,n);
cmd_wr(0x40|0X80);
ptr=&L2;
n=4;
show_lcd( ptr,n); ////这里报错:1.c(168): error C214: illegal pointer conversion
cmd_wr(0x0f);
cmd_wr(0x44|0x80);
for(mm=0;mm<8;mm++)
{
key=anjian44(); //调用按键
while(!key)
{
key=anjian44(); //调用按键
}
cmd_wr(0xC4+mm);
t=L3[key-1];
write_dr1(t);
mima1[mm]=key;
key=0xff; //键值取空
}
key=anjian44();
while(key==12);
}
17行, uchar ptr; 改为 unsigned char *ptr;
166行 ptr=&L1; 改为 ptr = L1