本帖最后由 bcwx 于 2023-3-3 22:28 编辑
本实验平台为亚龙236单片机控制装置,程序是本人在上中专时候编写,至于接线那些不记得了
[C] 纯文本查看 复制代码 #include <REGX52.H>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
//8255端口及控制地址定义
#define PA XBYTE[0x0000] /* PA口 */
#define PB XBYTE[0x0100] /* PB口(未用) */
#define PC XBYTE[0x0200] /* PC口 */
#define PE XBYTE[0x0300] /* 控制 */
uchar h;
void ys(unsigned int i)
{
while(--i);
}
uchar jp()
{ //下面的返回值h不能在这里定义成局部变量,一定要设置成全局变量
uchar temp;
PC=0xfe; //扫描第1行按键
temp=PC; //送第一个的扫描码
if(temp&0xf0)
{
ys(10);
temp=PC;
if(temp&0xf0)
{
temp=PC; //重新读取PC口
switch(temp)
{
case 0xee: h=0xee; break;
case 0xde: h=0xde; break;
case 0xbe: h=0xbe; break;
case 0x7e: h=0x7e; break;
}
while(temp!=0xf0) //等待松手
{
temp=PC;
temp=temp&0xf0;
}
}
}
PC=0xfd; //扫描第2行按键
temp=PC; //送第2个的扫描码
if(temp&0xf0)
{
ys(10);
temp=PC;
if(temp&0xf0)
{
temp=PC; //重新读取PC口
switch(temp)
{
case 0xed: h=0xed; break;
case 0xdd: h=0xdd; break;
case 0xbd: h=0xbd; break;
case 0x7d: h=0x7d; break;
}
while(temp!=0xf0) //等待松手
{
temp=PC;
temp=temp&0xf0;
}
}
}
PC=0xfb; //扫描第3行按键
temp=PC; //送第3个的扫描码
if(temp&0xf0)
{
ys(10);
temp=PC;
if(temp&0xf0)
{
temp=PC; //重新读取PC口
switch(temp)
{
case 0xeb: h=0xeb; break;
case 0xdb: h=0xdb; break;
case 0xbb: h=0xbb; break;
case 0x7b: h=0x7b; break;
}
while(temp!=0xf0) //等待松手
{
temp=PC;
temp=temp&0xf0;
}
}
}
PC=0xf7; //扫描第4行按键
temp=PC; //送第4个的扫描码
if(temp&0xf0)
{
ys(10);
temp=PC;
if(temp&0xf0)
{
temp=PC; //重新读取PC口
switch(temp)
{
case 0xe7: h=0xe7; break;
case 0xd7: h=0xd7; break;
case 0xb7: h=0xb7; break;
case 0x77: h=0x77; break;
}
while(temp!=0xf0) //等待松手
{
temp=PC;
temp=temp&0xf0;
}
}
}
return h; //返回按键值
}
void main(){
ys(3000); //等待8255复位完成
PE=0x88;
while(1)
{
jp();
P2=h;
}
}
|