📄 dimmer.lst
字号:
C51 COMPILER V8.02 DIMMER 03/27/2009 09:21:37 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DIMMER
OBJECT MODULE PLACED IN Dimmer.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Dimmer.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************
2 主题:DMX512 按键调光---主控程序
3 单片机:STC12C5404
4 晶振:8MHZ 波特率-250KB/S
5 最后修改日期:2008-12-19
6 功能:按键调光,带记忆功能
7 S1:P2.5--POWER (ON/OFF)
8 S2;P2.6--UP
9 S3:P2.7--DOWN
10 ************************************************************************/
11 #include <intrins.h>
12 #include <stdio.h>
13 #include "stc12c5410.h"
14 #include "CodingTable.h"
15
16 #define uchar unsigned char
17 #define uint unsigned int
18 typedef unsigned char INT8U; /* 8 bit 无符号整型 */
19 typedef unsigned int INT16U; /* 16 bit 无符号整型 */
20
21 #define TRUE 1
22 #define FALSE 0
23 #define ON 1
24 #define OFF 0
25 #define OVERTIME 0xF0
26 #define NONE 0x00
27
28 //#define GREY_LEVEL_MAX 52 //最大灰度值
29 #define GREY_LEVEL_MIN 0 //最小灰度值
30 #define MAX_ADDR 210 //定义最大的需发送数据次数
31 #define eeprom_began 0x2800 //定义EEPROM起始址
32
33 sbit LED = P2^0; //on/off指示灯
34 sbit KEY_POWER = P2^5; //按键定义
35 sbit KEY_INC = P2^6;
36 sbit KEY_DEC = P2^7;
37 #define KEY_MASK 0xE0
38
39 #define EnableInterrupt() EA = 1
40 #define DisableInterrupt() EA = 0
41
42 /***************************************************************************
43 ** 全局变量 **
44 ****************************************************************************/
45
46 uchar Cnt10us; //延时10us定时器计数器
47 uchar Cnt1ms; //延时1ms定时器计数器
48
49 uchar PowerState; //电源开关状态
50 uchar GreyLevel; //LED的灰度值
51
52 extern INT8U byte_read(INT16U byte_addr); //读字节函数
53 extern INT8U write_flash_with_protect_in_one_sector(INT16U begin_addr, INT16U counter, INT8U array[]);
54
55 /************************************************************************
C51 COMPILER V8.02 DIMMER 03/27/2009 09:21:37 PAGE 2
56 输入参数:uint ms级
57 返回参数:无
58 备注 ;延时函数
59 ************************************************************************/
60 void Delay1ms(uchar t)
61 {
62 1 if(t==0) return;
63 1 Cnt1ms = t;
64 1 TH1 = (65536-8000)/256; // 8MHz,1T,8000个时钟周期,定时时间为1ms
65 1 TL1 = (65536-8000)%256;
66 1
67 1 TF1 = 0;
68 1 TR1 = 1; // 开定时器
69 1 while(Cnt1ms);
70 1 TR1 = 0; // 关定时器1
71 1 }
72
73 /************************************************************************
74 函数说明:定时10us,使用定时器0
75 备注 :定时时间为1us,1000个循环为1ms
76 ************************************************************************/
77 void Delay10us(uchar t)
78 {
79 1 if(t==0) return;
80 1 Cnt10us = t;
81 1 TH0 = (256-80); // 8MHz,1T,80个时钟周期,定时时间为10us
82 1 TF0 = 0;
83 1 TR0 = 1; // 开定时器
84 1 while(Cnt10us);
85 1 TR0 = 0; // 关定时器0
86 1 }
87
88 /************************************************************************
89 函数说明:定时器0中断服务程序
90 备注 :中断时间为10us ,模式2(8位自动重装)
91 ************************************************************************/
92 void ISR_Timer0(void) interrupt 1
93 {
94 1 TF0 = 0;
95 1 if(Cnt10us>0){
96 2 Cnt10us--;
97 2 }
98 1 }
99
100 /************************************************************************
101 函数说明:定时器1中断服务程序
102 备注 :中断时间为1ms,注意模式1(16位)需要软件装载计数器
103 ************************************************************************/
104 void ISR_Timer1(void) interrupt 3 using 2
105 {
106 1 TF1 = 0;
107 1
108 1 TH1 = (65536-8000)/256; //8MHz,1T,8000个时钟周期,定时时间为1ms
109 1 TL1 = (65536-8000)%256;
110 1
111 1 if(Cnt1ms>0){
112 2 Cnt1ms--;
113 2 }
114 1 }
115
116 /************************************************************************
117 初始化 : 定时器初始化
C51 COMPILER V8.02 DIMMER 03/27/2009 09:21:37 PAGE 3
118 输入参数:无
119 返回参数:无
120 备注 :无
121 ************************************************************************/
122 void Timer_Init(void)
123 {
124 1 AUXR |= 0xC0; //T0,T1速度为12倍标准51
125 1 TMOD |= 0x12; // 定时器0为8位自动重装计数器,定时器1为16位计数器
126 1
127 1 TF0 = 0;
128 1 TF1 = 0;
129 1 ET0 = 1; // 允许定时器0中断
130 1 ET1 = 1; // 允许定时器1中断
131 1 }
132
133 /************************************************************************
134 初始化 : 串口初始化
135 输入参数:无
136 返回参数:无
137 备注 :baud rate = 8MHz/32 = 250Kbps
138 ************************************************************************/
139 void UART_Init(void)
140 {
141 1 PCON |= 0x80; // SMOD=1,double baud rate
142 1 SCON |= 0x80; // Mode 2:9 bit,fixed baud rate(1/32 the oscillator frequency)
143 1 }
144
145 /************************************************************************
146 初始化 : IO口初始化
147 输入参数:无
148 返回参数:无
149 备注 :无
150 ************************************************************************/
151 void Port_Init(void)
152 {
153 1 P2M0 = 0xE0; P2M1 = 0x1F; //强推挽输出
154 1
155 1 LED = OFF;
156 1 KEY_POWER = ON;
157 1 KEY_INC= ON;
158 1 KEY_DEC = ON;
159 1 }
160
161 /************************************************************************
162 初始化 : 系统初始化
163 输入参数:无
164 返回参数:无
165 备注 :无
166 ************************************************************************/
167 void Sys_Init(void)
168 {
169 1 Timer_Init(); //定时器初始化
170 1 UART_Init(); //串口初始化
171 1 Port_Init(); //IO端口初始化
172 1 }
173
174 /************************************************************************
175 输入参数:无
176 返回参数:无
177 备注 :读按键值--eeprom
178 ************************************************************************/
179 void DataResume(void)
C51 COMPILER V8.02 DIMMER 03/27/2009 09:21:37 PAGE 4
180 {
181 1 PowerState = byte_read(eeprom_began);
182 1 GreyLevel = byte_read(eeprom_began + 1);
183 1 }
184
185 /************************************************************************
186 输入参数:无
187 返回参数:无
188 备注 :读按键值--eeprom
189 ************************************************************************/
190 void DataSave(void)
191 {
192 1 uchar FlagWrEEPROM;
193 1 uchar Temp[2];
194 1
195 1 Temp[0] = PowerState;
196 1 Temp[1] = GreyLevel;
197 1 do{
198 2 FlagWrEEPROM = write_flash_with_protect_in_one_sector(eeprom_began,2,&Temp[0]); //写EEPROM
199 2 }while(!FlagWrEEPROM);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -