📄 main.lst
字号:
C51 COMPILER V7.10 MAIN 01/26/2007 08:52:41 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <stdio.h>
3
4 #define UCHAR unsigned char
5 #define UINT unsinged int
6
7 sbit IN0 = P3^2;
8 sbit IN1 = P3^3;
9 sbit PWM = P3^4;
10
11 UCHAR PWMRegH, PWMRegL;
12
13 void Delay(UCHAR i);
14 UCHAR keyscan(void);
15
16 UCHAR key, i = 1;
17
18 void ld_int0 (void) interrupt 0 using 1 //外部中断0响应函数
19 {
20 1 EX0 = 0;
21 1 Delay(10);
22 1
23 1 PWM = 0; //使能PWM
24 1 TR1 = 1;
25 1 printf("enable");
26 1
27 1 i = 1;
28 1 PWMRegH = (800 - 25 * 8 )/256;
29 1 PWMRegL = (800 - 25 * 8 )%256;
30 1 P1 = ~0x01;
31 1
32 1 while(IN0 == 0)Delay(10);
33 1 EX0 = 1;
34 1 }
35
36 void Tim0_int(void) interrupt 1 using 1 //定时器0响应函数
37 {
38 1 PWM = 0; //输出低电平
39 1 TR0 = 0; //定时器停止计数
40 1 }
41
42 void ld_int1 (void) interrupt 2 using 1 //外部中断1响应函数
43 {
44 1 EX1 = 0;
45 1 Delay(10);
46 1
47 1 PWM = 1; //关闭PWM
48 1 TR1 = 0;
49 1 printf("disable");
50 1
51 1 while(IN1 == 0)Delay(10);
52 1 EX1 = 1;
53 1 }
54
55 void Tim1_int(void) interrupt 3 using 1
C51 COMPILER V7.10 MAIN 01/26/2007 08:52:41 PAGE 2
56 {
57 1 PWM = 1; //PWM输出高电平
58 1
59 1 TH0 -= PWMRegH; //设定占空比
60 1 TL0 -= PWMRegL;
61 1 TR0 = 1;
62 1
63 1 TH1 -= 800/256;
64 1 TL1 -= 800%256;
65 1
66 1 }
67
68 main()
69 {
70 1 SCON = 0x50; //初始化寄存器
71 1 TMOD |= 0x11;
72 1 TH1 -= 800/256;
73 1 TL1 -= 800%256;
74 1 TH0 -= PWMRegH;
75 1 TL0 -= PWMRegL;
76 1 TR1 = 0;
77 1 TR0 = 0;
78 1 TI = 1;
79 1 IE = 0x8F;
80 1
81 1 RCAP2H = 0xFF; //设置串口波特率
82 1 RCAP2L = 0xDB; //9600 @ 11.0592
83 1 T2CON = 0x34;
84 1
85 1 PWMRegH = (800 - 25 * 8)/256;
86 1 PWMRegL = (800 - 25 * 8)%256;
87 1
88 1 printf("start");
89 1
90 1 for(;;)
91 1 {
92 2 key = keyscan(); //键扫描
93 2
94 2 if(key == 0x11) //根据键值调整占空比
95 2 {
96 3 if(i <= 8)
97 3 {
98 4 i++;
99 4 PWMRegH = (800 - 25 * (8 - i))/256;
100 4 PWMRegL = (800 - 25 * (8 - i))%256;
101 4 P1 = ~(0x01 << (i-1));
102 4 }
103 3 key = 0;
104 3 }
105 2
106 2 if(key == 0x21)
107 2 {
108 3 if(i > 0)
109 3 {
110 4 i--;
111 4 PWMRegH = (800 - 25 * (8 - i))/256;
112 4 PWMRegL = (800 - 25 * (8 - i))%256;
113 4 P1 = ~(0x01 << (i-1));
114 4 }
115 3 key = 0;
116 3 }
117 2 }
C51 COMPILER V7.10 MAIN 01/26/2007 08:52:41 PAGE 3
118 1 }
119
120 void Delay(UCHAR i)
121 {
122 1 UCHAR j;
123 1 for(i; i > 0; i--)
124 1 for(j = 200; j > 0; j--);
125 1 }
126
127 UCHAR keyscan(void) //键扫描程序
128 {
129 1 UCHAR sccode,recode;
130 1 P2 = 0xF0;
131 1 if((P2 & 0xF0) != 0xF0)
132 1 {
133 2 Delay(3);
134 2 if((P2 & 0xF0) != 0xF0)
135 2 {
136 3 sccode = 0xFE;
137 3 while((sccode & 0x10) != 0)
138 3 {
139 4 P2 = sccode;
140 4 if((P2 & 0xF0) != 0xF0)
141 4 {
142 5 recode = (P2 & 0xF0) | 0x0F;
143 5 while((P2 & 0xF0) != 0xF0)Delay(3);
144 5 return((~sccode) + (~recode));
145 5 }
146 4 else
147 4 sccode = (sccode << 1) | 0x01;
148 4 }
149 3 }
150 2 }
151 1
152 1 return 0;
153 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 466 ----
CONSTANT SIZE = 21 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
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 + -