找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

saa3010解码不正常

[复制链接]
admin 发表于 2012-9-2 21:27:11 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
/*****************************************************
****本品有GAQ制作 ******************
************* saa3010 解码 *****************
*****************************************************/

这个程序解码不正常(有的按键能解码有的按键不行) 还有就是会导致lcd1602显示不正常或者不显示
请大家帮我看看错误发生在哪 ————————————————————谢谢
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,count;
uchar table[3];
uchar code GAQ[16]={'0','1','2','3','4',
'5','6','7','8','9','A','B','C','D','E','F'};
sbit IR=P3^2;

sbit rs=P2^4; //液晶
sbit rw=P2^5;
sbit e=P2^6;
void delayms(uchar x)
{
uchar j,k;
for(j=240;j>0;j--)
for(k=x;k>0;k--);
}


void delayus(uint data gaq)
{
while(gaq--);
}

/*-----------------------------------------
1602的读写函数
-----------------------------------------*/

void write1602_step(uchar step) //lcd写指令子程序
{
rs=0;
rw=0;
e=1;
P0=step;
e=0;
delayus(4);
}

void write1602_date(uchar date) //lcd写数据子程序
{
rs=1;
rw=0;
e=1;
P0=date;
e=0;
delayus(4);
}
void init1602()
{
e=0;
delayus(1400);//延时10ms用于液晶上电自动初始化
write1602_step(0x38);
write1602_step(0x0c);
write1602_step(0x06);
write1602_step(0x01);
delayus(160);
}

void init_IR()
{
TMOD=0x01; //定时器0工作方式1
IR=1; //置int0位高电平下降沿触发
IT0=1; //外部中断下降沿触发
EX0=1; //开启外部中断
ET0=1; //开启定时器0的中断
EA=1; //开启总中断
}

void main()
{
init1602();
init_IR();
while(1)
{
P1=table[2];
write1602_step(0x80);
write1602_date(GAQ[table[2]/16]); //取高位
write1602_step(0x81);
write1602_date(GAQ[table[2]&0x0f]); //取低位
}
}

void IR_INT0() interrupt 0 using 0
{
TL0=0x86; //赋低位
TR0=1; //开启定时器0
TH0=0xfe; //赋高位
EX0=0; //关闭外部中断
table[0]=table[1]=table[2]=0;
num=0;
count=0;
}
void time0() interrupt 1 using 0
{
bit in=~IR;
TL0=0x85; //赋初值
TH0=0xf9;
if(count==3) //滤掉多余的脉冲
{
TR0=0; //关闭定时器0
IR=1; //复位
delayms(168);//延时避开重复按键的时间80ms
IE0=0;
TF0=0;
EX0=1; //开启外部中断
return;
}
num++;
if(num==3)
{
count=1;
}
else if(num==8)
{
count=2;
}
else if(num==14)
{
count=3;
}
else if(count!=3)
{
table[count]=table[count]|in;
table[count]<<=1;
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-29 11:57 , Processed in 0.052627 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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