单片机PS2键盘程序,烦请各位大虾帮我下面的C语言手工变成汇编,因为中断那里我实在不解

单片机PS2键盘程序,烦请各位大虾帮我下面的C语言手工变成汇编,因为中断那里我实在不解,第1张

sbit Key_Data = P3^3 /御汪/定义Keyboard引脚

sbit Key_CLK = P3^2 //使用中断

bit BF = 0

bit Shift /颂兆/定义上档键标志

bit Key_UP //定野拆租义通码断码标志

unsigned char KeyV

unsigned char IntNum

unsigned char DisNum

void Keyboard_out(void) interrupt 0

{

if ((IntNum >0) &&(IntNum <9)) {

……

不全。

网上搜来的,希望对你有帮助。

#include<reg52.h>

#define uchar unsigned char 

#define uint unsigned int

sbit psdata=P3^7

sbit psclk=P3^2

uchar a[3]

uchar duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}

uchar numbit,keyv,n,m,i

void delay(uint t)

{

  uchar i

   while(t--)

   for(i=0i<125i++)

}

void main()

{

  IT0=1

  EX0=1

  EA=1

  while(1)

  {

    if(i==3)

    {

     i=0

     n=a[0]/16

     败链旁m=a[0]%16

    }

    P0=duan[n]//十位

    P2=1

    delay(1)

    P0=duan[m]//个位

    P2=0

    delay(1)

   }

}

void int0() interrupt 0

{

 if((numbit>0)&&察橡(numbit<9))

 {

  keyv=keyv>>1//低唤凯位开始传

  if(psdata)//判断数据上有没有数据收到

  {

   keyv=keyv|0x80

  }

 }

 numbit++

  if(numbit>10)

  {

   numbit=0

   a[i]=keyv

   i++

  }

}

key_scan_output=scan[col]

rowkey=~(_key_scan_output&0x0f)//这里之后rowkey只能取0xf1,0xf2,0xf4,0xf8这几个值了,

if(rowkey!=0)//所以这里州昌是一直为真的

{

if(rowkey==0x01) row=0

else if(rowkey==0x02) row=1

else if(rowkey==0x03) row=2

else if(rowkey==0x04) row=3

key_value=4*col+row//而这里的值只会是4*col+0,row 始终是0

while(rowkey!=0)//这里是不是松手检测啊,如果是的话,下面这样就好了

/困迹亏/汪神while((_key_scan_output&0x0f)!=0x0f)//等待按键松手

rowkey=~(_key_scan_output&0x0f)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12451511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存