搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2009-4-21 13:44:26 | 显示全部楼层 |阅读模式
//*********头文件区*******************
#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[a]);
}
}
//**********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[n]=0;
n++;
}
void key_manage2()
{
tab_key[n]=4;
n++;
}
void key_manage3()
{
tab_key[n]=8;
n++;
}
void key_manage4()
{
uchar C;
tab_key[n]=C;
n++;
}
void key_manage5()
{
tab_key[n]=1;
n++;
}
void key_manage6()
{
tab_key[n]=5;
n++;
}
void key_manage7()
{
tab_key[n]=9;
n++;
}
void key_manage8()
{
uchar D;
tab_key[n]=D;
n++;
}
void key_manage9()
{
tab_key[n]=2;
n++;
}
void key_manage10()
{
tab_key[n]=6;
n++;
}
void key_manage11()
{
uchar A;
tab_key[n]=A;
n++;
}
void key_manage12()
{
uchar E;
tab_key[n]=E;
n++;
}
void key_manage13()
{
tab_key[n]=3;
n++;
}
void key_manage14()
{
tab_key[n]=7;
n++;
}
void key_manage15()
{
uchar B;
tab_key[n]=B;
n++;
}
void key_manage16()
{
uchar F;
tab_key[n]=F;
n++;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-4-21 13:45:02 | 显示全部楼层
新人学习,大家帮忙看看,谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 02:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表