📄 +
字号:
C51 COMPILER V7.50 PWM 05/16/2010 11:31:04 PAGE 1
C51 COMPILER V7.50, 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 名称:PWM 调光
3 内容:1、学习目的:利用定时器产生PWM,了解原理和使用方法
4 2、硬件要求:LED灯 定时器
5 3、试验现象:LED灯由亮到灭,由灭到亮逐步变化,也就是调光现象
6 ------------------------------------------------*/
7
8 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
9 sbit LED1= P3^7;
10 sbit LED = P1^2; //定义LED灯,通过LED显示调光效果
11 unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
12 unsigned char PWM_ON ;//定义高电平时间
13 /******************************************************************/
14 /* 延时函数 */
15 /******************************************************************/
16 void delay(unsigned int cnt)
17 {
18 1 while(--cnt);
19 1 }
20 /******************************************************************/
21 /* 主函数 */
22 /******************************************************************/
23 void main()
24
25 {
26 1 bit Flag;
27 1
28 1 TMOD |=0x01; //定时器设置 0.1ms in 12M crystal
29 1 TH0=(65536-100)/256;
30 1 TL0=(65536-100)%256; //定时0.1mS
31 1 IE= 0x82; //打开中断
32 1 TR0=1;
33 1 CYCLE = 10; // 时间可以调整 这个是10调整 8位PWM就是256步
34 1 while(!Flag)
35 1 {
36 2 delay(20000); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果
37 2 PWM_ON++; //这个使用较长延时,以便能看清楚变化过程
38 2 if(PWM_ON == CYCLE)
39 2 { //这个里可以添加其他程序 如到最亮时候控制设备
40 3 Flag=1;
41 3 }
42 2 }
43 1
44 1 while(Flag) //亮度递减 同上,是个相反的过程
45 1 {
46 2 delay(20000);
47 2 PWM_ON--;
48 2 if(PWM_ON == 0)
49 2 {
50 3 Flag=0;
51 3 }
52 2 }
53 1 }
54 /******************************************************************/
55 /* 定时器中断函数 */
C51 COMPILER V7.50 PWM 05/16/2010 11:31:04 PAGE 2
56 /******************************************************************/
57 void tim(void) interrupt 1 using 1
58 {
59 1 static unsigned char count;
60 1 TH0=(65536-100)/256;
61 1 TL0=(65536-100)%256; //定时0.1mS
62 1
63 1 if (count==PWM_ON)
64 1 {
65 2 LED = 1; //灯灭
66 2 }
67 1 count++;
68 1 if(count == CYCLE)
69 1 {
70 2 count=0;
71 2 if(PWM_ON!=0) //如果左右时间是0 保持原来状态
72 2 LED = 0; //灯亮
73 2
74 2 }
75 1
76 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 104 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -