📄 lesson7.lst
字号:
C51 COMPILER V7.50 LESSON7 06/18/2006 10:39:04 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LESSON7
OBJECT MODULE PLACED IN Lesson7.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Lesson7.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /************************************************/
3 /*单位名称:华南理工大学电信学院*/
4 /*模块:1位共阴数码管,CD4511驱动,使用反极法的键盘,串行EEPROM24C02*/
5 /*创建人:景永年 日期:2006年6月7日*/
6 /*修改人:*/
7
8 /*功能描述:写6bit EEPROM,再读出并显示在6个LED数码管*/
9 /*其他说明:*/
10 /*版本号:*/
11 /*************************************************/
12 #include "reg52.h"
13 #include "stdio.h"
14 #include "intrins.h"
15
16 #define uchar unsigned char
17 #define uint unsigned int
18 //#define _Nop() _nop_()
19
20 uchar volatile xdata g_sec_disp _at_ 0xFFFF;
21 uchar volatile xdata g_min_disp _at_ 0xEFFF;
22 uchar volatile xdata g_hr_disp _at_ 0xDFFF;
23
24
25 void keypad_scan(void);
26 void keypad_response(uchar key_number);
27 void display_led(void);
28 void delay(uchar m, uchar n);
29
30
31 data uchar g_uc_sec_cnt,g_uc_min_cnt,g_uc_hr_cnt;
32 data uchar g_uc_key_number,g_uc_disp_cnt;/*g_uc_disp_cnt*/
33 data uchar g_uc_key_B_cnt;/*按键B按下的次数*/
34 code uchar g_uc_key_number_all[12]={0xF3,0xEB,0xDB,0xBB,0xF5,0xED,0xDD,0xBD,0xF6,0xEE,0xDE,0xBE};
35
36 extern void Start_I2C(void);
37 extern void Stop_I2C(void);
38 extern void SendB(unsigned char c);
39 extern unsigned char RcvB(void);
40 extern void Ack_I2C(bit a);
41 //bit ISendB(unsigned char sla, unsigned char c);
42 //bit IRcvB(unsigned char sla, unsigned char * c);
43 extern bit ISendStr(unsigned char sla, unsigned char suba, unsigned char * s,unsigned char no);
44 extern bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char * s,unsigned char no);
45
46 sbit P1_7 = P1^7;//beep
47
48
49 main()
50 {
51 1
52 1 g_uc_sec_cnt = 0;
53 1 g_uc_min_cnt = 0;
54 1 g_uc_hr_cnt = 0;
55 1
C51 COMPILER V7.50 LESSON7 06/18/2006 10:39:04 PAGE 2
56 1 g_uc_disp_cnt = 0;
57 1 g_uc_key_B_cnt = 0;
58 1
59 1 while(1)
60 1 {
61 2 keypad_scan();
62 2 }
63 1
64 1 }
65
66 /*************************************************/
67 /*
68 name:keypad_scan()
69 function: scan the keypad, get the key number
70 使用反极法检测键值
71 output:uc_key_number
72 */
73 /*************************************************/
74 void keypad_scan(void)
75 {
76 1 P1 = 0XF8;
77 1
78 1 ACC = P1;
79 1 ACC &= 0XF8;
80 1 if(!(ACC == 0XF8))
81 1 {
82 2 delay(2,255);
83 2 P1 = 0XF8;
84 2 ACC = P1;
85 2 ACC &= 0XF8;
86 2 if(!(ACC == 0XF8))/*note:if(ACC != 0XF8) ACC XOR 0xF8;if(!(ACC == 0XF8)) the value of the ACC don't chan
-ge*/
87 2 {
88 3 g_uc_key_number = ACC;/*get the row number*/
89 3
90 3 P1 = 0X07;
91 3
92 3 ACC = P1;
93 3 ACC &= 0X07;
94 3 if(!(ACC == 0X07))
95 3 {
96 4 delay(2,255);
97 4 P1 = 0X07;
98 4 ACC = P1;
99 4 ACC &= 0X07;/*contains the column number*/
100 4 if(!(ACC == 0X07))
101 4 {
102 5 g_uc_key_number |= ACC;/*combine to the key number*/
103 5 keypad_response(g_uc_key_number);
104 5 }
105 4 }
106 3 }
107 2 }
108 1 }
109
110 /*************************************************/
111 /*
112 name:keypad_response()
113 function:response to the key number
114 input:uc_key_number
115 */
116 /*************************************************/
C51 COMPILER V7.50 LESSON7 06/18/2006 10:39:04 PAGE 3
117 void keypad_response(uchar key_number)
118 {
119 1 data uchar k;
120 1 data uchar uc_device_addr,uc_device_sub_addr,uc_data_send[3];
121 1
122 1 lab:P1 = 0X07;/*release the key or not?*/
123 1 ACC = P1;
124 1 ACC &= 0X07;
125 1
126 1 if((ACC == 0X07))/*release the key*/
127 1 {
128 2 for(k=0;k<=11;k++)
129 2 {
130 3 if(key_number == g_uc_key_number_all[k])
131 3 break;
132 3 }
133 2 switch(k)
134 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -