📄 led.lst
字号:
C51 COMPILER V8.05a LED 10/09/2008 20:25:45 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LED
OBJECT MODULE PLACED IN led.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE led.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"reg51.h"
2 #include "intrins.h"
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 #define ON 0
8 #define OFF 1
9 /*
10 //led
11 sbit R_led=P1^0;
12 sbit G_led=P1^1;
13 sbit B_led=P1^2;
14 */
15 //key
16 sbit MODE=P1^7;
17 sbit PUSE=P3^7;
18 sbit B_ADD=P3^5;
19 sbit B_DEC=P3^4;
20 sbit S_ADD=P3^0;
21 sbit S_DEC=P3^1;
22
23 extern void Pwm_delay(); //占空比延时
24
25 uchar //C_time1,
26 C_time2, //切换速度
27 Pwm_time,//占空比
28 Pwm_s, //LED状态
29 MODE_ID, //运行模式
30 R_time, //速度计数器
31 Max_ID, //状态最大值
32 Min_ID, //状态最小值
33 Run_ID; //运行状态
34 /*
35 uchar bdata F;
36 sbit F_run=F^0;
37 */
38 uchar code Run_s[]={ 0x01,0x02,0x04, 0x01,0x02,0x04, 0x01,0x02,0x04, 0x01,0x02,0x04, 0
-x01,0x02,0x04,0x07,0x00,
39
40 0x07,0x06,0x04,0x00, 0x07,0x06,0x04,0x00, 0x07,0x06,0x04,0x00, 0x07,0x06,0x04,0x00, 0x07,0x06,0x04,
-0x00,
41
42 0x03,0x00, 0x03,0x00, 0x05,0x00, 0x05,0x00, 0x06,0x00, 0x6,0x00,
43 0x03,0x00, 0x03,0x00, 0x05,0x00, 0x05,0x00, 0x06,0x00, 0x6,0x00,
44 0x03,0x00, 0x03,0x00, 0x05,0x00, 0x05,0x00, 0x06,0x00, 0x6,0x00,
45 0x03,0x00, 0x03,0x00, 0x05,0x00, 0x05,0x00, 0x06,0x00, 0x6,0x00,
46 0x03,0x00, 0x03,0x00, 0x05,0x00, 0x05,0x00, 0x06,0x00, 0x6,0x00 };//led输出状态表
47
48 uchar code Max_tab[]= { 16,36,96 };//状态最大值表
49
50 uchar code Min_tab[]= { 0,17,37 };//状态最小值表
51
52
53 void Int0()interrupt 0 {
C51 COMPILER V8.05a LED 10/09/2008 20:25:45 PAGE 2
54 1 EX0=0;//暂停键盘扫描
55 1 if(!MODE) { //模式切换
56 2 MODE_ID++;
57 2 if(MODE_ID==3)MODE_ID=0;
58 2 Max_ID=Max_tab[MODE_ID];
59 2 Min_ID=Min_tab[MODE_ID];
60 2 Run_ID=Min_ID;
61 2 R_time=C_time2;
62 2 }
63 1 if(!PUSE)ET1=~ET1;//开始/暂停
64 1 if(!S_ADD){ //运行速度加速
65 2 if(C_time2==48)C_time2=16;
66 2 else C_time2+=16;
67 2 R_time=C_time2;
68 2 }
69 1 if(!S_DEC) { //运行速度减速
70 2 if(C_time2==16)C_time2=48;
71 2 else C_time2-=16;
72 2 R_time=C_time2;
73 2 }
74 1 if(!B_ADD) { //占空比增加
75 2 if(Pwm_time==12)Pwm_time=4;
76 2 else Pwm_time+=4;
77 2 }
78 1 if(!B_DEC){ //占空比减少
79 2 if(Pwm_time==4)Pwm_time=12;
80 2 else Pwm_time-=4;
81 2 }
82 1 EX0=1;//开始键盘扫描
83 1 }
84
85 void Timer1()interrupt 3 {
86 1 TH1=0x0b;
87 1 TL1=0xdc;
88 1 R_time--;
89 1 if(R_time==0) {//切换LED输出状态
90 2 R_time=C_time2;
91 2 if(Run_ID==Max_ID) { Run_ID=Min_ID;/*ET1=0;return;*/ }
92 2 else Run_ID++;
93 2 Pwm_s=~Run_s[Run_ID];
94 2 }
95 1 }
96
97 void Init_system(){
98 1 //初始化运行状态
99 1 MODE_ID=0;
100 1 Max_ID=Max_tab[MODE_ID];
101 1 Run_ID=Min_ID=Min_tab[MODE_ID];
102 1 Pwm_time=12;
103 1 Pwm_s=~Run_s[Run_ID];
104 1
105 1 //INT0中断设置
106 1 IT0=1;
107 1 EX0=1;
108 1
109 1 //Timer0中断设置
110 1 TH1=0x0b;
111 1 TL1=0xdc;
112 1 C_time2=R_time=16;
113 1 TR1=1;
114 1 ET1=1;
115 1 EA=1;
C51 COMPILER V8.05a LED 10/09/2008 20:25:45 PAGE 3
116 1 }
117
118 void Pwm_delay() {//占空比延时
119 1 uchar i;
120 1 for(i=0;i<5;i++)_nop_();
121 1 }
122
123
124 void main() {
125 1 uchar Pwm;//占空比计数器
126 1 Init_system();
127 1 while(1) {
128 2 //启动时间
129 2 Pwm=Pwm_time;
130 2 P1=Pwm_s;
131 2 while(Pwm--)Pwm_delay();
132 2
133 2 //关闭时间
134 2 Pwm=12-Pwm_time;
135 2 if(Pwm) {
136 3 P1=0xff;
137 3 while(Pwm--)Pwm_delay();
138 3 }
139 2 }
140 1 }
141
142
143
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 297 ----
CONSTANT SIZE = 103 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
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 + -