📄 demo.lst
字号:
C51 COMPILER V7.00 DEMO 10/14/2007 19:39:01 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE DEMO
OBJECT MODULE PLACED IN demo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE demo.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "STC12C2052.H"
2 #include <absacc.h>
3
4 typedef unsigned char BYTE;
5
6 sbit SDO=P1^5;
7 sbit SCLK=P1^7;
8
9 sbit M0=P1^1;
10 sbit M1=P3^3;
11
12
13 void BrushOut(BYTE nDots,BYTE dr,BYTE dg,BYTE db)
14 { BYTE i,j,mask;
15 1
16 1 // SDO,SCLK为数据和移位输出口,位变量,nDots为灯的个数
17 1 // 本程序仅适用于GMODE=1,CMODE=1的情况
18 1 // 首先输出32个'0'的起始帧
19 1 SCLK=0;
20 1 SDO=0;
21 1 for(i=0;i<32;i++) { SCLK=1;SCLK=0; }
22 1
23 1 // 再输出nDots点的数据,这里假设各点的颜色都是(dr,dg,db)
24 1 // dr,db,dg为红绿兰的灰度值0-31
25 1 for(i=0;i<nDots;i++)
26 1 { //首先输出1个'1'起始位
27 2 SDO=1;SCLK=1;SCLK=0;
28 2
29 2 //输出5位红色数据
30 2 mask=0x10;
31 2 for(j=0;j<5;j++)
32 2 { if(mask & dr) SDO=1;
33 3 else SDO=0;
34 3 SCLK=1;SCLK=0;
35 3 mask>>=1; }
36 2
37 2 //输出5位绿色数据
38 2 mask=0x10;
39 2 for(j=0;j<5;j++)
40 2 { if(mask & dg) SDO=1;
41 3 else SDO=0;
42 3 SCLK=1;SCLK=0;
43 3 mask>>=1; }
44 2
45 2 //输出5位兰色数据
46 2 mask=0x10;
47 2 for(j=0;j<5;j++)
48 2 { if(mask & db) SDO=1;
49 3 else SDO=0;
50 3 SCLK=1;SCLK=0;
51 3 mask>>=1; }
52 2 }
53 1
54 1 //输出完nDots的数据后,还要补nDots个脉冲
55 1 SDO=0;
C51 COMPILER V7.00 DEMO 10/14/2007 19:39:01 PAGE 2
56 1 for(i=0;i<nDots;i++) { SCLK=1;SCLK=0; }
57 1
58 1 //传输结束
59 1 }
60
61 void delay(unsigned int n)
62 { BYTE t;
63 1 for(;n>0;n--)
64 1 for(t=0;t<250;t++) ;
65 1 }
66
67 main()
68 { BYTE i,v,n;
69 1 int x;
70 1
71 1 AUXR=0x01;
72 1 v=0;n=0;
73 1 do
74 1 {
75 2 XBYTE[0xFA00]=v;
76 2 XBYTE[0xc000]=0;
77 2 for(x=0;x<512;x++) XBYTE[0xd000+x]=x;
78 2 } while((++v)<254);
79 1
80 1 XBYTE[0xF800]=0;
81 1 XBYTE[0xF800]=1;
82 1 for(x=0;x<4096;x++)
83 1 { while(M1==0) ;while(M1==1) ;
84 2 XBYTE[0xF800+(x & 0xff)]=0; }
85 1
86 1
87 1 while(1)
88 1 {
89 2
90 2 v=4;n++;
91 2 do
92 2 {
93 3 XBYTE[0xFA00]=v;
94 3 XBYTE[0xc000]=0;
95 3 for(x=0;x<512;x++) { XBYTE[0xd000+x]=x+n; }
96 3
97 3 } while((++v)<128);
98 2 }
99 1 AUXR=0x00;
100 1 while(1)
101 1 {
102 2 //红色渐亮
103 2 for(i=0;i<32;i++)
104 2 {
105 3 BrushOut(20,i,0,0);
106 3 delay(600); }
107 2
108 2 //红色渐暗同时绿色渐亮
109 2 for(i=0;i<32;i++)
110 2 {
111 3 BrushOut(20,31-i,i,0);
112 3 delay(600); }
113 2
114 2 //绿色渐暗同时兰色渐亮
115 2 for(i=0;i<32;i++)
116 2 {
117 3 BrushOut(20,0,31-i,i);
C51 COMPILER V7.00 DEMO 10/14/2007 19:39:01 PAGE 3
118 3 delay(600); }
119 2
120 2 //兰色渐暗
121 2 for(i=0;i<32;i++)
122 2 {
123 3 BrushOut(20,0,0,31-i);
124 3 delay(600); }
125 2
126 2 //白色渐亮
127 2 for(i=0;i<32;i++)
128 2 {
129 3 BrushOut(20,i,i,i);
130 3 delay(600); }
131 2
132 2 //七彩演示
133 2 BrushOut(20,31,0,0);delay(10000);
134 2 BrushOut(20,31,31,0);delay(10000);
135 2 BrushOut(20,0,31,0);delay(10000);
136 2 BrushOut(20,0,31,31);delay(10000);
137 2 BrushOut(20,0,0,31);delay(10000);
138 2 BrushOut(20,31,0,31);delay(10000);
139 2 BrushOut(20,31,31,31);delay(10000);
140 2 }
141 1
142 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 521 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
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 + -