| 本帖最后由 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; 
        }
}
 
 |