📄 anjian2.lst
字号:
C51 COMPILER V7.06 ANJIAN2 11/05/2008 10:49:01 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ANJIAN2
OBJECT MODULE PLACED IN anjian2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE anjian2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /* 应用范例 3
2 标题:范例 3
3 版本:1.0//
4 Target: STC89C52RC
5 程序描述:这个程序说明如何利用延迟函数来判断按键的输入 .
6 */
7 #include <reg51.h>
8 #include <intrins.h>
9
10 #define TIMER0_COUNT 0xEE11 /*10000h-(12,000,000/(12*200))*/
11 #define TRUE 1
12 #define FALSE 0
13 #define TIMES 25
14
15 #define uint unsigned int
16 #define uchar unsigned char
17 code seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
18 code bit_select[6] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
19 char counter[3] = {0,0,0};
20 uint x,y,z,a,b,c,d;
21 sbit key1 = P3^0;
22 sbit key2 = P3^1;
23 sbit key3 = P3^2;
24 sbit key4 = P3^3;
25 sbit FMQ = P3^4;
26 sbit JDQ = P3^5;
27 uchar key1_state,key2_state,key3_state,key4_state,key1_flog;
28 uchar flash,key_num,select,ups,downs;
29 /******************************
30 延迟子函数
31 *******************************/
32 /*
33 void delay_400us(uchar i)
34 {
35 uchar a,b;
36 for(a=i;a>0;a--)
37 for(b=100;b>0;b--)
38 _nop_();
39 }
40 void delay(uchar i)
41 {
42 while(i)
43 i--;
44 }
45 */
46 void timer0_init(void)
47 {
48 1 EA=0;
49 1 TR0=0;
50 1 TMOD &= 0xF0;
51 1 TMOD |=0x01;
52 1 TL0=(TIMER0_COUNT & 0x00FF);
53 1 TH0=(TIMER0_COUNT >> 8);
54 1 PT0=0;
55 1 ET0=1;
C51 COMPILER V7.06 ANJIAN2 11/05/2008 10:49:01 PAGE 2
56 1 TR0=1;
57 1 EA=1;
58 1 }
59 // 函数 timer0_isr 检查是否有按键按下
60 void timer0_isr(void) interrupt 1
61 {
62 1 TR0=0;
63 1 TL0=(TIMER0_COUNT & 0x00FF);
64 1 TH0=(TIMER0_COUNT >> 8);
65 1 TR0=1;
66 1
67 1 if(select != 0){
68 2 select--;
69 2 if(select == 0 && key1 == 0)
70 2 key1_state++;
71 2 if(key1_state == 6)key1_state=0;
72 2 }
73 1 else if (key1 == 0)select=TIMES;
74 1
75 1 if (ups !=0) { //检查ups等于0吗?
76 2 ups--; //如果ups不等于0,就将ups减1
77 2 if (ups==0 && key2==0) { //如果ups减到0,就检查P2_0==0
78 3 key_num++; // 如果P2_0是0就表示上数的弹跳按钮被按下,所以c加1
79 3 if(key_num==10) key_num=0; //如果c加到10,就将c恢复为0
80 3 }
81 2 }
82 1 else if (key2 == 0) ups=TIMES; //如果ups=0且P2_0=0就将ups设为25
83 1
84 1 if (downs !=0) { //检查downs等于0吗?
85 2 downs--; //如果downs不等于0,就将downs减1
86 2 if (downs == 0 && key3 == 0){ //如果downs 减到0,就检查P2_1=0
87 3 key_num--; // 如果P2_1是0就表示下数的弹跳按钮被按下,所以c减1
88 3 if(key_num==-1) key_num=9; //如果c减到-1时,就将c恢复为10
89 3 }
90 2 }
91 1 else if (key3 == 0) downs=TIMES; //如果downs=0且 P2_1 =0就将downs设为25
92 1
93 1 P0 = seven_seg[key_num];
94 1 P2 = bit_select[key1_state];
95 1 }
96 /************************************
97 主函数
98 ********************************************/
99 void main()
100 {
101 1 timer0_init();
102 1 while(1);
103 1
104 1
105 1 }
106
107
108
109
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 177 ----
CONSTANT SIZE = 32 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 27 ----
C51 COMPILER V7.06 ANJIAN2 11/05/2008 10:49:01 PAGE 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -