?? shuru.lst
字號:
C51 COMPILER V7.06 SHURU 09/29/2006 11:19:49 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SHURU
OBJECT MODULE PLACED IN shuru.OBJ
COMPILER INVOKED BY: D:\keil 7.06\C51\BIN\C51.EXE shuru.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*========================================
2 用PS2的小鍵盤采集三位數(shù)據(jù),只能用一般的鍵
3 輸入時,先輸入的是高位
4 當(dāng)不足三位時要用0補(bǔ)齊
5 當(dāng)輸入的是高于三位的數(shù)據(jù)時,再從高位計起
6 =======================================*/
7
8 #include<reg51.h>
9 #define uchar unsigned char
10
11
12 sbit Clk=P3^2; //時鐘線接在P32
13 sbit Dat=P3^0; //數(shù)據(jù)線接在P30
14
15 uchar Degree =0; //中斷次數(shù)
16 uchar Data =0; //句路數(shù)據(jù)
17 uchar Data_Over =0; //確定標(biāo)志位
18 uchar i =0;
19 uchar Key_Data[3] =0; //得到的鍵盤輸入值
20 uchar Get_Key_Data = 0; //最后得到的數(shù)據(jù)
21
22 void Dispose(void);
23
24 /*=====================
25 中斷函數(shù),負(fù)責(zé)采集數(shù)據(jù)
26 =======================*/
27 void Get_data(void) interrupt 0 using 1
28 {
29 1 if((Degree>11)&&(Degree<20))
30 1 {
31 2 Data=Data>>1;
32 2 if(Dat){Data|=0x80;};
33 2 } //只用采集到的中間11位的八位數(shù)據(jù)
34 1
35 1 Degree++;
36 1 if(Degree>=33) //32次后重新計數(shù)
37 1 {
38 2 Degree=0;
39 2 Dispose(); //進(jìn)行數(shù)據(jù)處理,只在中斷中得到數(shù)據(jù),不用等待
40 2 }
41 1 }
42
43 /*===========================
44 數(shù)據(jù)處理函數(shù),處理得到的數(shù)據(jù)
45 ============================*/
46 void Dispose(void)
47 {
48 1 uchar n=0;
49 1
50 1 if (Data==0x77) //收到NUM(確定)
51 1 {
52 2 Get_Key_Data=Key_Data[0]*100
53 2 +Key_Data[1]*10
54 2 +Key_Data[2];
55 2 for(n=0;n<3;n++) Key_Data[n] = 0 ; //將數(shù)組置為0
C51 COMPILER V7.06 SHURU 09/29/2006 11:19:49 PAGE 2
56 2 i = 0; //將下次收到的數(shù)據(jù)放在第一
57 2 Data_Over = 1; //確定標(biāo)志
58 2 }
59 1
60 1
61 1 else
62 1 {
63 2 if(i>=3) i = 0; //可以按鍵多于3次
64 2 switch(Data)
65 2 {
66 3 case 0x70: Key_Data[i]=0; break;
67 3 case 0x69: Key_Data[i]=1; break;
68 3 case 0x72: Key_Data[i]=2; break;
69 3 case 0x7A: Key_Data[i]=3; break;
70 3 case 0x6b: Key_Data[i]=4; break;
71 3 case 0x73: Key_Data[i]=5; break;
72 3 case 0x74: Key_Data[i]=6; break;
73 3 case 0x6C: Key_Data[i]=7; break;
74 3 case 0x75: Key_Data[i]=8; break;
75 3 case 0x7D: Key_Data[i]=9; break;
76 3 }
77 2 i++;
78 2 }
79 1 }
80
81
82 void main()
83 {
84 1 IT0=1;
85 1 EA=1;
86 1 EX0=1;
87 1 while(1) //下面的寫法可以直接在Dispose函數(shù)中P2=Get_Key_Data;
88 1 {
89 2 if(Data_Over) //這樣寫只是為了用在其他程序上的接口
90 2 {
91 3 P2=Get_Key_Data;
92 3 Data_Over=0;
93 3 }
94 2 }
95 1
96 1
97 1 }
98
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 262 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -