这个程序不懂,请问可以帮忙看一下吗?
#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit BEEP = P3^7;uchar code DSY_CODE[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};uchar Pre_KeyNO = 16,KeyNO = 16;(这个不懂)void DelayMS(uint ms){ uchar t; while(ms--) { for(t=0;t<120;t++); }}void Keys_Scan(){ uchar Tmp; P1 = 0x0f; DelayMS(1); Tmp = P1 ^ 0x0f;(是检测地位有没有1吗) switch(Tmp) { case 1: KeyNO = 0; break; case 2: KeyNO = 1; break; case 4: KeyNO = 2; break; case 8: KeyNO = 3; break; default: KeyNO = 16; } P1 = 0xf0; DelayMS(1); Tmp = P1 >> 4 ^ 0x0f;(这个不懂) switch(Tmp) { case 1: KeyNO += 0; break;(为什么有+) case 2: KeyNO += 4; break; case 4: KeyNO += 8; break; case 8: KeyNO += 12; }}void Beep(){ uchar i; for(i=0;i<100;i++) { DelayMS(1); BEEP = ~BEEP; } BEEP = 1;}void main(){ P0 = 0x00;(这个不懂) while(1) { P1 = 0xf0; if(P1 != 0xf0) Keys_Scan(); if(Pre_KeyNO != KeyNO)(不懂) { P0 = ~DSY_CODE[KeyNO];(不懂) Beep(); Pre_KeyNO = KeyNO;(Pre_KeyNO, KeyNO分别是什么意思啊) } DelayMS(100); }}还有P1口,P0口分别代表什么啊!O(∩_∩)O谢谢!