📄 led_sm.lst
字号:
C51 COMPILER V7.00 LED_SM 07/10/2006 19:20:47 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE LED_SM
OBJECT MODULE PLACED IN led_sm.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE led_sm.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*--------------------------------------
2 多个16*16LED显示演示程序
3 MCU AT89C52 XAL 24MHz
4 2005年5月18日
5 --------------------------------------*/
6 //以下程序能实现多个16*16LED屏的多个字符显示,显示方式有整行上移、帘入帘出、左移、右移//
7 #include "reg52.h"
8 #define BLKN 8 //列锁存器数(=LED显示字数*2)
9 #define TOTAL 20 //待显示字个数,本例共20个
10 #define CONIO P1 //显示控制口
11 sbit G=CONIO^7; //CONIO.7为154译码器显示允许控制信号端口,0时输出,1时输出全为高阻态.
12 sbit CLK=CONIO^6; //CONIO.6为595输出锁存器时钟信号端,1时输出数据,从1到0时锁存输出数据.
13 sbit SCLR=CONIO^5; //CONIO.5为595移位寄存器清零口,平时为1,为0时,输出全为0.
14 unsigned char idata dispram[(BLKN/2)*32]={0}; //显示区缓存,四字共4*32单元
15 //
16 //**************字模表******************//
17 unsigned char code Bmp[][32]={
18 {
19 0xEF,0xFF,0xEF,0x03,0x81,0xBB,0xDD,0xBB,0xDD,0xD7,0xEB,0xEF,0xF3,0xD7,0xCD,0xB9,
20 0x3E,0xFF,0xC0,0x07,0xFE,0xF7,0xFD,0xF7,0xFD,0xF7,0xFB,0xF7,0xF7,0xD7,0xEF,0xEF},/*-- 文字: 努 --*/
21 {
22 0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x80,0x03,0xFE,0xFB,0xFE,0xFB,0xFE,0xFB,
23 0xFE,0xFB,0xFD,0xFB,0xFD,0xFB,0xFB,0xFB,0xFB,0xFB,0xF7,0xFB,0xEF,0xD7,0xDF,0xEF},/*-- 文字: 力 --*/
24 {
25 0xFE,0xF7,0xEF,0x73,0xF3,0x37,0xF7,0x6F,0x80,0x01,0xBF,0xFB,0x70,0x17,0xFF,0xBF,
26 0xFF,0x7F,0x80,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFD,0x7F,0xFE,0xFF},/*-- 文字: 学 --*/
27 {
28 0xFF,0xFF,0xC0,0x03,0xFF,0xFB,0xF7,0xFB,0xFB,0xFB,0xFC,0xFB,0xFE,0xEB,0xFF,0x9B,
29 0xFE,0x7B,0xF9,0xFB,0xC7,0xFB,0xEF,0xFB,0xFF,0xFB,0xFF,0xDB,0xFF,0xEA,0xFF,0xF6},/*-- 文字: 习 --*/
30 //
31 {
32 0xEF,0xDF,0xEF,0xDF,0xDF,0xDF,0xC1,0xDF,0xBF,0xC1,0x83,0xDF,0x6F,0xDF,0xEF,0xDF,
33 0x02,0x03,0xEE,0xFB,0xEE,0xFB,0xEE,0xFB,0xEA,0xFB,0xE6,0x03,0xEE,0xFB,0xFF,0xFF},/*-- 文字: 钻 --*/
34 {
35 0xFF,0xFF,0x02,0x01,0xEF,0x77,0xEF,0x77,0xDF,0x77,0xDF,0x77,0x84,0x01,0x97,0x77,
36 0x57,0x77,0xD7,0x77,0xD7,0x77,0xD6,0xF7,0xC6,0xF7,0xDD,0xF7,0xFB,0xF7,0xF7,0xF7},/*-- 文字: 研 --*/
37 {
38 0xEF,0xDF,0xEF,0xDF,0xEF,0xDF,0x02,0x01,0xEF,0xDF,0xEB,0xDF,0xE6,0x03,0xCE,0xF7,
39 0x2F,0x77,0xEF,0x6F,0xEF,0x9F,0xEF,0x9F,0xEF,0x6F,0xEE,0xF1,0xA9,0xFB,0xDF,0xFF},/*-- 文字: 技 --*/
40 {
41 0xFE,0xFF,0xFE,0xDF,0xFE,0xEF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFC,0x7F,0xFA,0xBF,
42 0xFA,0xDF,0xF6,0xEF,0xEE,0xE7,0xDE,0xF1,0x3E,0xFB,0xFE,0xFE,0xFE,0xFE,0xFF,0xFF},/*-- 文字: 术 --*/
43 //
44 {
45 0xC3,0x03,0xDB,0x7B,0xDB,0x7B,0xDB,0x6B,0xC3,0x77,0xDB,0x7F,0xDB,0x03,0xC3,0x3B,
46 0xDB,0x3B,0xDB,0x57,0xDB,0x57,0xDB,0x6F,0xBB,0x57,0xAB,0x31,0x77,0x7B,0xFF,0xFF},/*-- 文字: 服 --*/
47 {
48 0xFB,0xFF,0xF8,0x0F,0xF3,0xEF,0xEB,0xDF,0x9D,0xBF,0x7E,0x7F,0xF9,0x9F,0xE6,0xE1,
49 0x9E,0xFB,0xE0,0x0F,0xFD,0xEF,0xFD,0xEF,0xFB,0xEF,0xF7,0xEF,0xCF,0xAF,0x3F,0xDF},/*-- 文字: 务 --*/
50 {
51 0xDF,0xBF,0xEF,0xBF,0xEF,0xBF,0x03,0xBF,0xFB,0xBF,0xF7,0xBF,0xF4,0x03,0xEF,0xBF,
52 0xC7,0xBF,0x2B,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xE8,0x01,0xEF,0xFF},/*-- 文字: 社 --*/
53 {
54 0xFE,0xFF,0xFE,0xFF,0xFD,0x7F,0xFB,0xBF,0xF7,0xDF,0xEF,0xE7,0x90,0x11,0x7F,0xFB,
55 0xFF,0xFF,0xC0,0x07,0xFD,0xFF,0xFB,0xDF,0xF7,0xEF,0xEE,0x06,0xC0,0xE6,0xEF,0xEE},/*-- 文字: 会 --*/
C51 COMPILER V7.00 LED_SM 07/10/2006 19:20:47 PAGE 2
56 //
57 {
58 0xDF,0xFF,0xEE,0x07,0xEE,0xF7,0x02,0xF7,0xFA,0xF7,0xF6,0xF7,0xEE,0xF7,0xC6,0x07,
59 0xAB,0x6F,0x6B,0x6F,0xEF,0x6F,0xEF,0x6F,0xEE,0xED,0xEE,0xED,0xED,0xED,0xEB,0xF1},/*-- 文字: 祝 --*/
60 {
61 0xFF,0xFF,0x80,0x03,0xBF,0xFB,0xBF,0xFB,0xA0,0x0B,0xBF,0xFB,0xBF,0xFB,0xB0,0x1B,
62 0xB7,0xDB,0xB7,0xDB,0xB7,0xDB,0xB0,0x1B,0xB7,0xDB,0xBF,0xFB,0xBF,0xEB,0xBF,0xF7},/*-- 文字: 同 --*/
63 {
64 0xFE,0xF7,0xEF,0x73,0xF3,0x37,0xF7,0x6F,0x80,0x01,0xBF,0xFB,0x70,0x17,0xFF,0xBF,
65 0xFF,0x7F,0x80,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFD,0x7F,0xFE,0xFF},/*-- 文字: 学 --*/
66 {
67 0xF5,0xFF,0xF6,0xFF,0xEE,0x43,0xEE,0xFB,0xCB,0xFB,0xDB,0xFB,0x9B,0xFB,0x5B,0xFB,
68 0xDB,0xFB,0xDB,0xFB,0xDB,0xFB,0xDB,0xFB,0xDB,0xFB,0xDB,0xEB,0xDB,0xF7,0xFF,0xFF},/*-- 文字: 们 --*/
69 //
70 {
71 0xFF,0xFF,0xE0,0x07,0xEF,0xF7,0xEF,0xF7,0xE0,0x07,0xEF,0xF7,0xEF,0xF7,0xE0,0x07,
72 0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF},/*-- 文字: 早 --*/
73 {
74 0xFF,0xFF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF,
75 0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF,0xFF,0xFF,0xFF,0xFF},/*-- 文字: 日 --*/
76 {
77 0xFF,0x5F,0xFF,0x6F,0xFF,0x7F,0xC0,0x01,0xDF,0x7F,0xDF,0x7F,0xC1,0x77,0xDD,0x73,
78 0xDD,0xB7,0xDD,0xAF,0xDD,0xDF,0xD5,0x9F,0xBB,0x6D,0xBE,0xF5,0x79,0xF9,0xFF,0xFD},/*-- 文字: 成 --*/
79 {
80 0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xC0,0x06,0xFF,0x7E,0xFE,0x7E,0xFE,0x7E,
81 0xFD,0x7E,0xFB,0x7E,0xF7,0x7E,0xEF,0x7E,0x9F,0x7F,0xFF,0x7F,0xFD,0x7E,0xFE,0x7E}/*-- 文字: 才 --*/
82 };
83 //**************字模表******************//
84 unsigned char code Bmp1[][32]={
85 {
86 0xF9,0xBF,0xC7,0xAF,0xF7,0xB7,0xF7,0xB7,0xF7,0xBF,0x00,0x01,0xF7,0xBF,0xF7,0xB7,
87 0xF1,0xD7,0xC7,0xCF,0x37,0xDF,0xF7,0xAF,0xF6,0x6D,0xF7,0xF5,0xD7,0xF9,0xEF,0xFD
88 }/*我*/,
89 {
90 0xFF,0x07,0xC0,0x6F,0xED,0xEF,0xF6,0xDF,0xC0,0x01,0xDD,0xFD,0xBD,0xFF,0xC0,0x03,
91 0xFB,0xFF,0xF8,0x0F,0xF3,0xDF,0xF4,0xBF,0xEF,0x3F,0x9C,0xCF,0x73,0xF1,0xCF,0xFB
92 }/*爱*/,
93 {
94 0xF7,0xDF,0xF9,0xCF,0xFB,0xBF,0xC0,0x07,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,0xDE,0xF7,
95 0xC0,0x07,0xDE,0xF7,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF
96 }/*单*/,
97 {
98 0xFF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBB,0xE0,0x01,0xEF,0xFF,0xEF,0xFF,0xEF,0xFF,
99 0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xDF,0xEF,0xDF,0xEF,0xBF,0xEF,0x7F,0xEF
100 }/*片*/,
101 {
102 0xEF,0xFF,0xEF,0x07,0xEF,0x77,0x01,0x77,0xEF,0x77,0xEF,0x77,0xC7,0x77,0xCB,0x77,
103 0xAB,0x77,0xAF,0x77,0x6E,0xF7,0xEE,0xF5,0xED,0xF5,0xED,0xF5,0xEB,0xF9,0xEF,0xFF
104 }/*机*/,
105 {
106 0xF8,0x3F,0xE7,0xCF,0xDF,0xF7,0xBF,0xFB,0xB3,0x9B,0x73,0x9D,0x7F,0xFD,0x7F,0xFD,
107 0x6F,0xED,0x67,0xCD,0xB3,0x9B,0xB8,0x3B,0xDF,0xF7,0xE7,0xCF,0xF8,0x3F,0xFF,0xFF
108 }/*:)*/
109 };
110 //
111 /***********延时函数(约1毫秒)************/
112 void delay(unsigned int dt)
113 {
114 1 register unsigned char bt;
115 1 for (; dt; dt--)
116 1 for (bt=0; bt<255; bt++);
117 1 }
C51 COMPILER V7.00 LED_SM 07/10/2006 19:20:47 PAGE 3
118 //
119 /*****************主函数 *********************/
120 void main(void)
121 {
122 1 register unsigned char i,j,k,l,q,w;
123 1 //初始化
124 1 SCON = 0x00; //串口工作模式0:移位寄存器方式
125 1 TMOD = 0x01; //定时器T0工作方式1:16位方式
126 1 TR0 = 1; //启动定时器T0
127 1 CONIO = 0x3f; //CONIO端口初值
128 1 IE = 0x82; //允许定时器T0中断
129 1 //
130 1 while (1)
131 1 {
132 2 delay(2000); //2秒
133 2 //第一种显示效果:卷帘出显示笑脸图案
134 2 for (i=0;i<32;i++)
135 2 {
136 3 for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp1[5][i];}
137 3 if (i%2) delay(120);
138 3 }
139 2 delay(1000);
140 2 //卷帘出显示文字,每次字数为BLKN/2,共显示TOTAL*2/BLKN次
141 2 for (w=0;w<TOTAL*2/BLKN;w++)
142 2 {
143 3 for (i=0;i<32;i++)
144 3 {
145 4 for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp[q+w*BLKN/2][i];}
146 4 if (i%2) delay(120);
147 4 }
148 3 delay(3000);
149 3 }
150 2 //第一种显示效果:卷帘出显示笑脸图案
151 2 for (i=0;i<32;i++)
152 2 {
153 3 for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp1[5][i];}
154 3 if (i%2) delay(120);
155 3 }
156 2 delay(1000);
157 2 //第二种显示效果:向上滚屏,每次BLKN/2个字
158 2 for (i=0; i<TOTAL*2/BLKN; i++)
159 2 {
160 3 for (j=0; j<16; j++)
161 3 {
162 4 for (k=0; k<15; k++)
163 4 {
164 5 for(q=0;q<BLKN/2;q++)
165 5 {dispram[k*2+q*32] = dispram[(k+1)*2+q*32];dispram[k*2+1+q*32] = dispram[(k+1)*2+1+q*32];}
166 5 }
167 4 for(q=0;q<BLKN/2;q++)
168 4 {dispram[30+q*32] = Bmp[q+i*BLKN/2][j*2];dispram[31+q*32] = Bmp[q+i*BLKN/2][j*2+1];}
169 4 delay(100);
170 4 }
171 3 delay(3000);//滚动暂停
172 3 }
173 2 //第一种显示效果:卷帘出黑屏
174 2 for (i=0;i<32;i++)
175 2 {
176 3 for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=0xff;}
177 3 if (i%2) delay(120);
178 3 }
179 2 delay(1000);
C51 COMPILER V7.00 LED_SM 07/10/2006 19:20:47 PAGE 4
180 2 //第三种显示效果:左移出显示
181 2 for (i=0; i<TOTAL; i++)
182 2 {
183 3 for (j=0; j<2; j++)
184 3 for (k=0; k<8; k++)
185 3 {
186 4 for (l=0; l<16; l++)
187 4 {
188 5 for(q=0;q<BLKN/2;q++)
189 5 {
190 6 dispram[l*2+q*32] = dispram[l*2+q*32]<<1 | dispram[l*2+1+q*32]>>7;
191 6 if(q==BLKN/2-1) dispram[l*2+1+q*32] = dispram[l*2+1+q*32]<<1 | Bmp[i][l*2+j]>>(7-k);
192 6 else dispram[l*2+1+q*32] = dispram[l*2+1+q*32]<<1 | dispram[l*2+(q+1)*32]>>7;
193 6 }
194 5 }
195 4 delay(100);
196 4 }
197 3 }
198 2 delay(3000);
199 2 //第一种显示效果:卷帘出黑屏
200 2 for (i=0;i<32;i++)
201 2 {
202 3 for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=0xff;}
203 3 if (i%2) delay(120);
204 3 }
205 2 delay(1000);
206 2 //第三种显示效果:右移出显示
207 2 for (i=0; i<TOTAL; i++)
208 2 {
209 3 for (j=2; j>0; j--)
210 3 for (k=0; k<8; k++)
211 3 {
212 4 for (l=0; l<16; l++)
213 4 {
214 5 for(q=0;q<BLKN/2;q++)
215 5 {
216 6 dispram[l*2+1+q*32] = dispram[l*2+1+q*32]>>1 | dispram[l*2+q*32]<<7;
217 6 if(q==0) dispram[l*2+q*32] = dispram[l*2+q*32]>>1 | Bmp[i][l*2+j-1]<<(7-k);
218 6 else dispram[l*2+q*32] = dispram[l*2+q*32]>>1 | dispram[l*2+1+(q-1)*32]<<7;
219 6 }
220 5 }
221 4 delay(100);
222 4 }
223 3 }
224 2 delay(3000);
225 2 //第四种显示效果:卷帘入
226 2 for (i=0;i<32;i++)
227 2 {
228 3 for(q=0;q<BLKN/2;q++)
229 3 {dispram[i+q*32]= 0x00;}
230 3 if (i%2) delay(100);
231 3 }
232 2 }
233 1 }
234 //主函数结束
235 //
236 /**********显示屏扫描(定时器T0中断)函数**********/
237 void leddisplay(void) interrupt 1 using 1
238 {
239 1 register unsigned char m, n=BLKN;
240 1 TH0 = 0xFc; //设定显示屏刷新率每秒62.5帧(16毫秒每帧)
241 1 TL0 = 0x18;
C51 COMPILER V7.00 LED_SM 07/10/2006 19:20:47 PAGE 5
242 1 m = CONIO; //读取当前显示的行号
243 1 m = ++m & 0x0f; //行号加1,屏蔽高4位
244 1 do {
245 2 n--;
246 2 SBUF = dispram[m*2+(n/2)*30 + n]; //送显示数据
247 2 while (!TI); TI = 0;
248 2 }while (n); //完成一行数据的发送
249 1 G = 1; //消隐(关闭显示)
250 1 CONIO &= 0xf0; //行号端口清○
251 1 CLK=1; //显示数据打入输出锁存器
252 1 CONIO |= m; //写入行号
253 1 CLK=0; //锁存显示数据
254 1 G = 0; //打开显示
255 1 }
256 //
257
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1130 ----
CONSTANT SIZE = 832 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = 128 ----
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 + -