📄 main.lst
字号:
C51 COMPILER V7.02b MAIN 09/24/2007 20:01:36 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /****************************************Copyright (c)**************************************************
2 ** 广州周立功单片机发展有限公司
3 ** 研 究 所
4 ** 产品一部
5 **
6 ** http://www.zlgmcu.com
7 **
8 ** 文 件 名: main.c
9 ** 最后修改日期: 2004年11月15日
10 ** 描 述: 用户应用程序
11 ** 版 本: V5.0
12 **********************************************************************************************************
-/
13 #include "stc51.h"
14 //#include <reg52.h>
15 #include "D12Config.h"
16 #include "Descriptor.h"
17 #include "Chap_9.h"
18 #include "D12Driver.h"
19 #include <intrins.h>
20
21
22 //定义按键及LED引脚
23 sbit MCU_SWM0 = P2^0; //按键
24 sbit MCU_SWM1 = P2^1;
25 sbit MCU_KO1 = P1^0; //按键
26 sbit MCU_KO2 = P1^1;
27 sbit MCU_LED0 = P1^2; //LED
28 sbit MCU_LED1 = P1^3;
29 sbit RST_CS5466 = P1^4;
30 sbit Mcubz = P2^4;
31
32 unsigned char Time_S;
33 unsigned char Time_M;
34 unsigned char Time_x;
35
36 void check_key_LED(void);
37 void delay_ak(unsigned char times);
38 void InitTimer(void);
39 void Inc_time();
40 void InitCPUIO(void);
41 //////////////////////////////////////////////////////////////////
42 main()
43 {
44 1 unsigned char ktso[16]={0,0,0,0,0,0,0,0,0,0,0,0};
45 1 INT32U cnt;
46 1 InitCPUIO();
47 1 AUXR=0x02;
48 1 InitTimer();
49 1 //复位后LED亮
50 1 for(cnt = 0; cnt <= 0x5000; cnt++) //延时
51 1 {
52 2 MCU_LED0 = 0; //D2和D3点亮
53 2 MCU_LED1 = 0;
54 2 }
C51 COMPILER V7.02b MAIN 09/24/2007 20:01:36 PAGE 2
55 1 MCU_LED0 = 1; //D2和D3灭
56 1 MCU_LED1 = 1;
57 1
58 1 if (Init_D12()!=0) //初始化D12
59 1 return; //如果初始化不成功,返回
60 1 EX0 = 1; //开外部中断0
61 1 PX0 = 0; //设置外部中断0中断优先级
62 1 EA = 1; //开80C51总中断
63 1
64 1 while(1)
65 1 {
66 2 usbserve(); //处理USB事件
67 2 if(bEPPflags.bits.configuration)
68 2 {
69 3 check_key_LED(); //连接正常,调用按键和LED控制处理
70 3 }
71 2 if(Time_M>2)
72 2 {
73 3 ktso[2]=TL1;
74 3 ktso[3]=220;
75 3 ktso[4]=0;
76 3 ktso[5]=0;
77 3 Time_M=0;
78 3 Time_S=0;
79 3 TH1=0;
80 3 TL1=0;
81 3 D12_WriteEndpoint(3, 16, ktso);
82 3 }
83 2
84 2 }
85 1 }
86
87
88 /******* 下面为与D12 Smart板相关的操作 *************/
89
90 /*******************************************************************
91 ** 函数名称: check_key_LED()
92 ** 功能描述: 检测D12 Smart板上的按键以及控制LED
93 ** 输 入: 无
94 ** 输 出: 无
95 ********************************************************************/
96 void check_key_LED(void)
97 {
98 1 static unsigned char c, last_key = 0xf;
99 1 unsigned char kts[16]={1,3,5,7,9,2,4,6,8,10,0x0a,0x0b,0x0c,0x0d,15};
100 1 unsigned char k;
101 1
102 1 c = MCU_SWM0 & MCU_SWM1; //读取两个按键状态
103 1 c &= 0x0f;
104 1 kts[15]=c;
105 1 if (c != last_key) {
106 2 D12_WriteEndpoint(3, 16, kts); //按键状态改变,发送信息给主机
107 2 }
108 1
109 1 last_key = c; //保留按键状态
110 1
111 1 if(bEPPflags.bits.ep1_rxdone) {
112 2 DISABLE(); //接收到主机发来的LED控制信息
113 2 bEPPflags.bits.ep1_rxdone = 0;
114 2 ENABLE();
115 2 if(GenEpBuf[3]==1){
116 3 MCU_LED0 = !(GenEpBuf[4] & 0x1); //控制LED状态
C51 COMPILER V7.02b MAIN 09/24/2007 20:01:36 PAGE 3
117 3 MCU_KO1= !MCU_LED0;
118 3 MCU_LED1 = !(GenEpBuf[4] & 0x2);
119 3 MCU_KO2 = !MCU_LED1;
120 3 //delay_ak(2);
121 3 }
122 2 else if(GenEpBuf[3]==2){
123 3 for(k=0;k<GenEpBuf[4];k++){
124 4 Mcubz=1;
125 4 delay_ak(2);
126 4 Mcubz=0;
127 4 delay_ak(2);
128 4 }
129 3 }
130 2 }
131 1 }
132 /////////////////////////////////////////////////////////////////////
133 void delay_ak(unsigned char times)
134 {
135 1 unsigned int ktime1,ktime2;
136 1 while(times--!=0){
137 2 for(ktime1=0;ktime1<200;ktime1++)
138 2 for(ktime2=0;ktime2<100;ktime2++);
139 2 }
140 1 }
141 ////////////////////////////////////////////////////////////////////
142 void InitCPUIO(void)
143 {
144 1 MCU_KO1=0;
145 1 MCU_KO2=0;
146 1 Mcubz=0;
147 1 MCU_LED0 = 1;
148 1 MCU_LED1 = 1;
149 1 RST_CS5466=0;
150 1 delay_ak(1);
151 1 RST_CS5466=1;
152 1 }
153 ///////////////////////////////////////////////////////////////////
154 void InitTimer(void)
155 {
156 1 TMOD=0x51;
157 1 TR0=1;
158 1 TR1=1;
159 1 ET0=1;
160 1 EA=1;
161 1 TH1=0x00;
162 1 TL1=0x00;
163 1 TH0=0x20;
164 1 TL0=0x00;
165 1 Time_S=0;
166 1 Time_M=0;
167 1 }
168 ///////////////////////////////////////////////////////////////
169 //功能:模拟时钟变化,
170 //Time_S为秒,Time_M为分
171 //------------------------------------------------------------------------------------
172 void Inc_time()
173 {
174 1 Time_S++;
175 1 if(Time_S>10)
176 1 {
177 2 Time_S=0;
178 2 Time_M++;
C51 COMPILER V7.02b MAIN 09/24/2007 20:01:36 PAGE 4
179 2 if(Time_M>59)
180 2 {
181 3 Time_M=0;
182 3 Time_x++;
183 3 if(Time_x>23) Time_x=0;
184 3 }
185 2 }
186 1 }
187 ///////////////////////////////////////////////////////////////////////////////////////
188 void timer1_isr(void) interrupt 1 using 3
189 { TF0=0;
190 1 TH0=0x20;
191 1 TL0=0x00;
192 1 Inc_time();
193 1 TR0=1;
194 1 }
195 ////////////////////////////////////////////////////////////////////////////////////////
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 440 ----
CONSTANT SIZE = 32 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 37
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 + -