📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 10/19/2006 17:36:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*******************************************************************************
2 程序名称:用PWM方波调节LED的亮度
3 硬件接法:P1.1控制LED,低电平点亮
4 K3和K4分别接在P3.4、P3.5,按下时为低电平
5 运行效果:按K3可调暗LED,按K4可调亮LED
6 *******************************************************************************/
7
8
9 #include <reg51.h>
10
11
12 //定义I/O接口
13 sbit PWM = P1^1; //PWM输出(接LED)
14 sbit K3 = P2^0; //按下使PWM方波占空比增加(LED变暗)
15 sbit K4 = P2^1; //按下使PWM方波占空比减少(LED变亮)
16
17
18 //定义PWM最大级数
19 #define PWM_MAX 8
20
21
22 //定义PWM级数,分为0~PWM_MAX-1级
23 unsigned char PwmValue;
24
25
26 /*******************************************************************************
27 函数:KeyScan()
28 功能:键盘扫描
29 返回:扫描到的键值
30 *******************************************************************************/
31 unsigned char KeyScan()
32 {
33 1 unsigned char k;
34 1 k = '\0';
35 1 if ( K3 == 0 ) k = '+';
36 1 if ( K4 == 0 ) k = '-';
37 1 return k;
38 1 }
39
40
41 /*******************************************************************************
42 函数:T1_INT_SVC()
43 功能:定时器T1的中断服务函数
44 *******************************************************************************/
45 void T1INTSVC() interrupt 3
46 {
47 1 static unsigned char t = 0;
48 1 TR1 = 0;
49 1 TH1 = 0xFF;
50 1 TL1 = 0x00;
51 1 TR1 = 1;
52 1 t++;
53 1 if ( t >= PWM_MAX ) t = 0;
54 1 if ( t <= PwmValue )
55 1 {
C51 COMPILER V7.06 MAIN 10/19/2006 17:36:25 PAGE 2
56 2 PWM = 1;
57 2 }
58 1 else
59 1 {
60 2 PWM = 0;
61 2 }
62 1 }
63
64
65 /*******************************************************************************
66 函数:Delay()
67 功能:延时0.01~2.56s
68 参数:
69 t>0时,延时(t*0.01)s
70 t=0时,延时2.56s
71 说明:
72 晶振用11.0592MHz
73 *******************************************************************************/
74 void Delay(unsigned char t)
75 {
76 1 do
77 1 {
78 2 TH0 = 0xDC;
79 2 TL0 = 0x00;
80 2 TR0 = 1;
81 2 while ( !TF0 );
82 2 TR0 = 0;
83 2 TF0 = 0;
84 2 } while ( --t != 0 );
85 1 }
86
87
88 /*******************************************************************************
89 函数:SysInit()
90 功能:系统初始化
91 *******************************************************************************/
92 void SysInit()
93 {
94 1 TMOD &= 0xF0;
95 1 TMOD |= 0x01; //设置T0为16位定时器
96 1 TMOD &= 0x0F;
97 1 TMOD |= 0x10; //设置T1为16位定时器
98 1 PwmValue = PWM_MAX / 2; //设置PWM初值
99 1 PWM = 1; //PWM管脚为高
100 1 TH1 = 0xFF;
101 1 TL1 = 0x00; //定时器T1赋初值
102 1 TR1 = 1; //启动定时器T1
103 1 ET1 = 1; //使能T1中断
104 1 EA = 1; //使能总中断
105 1 }
106
107
108 //主函数
109 void main()
110 {
111 1 unsigned char k;
112 1 SysInit();
113 1 for (;;)
114 1 {
115 2 //键盘扫描
116 2 for (;;)
117 2 {
C51 COMPILER V7.06 MAIN 10/19/2006 17:36:25 PAGE 3
118 3 Delay(5);
119 3 k = KeyScan();
120 3 if ( k != '\0' ) break;
121 3 }
122 2 //处理按键
123 2 switch ( k )
124 2 {
125 3 case '+':
126 3 if ( PwmValue < PWM_MAX-1 ) PwmValue++;
127 3 break;
128 3 case '-':
129 3 if ( PwmValue > 0 ) PwmValue--;
130 3 break;
131 3 default:
132 3 break;
133 3 }
134 2 //等待按键抬起
135 2 for (;;)
136 2 {
137 3 Delay(5);
138 3 if ( KeyScan() == '\0' ) break;
139 3 }
140 2 }
141 1 }
142
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 161 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 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 + -