📄 +
字号:
C51 COMPILER V7.50 电籣礯速 05/16/2010 11:31:49 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 电籣礯速
OBJECT MODULE PLACED IN 电机调速.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 电机调速.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /*-----------------------------------------------
3 名称:直流电机调速
4 内容:1、学习目的:利用定时器产生PWM,了解原理和使用方法
5 2、硬件要求:直流电机 定时器
6 3、试验现象:按键调速,PWM部分显示速度档位,电机根据档位调节速度 这个需要把电机驱动输入端和PWM端连
-接起来
7 ------------------------------------------------*/
8 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
9
10 sbit KEY1 = P3^1; //定义调速按键
11 sbit PWM = P1^5; //定义调速端口
12 unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
13 unsigned char PWM_ON ;//定义高电平时间
14 /******************************************************************/
15 /* 延时函数 */
16 /******************************************************************/
17 void delay(unsigned int cnt)
18 {
19 1 while(--cnt);
20 1 }
21 /******************************************************************/
22 /* 主函数 */
23 /******************************************************************/
24 main()
25 {
26 1 unsigned char PWM_Num;//定义档位
27 1 TMOD |=0x01;//定时器设置 1ms in 12M crystal
28 1 TH0=(65536-1000)/256;
29 1 TL0=(65536-1000)%256;//定时1mS
30 1 IE= 0x82; //打开中断
31 1 TR0=1;
32 1
33 1 CYCLE = 10;// 时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步
34 1 while(1)
35 1 {
36 2 if(!KEY1)
37 2 {
38 3 delay(10000);
39 3 if(!KEY1)
40 3 {
41 4 PWM_Num++;
42 4 if(PWM_Num==4)PWM_Num=0;
43 4 switch(PWM_Num){
44 5 case 0:P0=0x06;PWM_ON=0;break;//高电平时长
45 5 case 1:P0=0x5B;PWM_ON=4;break;
46 5 case 2:P0=0x4F;PWM_ON=6;break;
47 5 case 3:P0=0x66;PWM_ON=8;break;
48 5 default:break;
49 5 }
50 4 }
51 3 }
52 2 }
53 1
54 1 }
C51 COMPILER V7.50 电籣礯速 05/16/2010 11:31:49 PAGE 2
55 /******************************************************************/
56 /* 定时器中断函数 */
57 /******************************************************************/
58 void tim(void) interrupt 1 using 1
59 {
60 1 static unsigned char count; //
61 1 TH0=(65536-1000)/256;
62 1 TL0=(65536-1000)%256;//定时1mS
63 1
64 1 if (count==PWM_ON)
65 1 {
66 2 PWM = 1; //灯灭
67 2 }
68 1 count++;
69 1 if(count == CYCLE)
70 1 {
71 2 count=0;
72 2 if(PWM_ON!=0) //如果左右时间是0 保持原来状态
73 2 PWM = 0; //灯亮
74 2
75 2 }
76 1
77 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 130 ----
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 + -