哇!!我这个智能家居密码锁出现了什么问题,代码没错,但仿真图运行不了什么。帮我看看,就是点击开始按钮过后那个显示屏没有东西显示,我现在不太清楚是哪里发生的问题
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define Key_Port P1 //定义键盘的接口
//***************************************
sbit E=P2^7; //1602使能引脚
sbit RW=P2^5; //1602读写引脚
sbit RS=P2^6; //1602数据/命令选择引脚
#define LCD_DATA P0
uchar position = 0;//要显示的位置
uchar temp_Password_table[6]={0};//存储密码
uchar Password_table[6]={1,2,3,4,5,6};//存储密码
bit Close_flag=0;//
bit Right_password=0;
bit change_password_flag=0;//修改密码标志位
uchar key_num;//定义按键值
uchar song_num=0;
uchar play_step=0; //播放音乐的步骤
uchar play_song_step=0;
bit Rest_flag=0;
uint Press_flag=0;
uint circle=0;
//步进电机转动
void SETP_MOTOR_Run()
{
//8拍编码
uchar code FFW[8]={0x08,0x09,0x01,0x03,0x02,0x06,0x04,0x0c};
static uint i=0,j=0;
if(circle==0)//停止
{
i=0;
}
else
{
if(++i>10) //延时
{
i=0;
P3=~FFW[j];
if(++j>7)
{j=0;}
circle--;
}
}
}
/********************************************************************
/********************************************************************
void delay1602()
{
nop();
nop();
nop();
nop();
nop();
}
/********************************************************************
/********************************************************************
void wdata(uchar del)
{
while(Busy());
RS = 1;
RW = 0;
E = 0;
delay1602();
LCD_DATA = del;
delay1602();
E = 1;
delay1602();
E = 0;
}
/********************************************************************
//************************************
//定时器初始化
//初始化为1MS定时器
//************************************
void Time1_init()
{
TMOD |= 0x10; //使用模式1,16位定时器
TH1 = (65536-1000)/256; //定时器装入初始值1ms
TL1 = (65536-1000)%256;
EA = 1; //总中断
ET1 = 1;//定时器1初始化
TR1 = 1;
}
/********************************************************************
/********************************************************************
//****************************************************
//矩阵按键扫描
//按键按下则返回按键值不按就返回0xff
//*****************************************************
uchar Key_scan()
{
static uchar key_down;
uchar key_num=0xff,tem,i;
uchar keynum_tab[16]={0xd7,0xee,0xde,0xbe,0xed,0xdd,0xbd,0xeb,0xdb,0xbb,0x7e,0x7d,0x7b,0x77,0xb7,0xe7};//表格数据是根据按键值和个按键的定义的出来的,不支持组合键
// 0 1 2 3 4 5 6 7 8 9 A B C D # *
Key_Port = 0xf0;
if(Key_Port != 0xf0)//说明有按键按下
{
if(key_down==0) //
{
tem = Key_Port;
Key_Port = (tem|0x0f);
key_num = Key_Port;
key_down=1;
for(i=0;i<16;i++)
{
if(keynum_tab[i]==key_num)
break;
}
return i;
}
else
return 0xff;
}
else
{
key_down = 0;
return 0xff;
}
}
uchar xiugaimima=0;
/主程序:/
void main()
{
uchar i;
//系统初始化
L1602_init(); //初始化1602
Time1_init(); //定时器初始化
L1602_string(1,1,"Password:"); //显示字符串
L1602_string(2,1,"Status: LOCK!"); //显示字符串
while (1)
{
key_num = Key_scan(); //获取按键值
if( key_num <10)//数据按键按下
{
if((Right_password==0)||(change_password_flag==1))//没有输入郭密码或者修改密码的时候才能输入
{
if(change_password_flag==1) //修改密码
{
if(!position)L1602_string(2,1," ");
}
else
{
if(!position)L1602_string(1,10," ");
}
temp_Password_table[position++] = key_num; //显示按键值
if(position>5)
position=6;
if(change_password_flag==1) //修改密码
{
L1602_char(2,position+5,key_num+'0');
}
else
{
L1602_char(1,position+10,key_num+'0');
}
for(i=position;i<6;i++)
{
temp_Password_table[i]=0;
}
}
}
else//功能按键
{
switch(key_num)
{
case 10: //修改密码
if(Right_password)
{
position=0;
change_password_flag=1;
L1602_string(1,1,"Enter password: "); //显示字符串
L1602_string(2,1," ");
}
break;
case 11://取消修改密码
if(Right_password)
{
change_password_flag=0;
L1602_string(1,1,"Password: "); //显示字符串
position=0;
L1602_string(2,1,"Status: OPEN!"); //显示字符串
}
break;
case 12://确认修改密码
if(change_password_flag==1)
{
for(i=0;i<6;i++)
{
Password_table[i]=temp_Password_table[i];
}
change_password_flag=0;
position=0;
L1602_string(2,1," Done! "); //显示字符串
//L1602_string(2,1," "); //显示字符串
}
break;
case 13://确定开锁
if((change_password_flag==0)&&(Right_password==0)) //正常模式
{
for(i=0;i<6;i++)
{
if(temp_Password_table[i]!=Password_table[i])
break;
}
if(i<6) //说明输入的密码错误
{
Right_password=0;
position=0;
L1602_string(1,10,"ERROR! ");
}
else //密码输入正确
{
circle=80;//让点击转2圈
Right_password=1;
for(i=0;i<6;i++)
{temp_Password_table[i]=0;}
L1602_string(2,9," OPEN! ");
}
}
break;
case 14: //清零
if((change_password_flag==1)||(Right_password==0)) //正常模式
{
position=0;
for(i=0;i<6;i++)
{temp_Password_table[i]=0;}
L1602_string(1,10," ");
}
break;
case 15://关锁
Right_password=0;//清除变量
position=0;
change_password_flag=0;
for(i=0;i<6;i++) //清除输入
{temp_Password_table[i]=0;}
L1602_string(1,1,"Password: "); //显示字符串
L1602_string(2,1,"Status: LOCK!"); //显示字符串
break;
default:
break;
}
}
}
}
//****************************************************
//60ms定时器中断服务函数为计时器使用
//****************************************************
void time1(void)interrupt 3
{
SETP_MOTOR_Run(); //驱动步进电机
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
}
代码源码,
好就不搞这个了,分模块一点点找原因吧,祝你好运