关于单片机用8255完成键盘扫描的C语言程序的疑惑

[复制链接]
查看11 | 回复1 | 2009-4-22 00:04:38 | 显示全部楼层 |阅读模式
一下是我写的程序,因为用C口没显示出来所以弄了用AB口来读键盘但是还是不行 使用地址控制8255各口数据
K是控制地址内容,A、B分别是A、B口数据
unsigned char temp,temp1,temp2;
ADDR_8255K=0X82;

delay1();

ADDR_8255A=0X0F;

ADDR_8255B=0X00;

temp1=ADDR_8255B;

if(temp1!=0x00)

{
ADDR_8255K=0X92;

delay1();
ADDR_8255A=0X00;

ADDR_8255B=0xF0;

temp2=ADDR_8255A;

if(temp2!=0x00)

{

temp=temp1|temp2;

switch(temp)

{

case 0x11: t=0; break;

case 0x12: t=1; break;

case 0x14: t=2; break;

case 0x18: t=3; break;

case 0x21: t=4; break;

case 0x22: t=5; break;

case 0x24: t=6; break;

case 0x28: t=7; break;

case 0x41: t=8; break;

case 0x42: t=9; break;

case 0x44: t=10; break;

case 0x48: t=11; break;

case 0x81: t=12; break;

case 0x82: t=13; break;

case 0x84: t=14; break;

case 0x88: t=15; break;

}

}
}
t是7段数码管显示的数字,但是,显示出来的却是乱码,一些我都没定义过的东西,另外有些疑问:
1、根据示波器显示,单片机是隔断时间就自动读写一次8255(我程序里没控制),这是否影响了TEMP、temp1、temp2中的内容,也就是说,是否要将读写的控制信号也写入程序?
2.我只对8255赋值的时候在单片机上仍然出现应该是高电平的地方出现低电平这是否还是跟读写信号有关?
3.如果需要写入读写控制信号,请给出举例说明一下比较直观
4.谢谢
没什么分数就先悬赏这么点。。。。。

回复

使用道具 举报

千问 | 2009-4-22 00:04:38 | 显示全部楼层
ADDR_8255A=0X0F; ADDR_8255B=0X00; temp1=ADDR_8255B; if(temp1!=0x00)//条件语句为假 你的控制程序貌似就没有执行!...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行