📄 can
字号:
C51 COMPILER V8.02 PWM 03/26/2011 16:16:37 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE PWM
OBJECT MODULE PLACED IN PWM.OBJ
COMPILER INVOKED BY: D:\单片机编程软件\keil软件\C51\BIN\C51.EXE PWM.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 sbit KEY1 = P3^2;
3 sbit PWM = P0^0;
4 unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
5 unsigned char PWM_ON ;//定义高电平时间
6 void delay(unsigned int cnt)
7 {
8 1 while(--cnt);
9 1 }
10
11 main()
12 {
13 1 unsigned char PWM_Num;//定义档位
14 1 TMOD |=0x01;//定时器设置 1ms in 12M crystal
15 1 TH0=(65536-100)/256;
16 1 TL0=(65536-100)%256;//定时1mS
17 1 IE= 0x82; //打开中断
18 1 TR0=1;
19 1
20 1 CYCLE=10;// 时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步
21 1 while(1)
22 1 {
23 2 if(!KEY1)
24 2 {
25 3 delay(30000);
26 3 if(!KEY1)
27 3 {
28 4 PWM_Num++;
29 4 if(PWM_Num==5)PWM_Num=0;
30 4 switch(PWM_Num){
31 5 case 0:PWM_ON=2;break;//高电平时长
32 5 case 1:PWM_ON=4;break;
33 5 case 2:PWM_ON=6;break;
34 5 case 3:PWM_ON=8;break;
35 5 case 4:PWM_ON=10;break;
36 5 default:break;
37 5 }
38 4 }
39 3
40 3 }
41 2 }
42 1
43 1 }
44 /********************************/
45 /* 定时中断 */
46 /********************************/
47 void tim(void) interrupt 1 using 1
48 {
49 1 static unsigned char count; //
50 1 TH0=(65536-100)/256;
51 1 TL0=(65536-100)%256;//定时1mS
52 1
53 1 if (count==PWM_ON)
54 1 {
55 2 PWM = 0; //灯灭
C51 COMPILER V8.02 PWM 03/26/2011 16:16:37 PAGE 2
56 2 }
57 1 count++;
58 1 if(count == CYCLE)
59 1 {
60 2 count=0;
61 2 if(PWM_ON!=0) //如果左右时间是0 保持原来状态
62 2 PWM = 1;//灯亮
63 2
64 2 }
65 1
66 1 }
67
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 126 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
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 + -