📄 main.lst
字号:
C51 COMPILER V7.10 MAIN 12/08/2007 22:08:29 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 /*
2 main.c
3 用PWM方波控制直流电机
4 */
5
6
7 #include <reg51.h>
8
9
10 //定义I/O接口
11 sbit PWM = P1^6; //PWM输出(电机)
12 sbit KEY1 = P2^0; //按键1,使PWM方波占空比增加,电机加速
13 sbit KEY2 = P2^1; //按键2,使PWM方波占空比减少,电机减速
14
15
16 //定义PWM最大级数
17 #define PWM_MAX 10
18
19
20 //定义PWM级数,分为0~PWM_MAX-1级
21 unsigned char PwmValue;
22
23
24 /*
25 函数:KeyScan()
26 功能:键盘扫描
27 返回:扫描到的键值
28 */
29 unsigned char KeyScan()
30 {
31 1 unsigned char k;
32 1 k = '\0';
33 1 if ( KEY1 == 0 ) k = '+';
34 1 if ( KEY2 == 0 ) k = '-';
35 1 return k;
36 1 }
37
38
39 /*
40 函数:T1_INT_SVC()
41 功能:定时器T1的中断服务函数
42 */
43 void T1INTSVC() interrupt 3
44 {
45 1 static unsigned char t = 0;
46 1 TR1 = 0;
47 1 TH1 = 0xFF;
48 1 TL1 = 0x00;
49 1 TR1 = 1;
50 1 t++;
51 1 if ( t >= PWM_MAX ) t = 0;
52 1 if ( t <= PwmValue )
53 1 {
54 2 PWM = 1;
55 2 }
C51 COMPILER V7.10 MAIN 12/08/2007 22:08:29 PAGE 2
56 1 else
57 1 {
58 2 PWM = 0;
59 2 }
60 1 }
61
62
63 /*
64 函数:Delay()
65 功能:延时0.01~2.56s
66 参数:
67 t>0时,延时(t*0.01)s
68 t=0时,延时2.56s
69 */
70 void Delay(unsigned char t)
71 {
72 1 do
73 1 {
74 2 TH0 = 0xDC;
75 2 TL0 = 0x00;
76 2 TR0 = 1;
77 2 while ( !TF0 );
78 2 TR0 = 0;
79 2 TF0 = 0;
80 2 } while ( --t != 0 );
81 1 }
82
83
84 /*
85 函数:SysInit()
86 功能:系统初始化
87 */
88 void SysInit()
89 {
90 1 TMOD &= 0xF0;
91 1 TMOD |= 0x01; //设置T0为16位定时器
92 1 TMOD &= 0x0F;
93 1 TMOD |= 0x10; //设置T1为16位定时器
94 1 PwmValue = PWM_MAX / 2; //设置PWM初值
95 1 PWM = 1; //PWM管脚为高
96 1 TH1 = 0xFF;
97 1 TL1 = 0x00; //定时器T1赋初值
98 1 TR1 = 1; //启动定时器T1
99 1 ET1 = 1; //使能T1中断
100 1 EA = 1; //使能总中断
101 1 }
102
103
104 void main()
105 {
106 1 unsigned char k;
107 1 SysInit();
108 1 for (;;)
109 1 {
110 2 //键盘扫描
111 2 for (;;)
112 2 {
113 3 Delay(5);
114 3 k = KeyScan();
115 3 if ( k != '\0' ) break;
116 3 }
117 2 //处理按键
C51 COMPILER V7.10 MAIN 12/08/2007 22:08:29 PAGE 3
118 2 switch ( k )
119 2 {
120 3 case '+':
121 3 if ( PwmValue < PWM_MAX-1 ) PwmValue++;
122 3 break;
123 3 case '-':
124 3 if ( PwmValue > 0 ) PwmValue--;
125 3 break;
126 3 default:
127 3 break;
128 3 }
129 2 //等待按键抬起
130 2 for (;;)
131 2 {
132 3 Delay(5);
133 3 if ( KeyScan() == '\0' ) break;
134 3 }
135 2 }
136 1 }
137
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 + -