📄 table_lamp_uart.lst
字号:
C51 COMPILER V6.12 TABLE_LAMP_UART 07/27/2009 15:25:36 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE TABLE_LAMP_UART
OBJECT MODULE PLACED IN Table_lamp_UART.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Table_lamp_UART.c DEBUG OBJECTEXTEND
stmt level source
1 /*********************************************************************************************
2 程序名: 触控调光台灯(UART串口调试版)
3 编写人: 杜洋
4 编写时间: 2009年 7月 25日
5 硬件支持: STC12C2052 12MHz
6 接口说明: P3.7(PWM0)用PWM控制LED,P1.5~P1.7接3路触摸键
7 修改日志:
8 NO.1-20090725_0622 完成触控开关LED灯部分和PWM调光部分程序。
9 NO.2-20090725_0638 完成开关灯时的渐变亮度。
10 NO.3-20090725_1208 加入UART串口调试程序。
11 /*********************************************************************************************
12 说明:电路制作时需要将触摸键和VCC线放在一起,然后触摸时将手同时触摸按键引脚和VCC线。
13
14 /*********************************************************************************************/
15
16 #include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列单片机头文件
17
18 sbit ON_OFF_Key = P1 ^ 7; //ON/OFF开关键
19 sbit Add_Key = P1 ^ 6; //加亮度(+)
20 sbit Doc_Key = P1 ^ 5; //减亮度(-)
21 //LED与P3.7(PWM0)连接
22
23 unsigned char Bright=0x88; //全局变量,亮度值
24 bit POWER=0; //LED灯开/关状态标志位
25
26
27 /*********************************************************************************************
28 函数名:PWM初始化函数
29 调 用:PWM_init();
30 参 数:无
31 返回值:无
32 结 果:将PCA初始化为PWM模式,初始占空比为0
33 备 注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可
34 /**********************************************************************************************/
35 void PWM_init (void){
36 1 CMOD=0x02; //设置PCA定时器
37 1 CL=0x00;
38 1 CH=0x00;
39 1 CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
40 1 CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同
41 1 CCAP0H=0x00; // PWM0初始时为0
42 1 CR=1; //启动PCA定时器
43 1 }
44 /**********************************************************************************************/
45
46 /*********************************************************************************************
47 函数名:PWM0占空比设置函数
48 调 用:PWM0_set();
49 参 数:0x00~0xFF(亦可用0~255)
50 返回值:无
51 结 果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
52 备 注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
53 /**********************************************************************************************/
54 void PWM0_set (unsigned char a){
55 1 CCAP0L= a; //设置值直接写入CCAP0L
C51 COMPILER V6.12 TABLE_LAMP_UART 07/27/2009 15:25:36 PAGE 2
56 1 CCAP0H= a; //设置值直接写入CCAP0H
57 1 }
58 /**********************************************************************************************/
59
60 /*********************************************************************************************
61 函数名:毫秒级CPU延时函数
62 调 用:DELAY_MS (?);
63 参 数:1~65535(参数不可为0)
64 返回值:无
65 结 果:占用CPU方式延时与参数数值相同的毫秒时间
66 备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
67 /*********************************************************************************************/
68 void DELAY_MS (unsigned int a){
69 1 unsigned int i;
70 1 while( --a != 0){
71 2 for(i = 0; i < 600; i++);
72 2 }
73 1 }
74 /*********************************************************************************************/
75
76 /*********************************************************************************************
77 函数名:UART串口初始化函数
78 调 用:UART_init();
79 参 数:无
80 返回值:无
81 结 果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
82 备 注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
83 /**********************************************************************************************/
84 void UART_init (void){
85 1 EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
86 1 ES = 1; //允许UART串口的中断
87 1
88 1 TMOD = 0x20; //定时器T/C1工作方式2
89 1 SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
90 1 TH1 = 0xF3; //定时器初值高8位设置
91 1 TL1 = 0xF3; //定时器初值低8位设置
92 1 PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
93 1 TR1 = 1; //定时器启动
94 1 }
95 /**********************************************************************************************/
96
97 /*********************************************************************************************
98 函数名:UART串口发送函数
99 调 用:UART_T (?);
100 参 数:需要UART串口发送的数据(8位/1字节)
101 返回值:无
102 结 果:将参数中的数据发送给UART串口,确认发送完成后退出
103 备 注:
104 /**********************************************************************************************/
105 void UART_T (unsigned char UART_data){ //定义串口发送数据变量
106 1 SBUF = UART_data; //将接收的数据发送回去
107 1 while(TI == 0); //检查发送中断标志位
108 1 TI = 0; //令发送中断标志位为0(软件清零)
109 1 }
110 /**********************************************************************************************/
111
112 /*********************************************************************************************
113 函数名:主函数
114 调 用:无
115 参 数:无
116 返回值:无
117 结 果:程序开始处,无限循环
C51 COMPILER V6.12 TABLE_LAMP_UART 07/27/2009 15:25:36 PAGE 3
118 备 注:
119 /**********************************************************************************************/
120 void main (void){
121 1 PWM_init(); //PWM初始化
122 1 UART_init(); //串口小秘书在此初始化了 ^_^
123 1
124 1 P1M0 = 0xff; //将P1接口设置为高阻态输入
125 1 P1M1 = 0x00; //触摸按键启用
126 1
127 1 DELAY_MS (200); //延时等待I/O接口电平状态稳定
128 1
129 1 while(1){ //循环程序部分
130 2 unsigned char a; //临时变量
131 2
132 2 UART_T (Bright); //把亮度值发给PC机 @_@|||
133 2
134 2 if(ON_OFF_Key == 1){ //开关键按下
135 3 if(POWER == 0){ //如果当前状态为关,则执行开灯程序
136 4 for(a=0;a<=Bright;a++){ //
137 5 PWM0_set(a);
138 5 DELAY_MS (20); //渐暗的时间间隔
139 5 }
140 4 PWM0_set(Bright); //达到存储的LED亮度
141 4 POWER = 1; //把状态标志位变成开
142 4 }else{ //如果当前状态为开,则执行关灯程序
143 4 for(a=Bright;a>0;a--){ //循环渐暗
144 5 PWM0_set(a);
145 5 DELAY_MS (20); //渐暗的时间间隔
146 5 }
147 4 PWM0_set(0); //关LED
148 4 POWER = 0; //把状态标志位变成关
149 4 }
150 3 while(ON_OFF_Key == 1); //等待按键放开
151 3 }
152 2
153 2 if(Add_Key == 1 && POWER == 1){ //加亮度键按下,同时在开灯状态下
154 3 Bright++; //亮度值加1
155 3 PWM0_set(Bright); //将值写入PWM控制LED亮度
156 3 if(Bright >= 0xFD){ //如果亮度值大于0xFD,则不再增加
157 4 Bright = 0xFD;
158 4 }
159 3 DELAY_MS (20); //渐变亮度的时间间隔
160 3 }
161 2
162 2 if(Doc_Key == 1 && POWER == 1){ //减亮度键按下,同时在开灯状态下
163 3 Bright--; //亮度值减1
164 3 PWM0_set(Bright); //将值写入PWM控制LED亮度
165 3 if(Bright < 0x08){ //如果亮度值小于0x08,则不再减少
166 4 Bright = 0x08;
167 4 }
168 3 DELAY_MS (20); //渐变亮度的时间间隔
169 3 }
170 2 }
171 1 }
172 /**********************************************************************************************/
173
174
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 228 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V6.12 TABLE_LAMP_UART 07/27/2009 15:25:36 PAGE 4
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 1
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 + -