?? key.lst
字號:
C51 COMPILER V7.09 KEY 01/05/2006 17:21:44 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN E:\hex\key.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE key.c BROWSE DEBUG OBJECTEXTEND TABS(1) OBJECT(E:\hex\key.obj)
line level source
1 #include <reg51.h>
2 #include <absacc.h>
3 #include <intrins.h>
4 #include <stdio.h>
5 #include <string.h>
6 #include <stdlib.h>
7 #include <ctype.h>
8
9 #define uchar unsigned char
10 #define uint unsigned int
11 #define ulong unsigned long
12
13 #define O 'O'
14 #define K 'K'
15 #define E 'E'
16 #define R 'R'
17 //--------------------------------------------------------
18 #define Wait_ti while(TI==0);TI=0 /*等待一幀發(fā)送完畢*/
19 #define Wait_ri while(RI==0);RI=0 /*等待一幀接收完畢*/
20 /**************************************
21 -------------芯片管腳定義--------------
22 ***************************************/
23 sbit PowerLed=P1^4;
24 sbit SHIFTLED=P1^5;
25 sbit TestLED=P1^6;
26 sbit Beep=P1^7;
27 sbit KeyIn=P3^3;
28 sbit KeyOut=P3^4; //0:有鍵按下
29 //=====================================
30 #define OK 0
31 #define ER 1
32 //=====================================
33 /**********************************************
34 -------------與主機通信命令名柄定義----------
35 **********************************************/
36 #define GetKey 0x90 //有鍵直接返回鍵值
37 #define OpenBeep 0X91 //打開蜂鳴器,嘟... 嘟....,無返回值
38 #define TestKey 0x94 //檢測主板與鍵盤板IC的通信,回送主板Finish命令句柄
39 #define OpenMoneyBox 0x9a //開錢箱命令句柄
40 #define CloseCat 0x9c //關(guān)機
41 #define English 0x9d //英文字母命令
42 #define Number 0x9e //數(shù)字命令
43 //=====================================
44 bit err_rxd_flag; //串口接收數(shù)據(jù)錯誤
45 bit rxd_flag;
46 uchar uc0;
47 uchar rs232buf[30]; //接收數(shù)據(jù)緩存
48 //=====================================
49 void rxd_order_232(); /*接收命令、數(shù)據(jù)*/
50 //=====================================
51 void ssio0(void) interrupt 4 using 1 //*串行中斷0接收程序*
52 {
53 1 ES=0; //*關(guān)串行中斷*
54 1 rxd_order_232();
55 1 rxd_flag=1;
C51 COMPILER V7.09 KEY 01/05/2006 17:21:44 PAGE 2
56 1 ES=1;
57 1 }
58 //=====================================
59 void delayms(uint ti) //*延時程序~0.1ms,*
60 { //延時時間=[ti(100)+1]*1.08us~=ti*0.108ms
61 1 uint i;
62 1 uchar t;
63 1 for (i=0;i<ti;i++)
64 1 {
65 2 t=99;
66 2 do{
67 3 t--;
68 3 }while(t!=0);
69 2 }
70 1 }
71 /*******************************************
72 ---------- 初始化串行口來多機通信 ---------
73 *******************************************/
74 void InitSBUF(void)
75 {
76 1 TMOD=0x21; /* T/C1定義為方式2 */
77 1 TL1=0xfd; /* 9600時TH1,TL1=0xfd,1200時TH1,TL1=0XE8 */
78 1 TH1=0xfd;
79 1 PCON=0x00;
80 1 SCON=0x50; /* 串行口為方式1,SM2=1,TB8=0,RB8=0 */
81 1 /* SM0=0;*/
82 1 TR1=1; ES=0; /*ET0=1; ES=1; TR0=1;*/
83 1 /* SM2=1; PS=1;*/
84 1 RI=0; TI=0; EA=1;
85 1 }
86
87 //===================================
88 void sbuwork(uchar d) /*發(fā)送一數(shù)據(jù):c*/
89 {
90 1 uchar c;
91 1 SBUF=d; /*發(fā)送數(shù)據(jù)*/
92 1 Wait_ti; /*等待一幀發(fā)送完畢*/
93 1 for(c=0;c<=0x05;c++);
94 1 }
95 //===================================================
96 /*void buzzer(uchar num,uchar on,uchar off)//蜂鳴器驅(qū)動
97 { //unm:次數(shù);on:鳴時間;off:停時間
98 uchar n;
99 if((num==0)|(on==0)){return;}
100 for(n=0;n<(num-1);n++)
101 {
102 Beep=0;
103 delayms(on);
104 Beep=1;
105 delayms(off);
106 }
107 Beep=0;
108 delayms(on);
109 Beep=1;
110 }*/
111 //=================================================
112 //
113 // key 鍵盤操作程序
114 //
115 //==================================================
116 uchar key_press() //按鍵掃描程序
117 {
C51 COMPILER V7.09 KEY 01/05/2006 17:21:44 PAGE 3
118 1 uchar key_num;
119 1 uchar n;
120 1 uchar key_x;
121 1 uchar keybuf[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
122 1 key_num=0xff;
123 1 if(P0==0xff){goto AD;} //沒鍵按下退出
124 1 delayms(20);
125 1 if(P0==0xff){goto AD;} //沒鍵按下
126 1 KeyOut=1; //消除按鍵標志
127 1 Beep=0;
128 1 for(n=0;n<8;n++)
129 1 {
130 2 P2=keybuf[n];
131 2 if(P0<0xff){key_x=P0;key_num=n;goto AA;}
132 2 }
133 1 key_num=0xff;goto AD;//退出
134 1 AA:
135 1 for(n=0;n<8;n++)
136 1 {
137 2 if(key_x==keybuf[n])
138 2 {
139 3 key_num=key_num*8;
140 3 key_num=key_num+n;
141 3 while(P0<0xff)//等待抬手
142 3 {
143 4 delayms(20);
144 4 }
145 3 // buzzer(1,120,2);
146 3 goto AD;
147 3 }
148 2 }
149 1 AD:
150 1 P0=0xff;
151 1 P2=0x00;
152 1 Beep=1;
153 1 return key_num;
154 1 }
155 /********************************************************/
156 void rxd_by_232() /*從232接收一個數(shù)據(jù),并保存到uc0變量中*/
157 {
158 1 uchar counter;
159 1 counter=0xfe;
160 1 do{
161 2 if(counter==0x00)
162 2 {RI=0;err_rxd_flag=1;return;}
163 2 else{counter--;}
164 2 }while(RI==0);
165 1 RI=0;
166 1 uc0=SBUF;
167 1 err_rxd_flag=0;
168 1 }
169 //===============================
170 //--------------------------------------------------------------
171 /*命令格式:0x1b+0x10+命令句柄+數(shù)據(jù)包序號+命令長度+(命令參數(shù))+CS*/
172 void rxd_order_232() /*接收命令、數(shù)據(jù)*/
173 {
174 1 uchar k,n;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -