📄 ex1.lst
字号:
C51 COMPILER V7.50 EX1 12/12/2007 17:07:02 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE EX1
OBJECT MODULE PLACED IN ex1.OBJ
COMPILER INVOKED BY: C:\Keil_c51\C51\BIN\C51.EXE ex1.c LARGE BROWSE INCDIR(F:\software\KEIL\;C:\keil\C51\) DEBUG OBJECTE
-XTEND
line level source
1 #include <includes.h>
2 #include <cygnalcon.h>
3 #include "intrins.h"
4
5
6
7 void TaskA(void*) reentrant;
8 void TaskB(void*) reentrant;
9 void TaskC(void*) reentrant;
10 void TaskD(void*) reentrant;
11
12 OS_STK TaskStartStkA[MaxStkSize];//注意:在ASM文件中设置?STACK空间为40H即64。
13 OS_STK TaskStartStkB[MaxStkSize];
14 OS_STK TaskStartStkC[MaxStkSize];
15 OS_STK TaskStartStkD[MaxStkSize];
16
17 INT8U xdata LED[6]={0,0,0,0,0,0};
18
19 void ch451_write(unsigned int command);
20 void delay1ms(unsigned char x) reentrant;
21 void delay1us(unsigned char y) reentrant;
22
23 sbit CLK = P3^0;
24 sbit DIN = P3^1;
25 sbit LOAD = P3^2;
26 sbit DOUT = P3^3;
27
28 sbit KEY0 = P2^0;
29 sbit KEY1 = P2^1;
30 sbit KEY2 = P2^2;
31
32 sbit OSWTM = P3^4;//osw translate master
33 sbit OSWTS = P3^5;//osw translate Protect
34 sbit OSWRM = P3^6;//osw receive master
35 sbit OSWRS = P3^7;//osw receive Protect
36 #define SwitchToMasterT OSWTM=1;OSWTS=0;//OSW_T 打到主线路 东 东主
37 #define SwitchToMasterR OSWRM=1;OSWRS=0;//OSW_R 打到主线路 西 西主
38 #define SwitchToProtectT OSWTM=0;OSWTS=1;//OSW_T 打到备线路 东 东旁
39 #define SwitchToProtectR OSWRM=0;OSWRS=1;//OSW_R 打到备线路 西 西旁
40
41 /*************************************************************************
42 数码管函数 define
43 *************************************************************************/
44 #define CH451_RESET 0x0201 //复位
45 #define CH451_LEFTMOV 0x0300 //设置移动方式-作移
46 #define CH451_LEFTCYC 0x0301 //设置移动方式-左循
47 #define CH451_RIGHTMOV 0x0302 //设置移动方式-右移
48 #define CH451_RIGHTCYC 0x0303 //设置移动方式-右循
49 #define CH451_SYSOFF 0x0400 //关显示、键盘、看门狗
50 #define CH451_SYSON1 0x0401 //开显示
51 #define CH451_SYSON2 0x0403 //开显示、键盘
52 #define CH451_SYSON3 0x0407 //开显示、键盘、看门狗功能
53 #define CH451_DSP 0x0500 //设置默认显示方式
54 #define CH451_BCD 0x0580 //设置BCD译码方式
C51 COMPILER V7.50 EX1 12/12/2007 17:07:02 PAGE 2
55 #define CH451_TWINKLE 0x0600 //设置闪烁控制
56 #define CH451_DIG0 0x0800 //数码管位0显示
57 #define CH451_DIG1 0x0900 //数码管位1显示
58 #define CH451_DIG2 0x0a00 //数码管位2显示
59 #define CH451_DIG3 0x0b00 //数码管位3显示
60 #define CH451_DIG4 0x0c00 //数码管位4显示
61 #define CH451_DIG5 0x0d00 //数码管位5显示
62 #define CH451_DIG6 0x0e00 //数码管位6显示
63 #define CH451_DIG7 0x0f00 //数码管位7显示
64
65 void main(void)
66 {
67 1 config();
68 1
69 1 OSInit();
70 1
71 1 ch451_write(CH451_RESET); //复位
72 1 ch451_write(CH451_SYSON1); //开显示
73 1 ch451_write(CH451_DSP); //设置默认显示方式
74 1 ch451_write(CH451_BCD); //设置BCD译码方式
75 1
76 1 OSTaskCreate(TaskA, (void *)0, TaskStartStkA,2);
77 1 OSTaskCreate(TaskB, (void *)0, TaskStartStkB,3);
78 1 OSTaskCreate(TaskC, (void *)0, TaskStartStkC,4);
79 1 OSTaskCreate(TaskD, (void *)0, TaskStartStkD,5);
80 1 InitTimer0();
81 1 OSStart();
82 1
83 1 }
84
85
86 void TaskA(void *pdat) reentrant
87 {
88 1
89 1 pdat=pdat;
90 1
91 1 for(;;){
92 2 INT8U sz=0;
93 2 INT8U d[10]={63,6,91,79,102,109,124,7,127,103};
94 2 //for( sz=0;sz<10;sz++)
95 2 // {
96 2 // P3=d[sz];
97 2 LED[0]=LED[0]+1;
98 2 if(LED[0]>=10)LED[0]=0;
99 2 ch451_write(CH451_DIG0+LED[0]);
100 2 // ch451_write(CH451_DIG1+LED[1]);
101 2 // ch451_write(CH451_DIG2+LED[2]);
102 2 if(OSWTM==0)
103 2 {
104 3 delay1ms(200);
105 3 delay1ms(200);
106 3 delay1ms(200);
107 3 delay1ms(200);
108 3 delay1ms(200);
109 3 SwitchToMasterT
110 3 SwitchToMasterR
111 3 }
112 2 OSTimeDly(2*OS_TICKS_PER_SEC);
113 2
114 2 // }
115 2
116 2 }
C51 COMPILER V7.50 EX1 12/12/2007 17:07:02 PAGE 3
117 1 }
118
119 void TaskB(void *pdat) reentrant
120 {
121 1 pdat=pdat;
122 1
123 1 for(;;){
124 2
125 2 //P1=~P1;
126 2 LED[1]=LED[1]+1;
127 2 if(LED[1]>=10)LED[1]=0;
128 2 // ch451_write(CH451_DIG0+LED[0]);
129 2 ch451_write(CH451_DIG1+LED[1]);
130 2 // ch451_write(CH451_DIG2+LED[2]);
131 2 if(OSWTM==1)
132 2 {
133 3 delay1ms(200);
134 3 delay1ms(200);
135 3 delay1ms(200);
136 3 delay1ms(200);
137 3 delay1ms(200);
138 3 SwitchToProtectT
139 3 SwitchToProtectR
140 3 }
141 2 OSTimeDly(2*OS_TICKS_PER_SEC);
142 2
143 2 }
144 1 }
145
146 void TaskC(void *pdat) reentrant
147 {
148 1 pdat=pdat;
149 1
150 1 for(;;){
151 2
152 2 LED[2]=LED[2]+1;
153 2 if(LED[2]>=10)LED[2]=0;
154 2 ch451_write(CH451_DIG2+LED[2]);
155 2 OSTimeDly(2*OS_TICKS_PER_SEC);
156 2 }
157 1 }
158
159 void TaskD(void *pdat) reentrant
160 {
161 1
162 1 INT8U sx;
163 1 INT8U e[10]={103,127,7,124,109,102,79,91,6,63};
164 1
165 1 pdat=pdat;
166 1
167 1 for(;;){
168 2
169 2 for( sx=0;sx<10;sx++)
170 2 {
171 3 P2=e[sx];
172 3 OSTimeDly(3*OS_TICKS_PER_SEC);
173 3 }
174 2
175 2 }
176 1
177 1 }
178
C51 COMPILER V7.50 EX1 12/12/2007 17:07:02 PAGE 4
179 void ch451_write(unsigned int command)
180 {
181 1 unsigned char i;
182 1 LOAD=0; //命令开始
183 1 delay1us(10);
184 1 for(i=0;i<12;i++ )
185 1 { //送入12位数据,低位在前
186 2 DIN=command&0x01;
187 2 CLK=0;
188 2 command>>=1;
189 2 CLK=1; //上升沿有效
190 2 delay1us(2);
191 2 }
192 1 LOAD=1; //加载数据
193 1 }
194
195 void delay1ms(unsigned char x) reentrant
196 {
197 1 unsigned char xdata delayk;
198 1 unsigned int xdata delayi;
199 1 for(delayk=0;delayk<x;delayk++)
200 1 for(delayi=0;delayi<335;delayi++)//1ms
201 1 {
202 2 delayi++;
203 2 delayi--;
204 2 }
205 1 }
206
207 void delay1us(unsigned char y) reentrant
208 {
209 1 unsigned int xdata delayj;
210 1 for(delayj=0;delayj<y;delayj++){
211 2 // delayj++;delayj--;
212 2 _nop_();
213 2 _nop_();
214 2 _nop_();
215 2 _nop_();
216 2 }
217 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1011 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = 406 3
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -