📄 chengxu.lst
字号:
C51 COMPILER V8.08 CHENGXU 05/31/2008 22:34:57 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE CHENGXU
OBJECT MODULE PLACED IN chengxu.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE chengxu.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <intrins.h>
2 #include<reg51.h>
3 #include<absacc.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 sbit LED1= P1^0;
8 sbit LED2= P1^1;
9 sbit LED3= P1^2;
10 sbit LED4= P1^3;
11
12
13 void Delay(uint n) //软件延时
14 {
15 1 unsigned int i,j;
16 1
17 1 for(i=0;i<n;i++)
18 1 {
19 2 for(j=0;j<100;j++);
20 2 }
21 1
22 1 }
23 void dingshiqijishi(void)//定时器秒计时
24 {TMOD|=0x01; //定时器0,方式1
25 1 TL0=0x0D8; //TL0定时器0低8位计数器
26 1 TH0=0x0F0; //TH0定时器0高8位计数器
27 1 TR0=1; //定时器/计数器0启动位.TR0=1:开始计时或计数 TR0=1禁止计时或计数
28 1 ET0=1; //定时器/计数器0中断使能
29 1 EA=1; //全局中断使能
30 1 }
31
32 void kongzhiLED1(void) //LED1控制函数
33 { P0=0x01;
34 1 LED1=0;
35 1 dingshiqijishi() ;
36 1 LED1=1;
37 1 }
38
39 void kongzhiLED2(void) //LED2控制函数
40 { P0=0x02;
41 1 LED2=0;
42 1 dingshiqijishi();
43 1 LED2=1;
44 1 }
45
46 void kongzhiLED3 (void) //LED3控制函数
47 { P0=0x03;
48 1 LED3=0;
49 1 dingshiqijishi();
50 1 LED3=1;
51 1 }
52
53 void kongzhiLED4 (void) //LED4控制函数
54 { P0=0x04;
55 1 LED4=0;
C51 COMPILER V8.08 CHENGXU 05/31/2008 22:34:57 PAGE 2
56 1 }
57
58 uchar key(void)//4x4键盘子程序-判断有键闭合后调用该子程序返回键值
59 //0x11,0x21,0x41,0x81
60 //0x12,0x22,0x42,0x82
61 //0x14,0x24,0x44,0x84
62 //0x18,0x28,0x48,0x88
63 {
64 1 uchar hang,lie;
65 1 P2=0xf0;
66 1 if((P2&0xf0)!=0xff)//有键闭合,顺序执行,否则为干扰,返回“0”
67 1 {
68 2 hang=0xfe;//行扫初值
69 2 while((hang&0x10)!=0)
70 2 {
71 3 P2=hang;
72 3 if((P2&0xf0)!=0xf0)//判断健值
73 3 {
74 4 lie=((P2&0xf0)|0x0f);
75 4 return((~hang)+(~lie));
76 4 }
77 3 else
78 3 hang=(hang<<1)|0x01;
79 3 }
80 2 }
81 1 return(0);
82 1 }
83
84
85 void push(void)//判断是否有键按下
86
87 {
88 1 uint m,kpush;;
89 1 P2=0xf0;
90 1 while(1)
91 1 {
92 2 if ((kpush=P2&0x0f)!=0xff)
93 2 {
94 3 Delay(100) ;//延时
95 3 m=key();//调用键值判断
96 3 switch(m) {
97 4 case 0x11: kongzhiLED1();//按键1按下LED1亮
98 4 case 0x21: kongzhiLED2();//按键2按下LED2亮
99 4 case 0x41: kongzhiLED3();//按键3按下LED3响
100 4 case 0x81: kongzhiLED4();//按键4按下LED4响
101 4 default:break ;
102 4 }
103 3 }
104 2 }
105 1 }
106
107
108
109 void main()
110 {
111 1
112 1 while(1)
113 1 { P0=0x00;
114 2 LED4=1;
115 2 push(); //扫描键盘
116 2
117 2 }
C51 COMPILER V8.08 CHENGXU 05/31/2008 22:34:57 PAGE 3
118 1
119 1 }
120 void intersvr0(void) interrupt 0 using 1 //定时器0中断服务程序
121 {
122 1 static uint cishu=0; //中断次数
123 1
124 1 cishu++;
125 1
126 1 if( (cishu%20)==0 ) //每100ms中断一次,20次就是2000ms即为2s "%"为求余
127 1 { LED1=LED2=LED3=LED4=1;
128 2 cishu=0;
129 2 }
130 1
131 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 257 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 2
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 + -