liuxin1986 发表于 2009-4-21 13:44:26

自己仿照写的4*4 1602显示程序,用PROTEUS仿真显示不出来,麻烦大家帮看看!

//*********头文件区*******************
#include <AT89x51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

//*********定义变量区*******************
#define      LCD_DB=P0
sbit         LCD_RS=P2^0;
sbit         LCD_RW=P2^1;
sbit         LCD_E=P2^2;
uchar tab_key[];
uchar code tab[];
unsigned char temp,key;
int n=0;
//*********函数声明区********************
void main(uchar);
void lcd_disp(); //LCD显示函数
void lcd_init(); //LCD初始化函数
void write_com(uchar); //写命令函数
void write_data(uchar); //写数据函数
void delay(uint); //延迟函数
void key_scan(); //键盘扫描函数
void key_manage1(); //键盘功能分配函数
void key_manage2();
void key_manage3();
void key_manage4();
void key_manage5();
void key_manage6();
void key_manage7();
void key_manage8();
void key_manage9();
void key_manage10();
void key_manage11();
void key_manage12();
void key_manage13();
void key_manage14();
void key_manage15();
void key_manage16();
//**********主函数开始**********
void main(void)
{
lcd_init();
write_com(1);
while(1)
{
key_scan();
lcd_disp();
}
}
//**********LCD显示函数开始***********
void lcd_disp()
{
uchar a,i=0;
write_com(0x80);
for(i=0;i<n;i++)
{
a=tab_key;
write_data(tab);
}
}
//**********LCD初始化函数开始*********
void lcd_init()
{
uchar lcden
lcden=0
write_com(0x38); //
write_com(0x0c); //开显示,显示光标,光标闪烁
write_com(0x06); //读写一个字符后,地址指针及光标加一,且光标加一整屏显示不移动
write_com(0x80); //设置光标指针
}

//**********写命令函数开始************
void write_com(uchar com)
{
uchar lcdrs,lcden;
lcdrs=0; //低电平写命令
P0=com; //写入命令
delay(3); //延时约3ms
lcden=1; //LCD使能端置高电平
delay(5); //延时约5ms
lcden=0; //LCD使能端拉低电平
}
//**********写数据函数开始************
void write_data(uchar dat)
{
uchar lcdrs,lcden;
lcdrs=1; //低电平写数据
P0=dat; //写入命令
delay(3); //延时约3ms
lcden=1; //LCD使能端置高电平
delay(5); //延时约5ms
lcden=0; //LCD使能端拉低电平
}
//**********键盘扫描函数开始****
void key_scan()
{
//**********扫描第一列********
P1=0xff;
P1_0=0;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0x7e:
key_manage1();
break;
case 0xbe:
key_manage2();
break;
case 0xde:
key_manage3();
break;
case 0xee:
key_manage4();
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
//**********扫描第二列*********
P1=0xff;
P1_1=0;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0x7d:
key_manage5();
break;
case 0xbd:
key_manage6();
break;
case 0xdd:
key_manage7();
break;
case 0xed:
key_manage8();
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
//**********扫描第三列*********
P1=0xff;
P1_2=0;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0x7b:
key_manage9();
break;
case 0xbb:
key_manage10();
break;
case 0xdb:
key_manage11();
break;
case 0xeb:
key_manage12();
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}

//**********扫描第四列*********
P1=0xff;
P1_3=0;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0x77:
key_manage13();
break;
case 0xb7:
key_manage14();
break;
case 0xd7:
key_manage15();
break;
case 0xe7:
key_manage16();
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
}
//*********延时函数开始**************
void delay(uint k)
{
uint i,j;
for(i=k;i>0;i--)
for(j=50;j>0;j--);
}

//******键盘功能分配函数群开始********
// 键盘功能示意图
//** 0 ** 1 ** 2 ** 3 **
//** 4 ** 5 ** 6 ** 7 **
//** 8 ** 9 ** A ** B **
//** C ** D ** E ** F **
void key_manage1()
{
tab_key=0;
n++;
}
void key_manage2()
{
tab_key=4;
n++;
}
void key_manage3()
{
tab_key=8;
n++;
}
void key_manage4()
{
uchar C;
tab_key=C;
n++;
}
void key_manage5()
{
tab_key=1;
n++;
}
void key_manage6()
{
tab_key=5;
n++;
}
void key_manage7()
{
tab_key=9;
n++;
}
void key_manage8()
{
uchar D;
tab_key=D;
n++;
}
void key_manage9()
{
tab_key=2;
n++;
}
void key_manage10()
{
tab_key=6;
n++;
}
void key_manage11()
{
uchar A;
tab_key=A;
n++;
}
void key_manage12()
{
uchar E;
tab_key=E;
n++;
}
void key_manage13()
{
tab_key=3;
n++;
}
void key_manage14()
{
tab_key=7;
n++;
}
void key_manage15()
{
uchar B;
tab_key=B;
n++;
}
void key_manage16()
{
uchar F;
tab_key=F;
n++;
}

liuxin1986 发表于 2009-4-21 13:45:02

新人学习,大家帮忙看看,谢谢!
页: [1]
查看完整版本: 自己仿照写的4*4 1602显示程序,用PROTEUS仿真显示不出来,麻烦大家帮看看!