📄 main.lst
字号:
C51 COMPILER V8.05a MAIN 07/10/2008 21:02:44 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #define uchar unsigned char //定义一下方便使用
2 #define uint unsigned int
3 #define ulong unsigned long
4 #include <reg52.h> //包括一个52标准内核的头文件
5
6 sbit P30 = P3^0; //要控制的LED灯
7 sbit K1= P3^1; //按键K1,INT0
8
9 uchar scale;//用于保存占空比的输出0的时间份额,总共10份
10
11 char code dx516[3] _at_ 0x003b;//这是为了仿真设置的
12 //模拟PWM输出控制灯的10个亮度级别
13 /*void delay02s(void) //延时0.2秒子程序
14 {
15 unsigned char i,j,k; //定义3个无符号字符型数据。
16 for(i=20;i>0;i--) //作循环延时
17 for(j=20;j>0;j--)
18 for(k=248;k>0;k--);
19 } */
20 void main(void) // 主程序
21 {
22 1 uint n;
23 1
24 1 RCAP2H =0xF3; //赋T2的预置值,溢出1次是1/1200秒钟
25 1 RCAP2L =0x98;
26 1 TR2=1; //启动定时器
27 1 ET2=1; //打开定时器2中断
28 1 EA=1; //打开总中断
29 1 while(1) //程序循环
30 1 { //主程序在这里就不断自循环,实际应用中,这里是做主要工作
31 2 for(n=0;n<50000;n++); //每过一会儿就自动加一个档次的亮度
32 2 scale++;//用于保存占空比的输出0的时间份额,总共10份
33 2 if(scale==10)scale=0;
34 2 }
35 1 }
36 //1/1200秒定时器2中断
37 timer2() interrupt 5
38 {
39 1 static uchar tt; //tt用来保存当前时间在一秒中的比例位置
40 1 TF2=0;
41 1
42 1 tt++;
43 1 if(tt==10) //每1/120秒整开始输出低电平
44 1 {
45 2 tt=0;
46 2
47 2 //if(scale!=0) //这里加这一句是为了消除灭灯状态产生的鬼影
48 2 //P30=0;
49 2 P3=0xf5;
50 2 }
51 1
52 1 if(tt==scale) //按照当前占空比切换输出高电平
53 1 //P30=1;
54 1 //delay02s();
55 1 P3=0xfa;
C51 COMPILER V8.05a MAIN 07/10/2008 21:02:44 PAGE 2
56 1
57 1 }
58
59 //修改占空比的办法,把时间分为10份
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 81 ----
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 + -