📄 pwm.lst
字号:
C51 COMPILER V8.02 PWM 04/05/2008 00:30:20 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE PWM
OBJECT MODULE PLACED IN pwm.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE pwm.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2
3 名词解释:1、PWM(Pulse Width Modulation,脉宽调制)
4
5 2、占空比(Duty Cycle)
6 即: 在一串理想的脉冲序列中(如方波),
7 正脉冲的持续时间与脉冲总周期的比值。
8 例如:脉冲宽度为1s,信号周期为4s的脉冲序
9 列的占空比为0.25。
10
11 程序说明:通过调整单位时间内I/O口输出高电平持续的时间,
12 即可达到对占空比的调节,也即PWM,本程序即是
13 PWM的一个应用。
14
15 应用说明:图示仅画标出了占空比的几个特殊值可以适当调
16 整各个变量的初值,从而控制LED对应输出几个不
17 同的亮度级别。通过把周期设置的更小--频率
18 提高就可以达到0%--100%之间任意的亮度级别。
19 并且由于人眼的视觉暂留,看到的不是亮、灭的
20 跳变,而是明暗的均匀过渡。
21
22 (C)西安电子科技大学 测控技术与仪器 编写:郭世忠 日期:2008-04-04
23 */
24
25
26 ///////////////////////////////////////////////////////////////////////////
27 // 脉冲宽度 //
28 // | | //
29 // 0% 25% 50% |75% | 100% --->占空比 //
30 // __ ____ _____ ________ ___1 (高电平) //
31 // | | | | | | | | | //
32 // |________| |_______| |___| |__| | ___0 (低电平) //
33 // //
34 // | 500 | 500 | 500 | 500 | 500 | //
35 /* 500是一次高低电平变化的周期,可根据需要自定 */ //
36 // //
37 // 注意: 我们的学习板中,P1口的LED是低电平有效。因此, //
38 // 占空比为0%时最亮,占空比为100%时熄灭,注意区别。 //
39 ///////////////////////////////////////////////////////////////////////////
40
41
42
43 /**************************************************************************
44
45 功能:使P1口的八个LED发的光由暗到亮,再由亮到暗均匀过渡
46
47 /**************************************************************************/
48
49
50
51 #include<reg52.h> //51寄存器头文件
52
53 void Delayms(int ms);//函数声明
54
55 void main(void) //主程序
C51 COMPILER V8.02 PWM 04/05/2008 00:30:20 PAGE 2
56 {
57 1 unsigned int i,t; //定义变量
58 1
59 1 while(1) //主循环(死循环),单片机必须是死循环
60 1 {
61 2
62 2 /**************************这个for循环为由暗到亮的过程**********************/
63 2 for(t=0;t<=500;t++)
64 2 {
65 3 P1=0x00; //P1口输出低电平 即P1.7-----P1.0依次对应 0000 0000
66 3 for(i=0;i<t;i++); //延时,保持低电平,LED为熄灭状态
67 3
68 3 P1=0xff; //P1口输出高电平 即P1.7-----P1.0依次对应 1111 1111
69 3 for(i=0;i<500-t;i++); //延时,保持高电平,LED为发光状态
70 3 }
71 2
72 2 P1=0x00; //将P1口置低,防止跳变
73 2 Delayms(500); //短暂延时,用于区分变化效果
74 2 /**************************这个for循环为由亮到暗的过程**********************/
75 2 for(t=0;t<=500;t++)
76 2 {
77 3 P1=0xff; //P1口输出高电平 即P1.7-----P1.0依次对应 1111 1111
78 3 for(i=0;i<t;i++); //延时,保持低电平,LED为熄灭状态
79 3
80 3 P1=0x00; //P1口输出低电平 即P1.7-----P1.0依次对应 0000 0000
81 3 for(i=0;i<500-t;i++); //延时,保持高电平,LED为发光状态
82 3 }
83 2
84 2 P1=0xff; //将P1口置高,防止跳变
85 2 Delayms(500); //短暂延时,用于区分变化效果
86 2
87 2 }
88 1
89 1 }
90
91 /****************************************************************************
92 * 名 称:Delayms()
93 * 功 能:延迟1ms
94 * 入口参数:ms: 延迟毫秒数
95 * 出口参数:无
96 * 说 明: 11.0592MHz条件下
97 ****************************************************************************/
98 void Delayms(int ms)
99 {
100 1 unsigned int i;
101 1 for(;ms>0;ms--) //循环ms次
102 1 {
103 2 for(i=0;i<113;i++); //每次1ms延迟@ 11.0592MHz
104 2 }
105 1 }
106
107
108
109
110
111
112
113
114
115
116
117
C51 COMPILER V8.02 PWM 04/05/2008 00:30:20 PAGE 3
118
119
120
121
122
123
124
125
126
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 208 ----
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 + -