lesson 5_3.lst
来自「有51单片机C语言基础后在较短时间内学会51单片机C。」· LST 代码 · 共 153 行
LST
153 行
C51 COMPILER V8.05a LESSON_5_3 02/03/2009 16:43:09 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LESSON_5_3
OBJECT MODULE PLACED IN lesson 5_3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lesson 5_3.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<intrins.h>
3 #define uint unsigned int
4 #define uchar unsigned char
5 uchar num,temp,temp1,i,row;
6 sbit dula=P2^6;
7 sbit wela=P2^7;
8 uchar code table[]={
9 0x3f,0x06,0x5b,0x4f,
10 0x66,0x6d,0x7d,0x07,
11 0x7f,0x6f,0x77,0x7c,
12 0x39,0x5e,0x79,0x71};
13 void delay(uint z);
14 void initial();
15 void display();
16 void jianche();
17 void jianzhi();
18 void main()
19 {
20 1 initial();
21 1 while(1)
22 1 {
23 2
24 2 P3=0xf0;
25 2 temp=P3;
26 2 if(temp!=0xf0) //判断是否有键按下
27 2 {
28 3 P3=0xfe; row=0xfe; //扫描第一行
29 3 jianche();
30 3
31 3 P3=0xfd; row=0xfd; //扫描第一行
32 3 jianche();
33 3
34 3 P3=0xfb; row=0xfb; //扫描第一行
35 3 jianche();
36 3
37 3 P3=0xf7; row=0xf7; //扫描第一行
38 3 jianche();
39 3 }
40 2
41 2 }
42 1 }
43
44 void initial()
45 {
46 1 num=0;
47 1 temp=0;
48 1
49 1 temp1=0xfe;
50 1 P1=temp1;
51 1
52 1 wela=1;
53 1 P0=0xfe;
54 1 wela=0;
55 1
C51 COMPILER V8.05a LESSON_5_3 02/03/2009 16:43:09 PAGE 2
56 1 dula=1;
57 1 P0=0x00;
58 1 dula=0;
59 1 }
60
61 void display()
62 {
63 1 dula=1;
64 1 P0=table[num];
65 1 dula=0;
66 1
67 1 temp1=_crol_(temp1,1);
68 1 P1=temp1;
69 1 }
70
71 void jianche()
72 {
73 1 temp=P3;
74 1 temp=temp&0xf0;
75 1 if(temp!=0xf0) //判断是否有键按下
76 1 {
77 2 delay(5); //去抖动
78 2 temp=P3;
79 2 temp=temp&0xf0;
80 2 if(temp!=0xf0) //再判断是否真的键按下
81 2 {
82 3
83 3 jianzhi();
84 3
85 3 temp=P3; //必须从新读P3,否则显示乱码
86 3 while(P3!=row); //判断是否松手
87 3 delay(5); //松手后去抖动
88 3 display();
89 3 }
90 2 }
91 1 }
92
93 void jianzhi()
94 {
95 1 switch(temp)
96 1 {
97 2 case 0xe0: {if(row==0xfe) num=0;
98 3 if(row==0xfd) num=4;
99 3 if(row==0xfb) num=8;
100 3 if(row==0xf7) num=12;}
101 2 break;
102 2 case 0xd0: {if(row==0xfe) num=1;
103 3 if(row==0xfd) num=5;
104 3 if(row==0xfb) num=9;
105 3 if(row==0xf7) num=13;}
106 2 break;
107 2 case 0xb0: {if(row==0xfe) num=2;
108 3 if(row==0xfd) num=6;
109 3 if(row==0xfb) num=10;
110 3 if(row==0xf7) num=14;}
111 2 break;
112 2 case 0x70: {if(row==0xfe) num=3;
113 3 if(row==0xfd) num=7;
114 3 if(row==0xfb) num=11;
115 3 if(row==0xf7) num=15;}
116 2 break;
117 2 }
C51 COMPILER V8.05a LESSON_5_3 02/03/2009 16:43:09 PAGE 3
118 1 }
119
120 void delay(uint z)
121 {
122 1 uint x,y;
123 1 for(x=z;x>0;x--)
124 1 for(y=110;y>0;y--);
125 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 345 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?