📄 p1.lst
字号:
C51 COMPILER V6.12 P1 11/28/2006 21:31:21 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE P1
OBJECT MODULE PLACED IN .\P1.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE .\P1.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*************************************************
2 程序名称:32x64LED点阵上显示32X32的汉字
3 日期 :2006.11.25
4 程序说明:一个汉字占128个字节,点阵每一行数据占4个字节
5 作者 :liuanggh
6 *************************************************/
7 #include <reg52.h>
8 #include "P1.h"
9
10 sbit LOAD =P3^2; //74LS595锁存
11 sbit RST =P3^3; //
12 sbit SLECET =P2^3; //74LS138译码器使能端,低电平有效
13
14 uchar code line[] = { //行扫描段码
15 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07
16 };
17 uchar line_count; //行计数器
18 uchar move_count; //移位计数器
19 uchar font_count; //字计数器
20 uchar buff[16] = {0x00};//一行有128列,每8列数据占一个字节,所以缓冲区需要16个字节
21
22 void transform_data(); //数据转换
23 void send_data(); //串行发送8个字节的数据
24
25 main()
26 {
27 1 uchar i;
28 1 uchar j = 0;
29 1 SCON = 0; //串口工作在方式0下
30 1 SLECET = 1; //138译码器无效
31 1 RST = 0;
32 1 RST = 1; //595复位
33 1 /*
34 1 for(i = 0; i < 32; i++)
35 1 {
36 1 LOAD = 0;
37 1 send_data();
38 1 LOAD = 1;
39 1 P2 = line[j%8]; //片选138
40 1 P1 = line[i%8];
41 1 if(i%8 == 7)
42 1 j++;
43 1 }
44 1 */
45 1 for(i = 0; i < 8; i++)
46 1 {
47 2 P2 = line[i]; //138译码器片选
48 2 for(j = 0; j < 8; j++)
49 2 {
50 3 LOAD = 0; //保持原有数据
51 3 send_data(); //发送数据
52 3 SLECET = 1; //关闭显示
53 3 LOAD = 1; //595锁存数据
54 3 SLECET = 0; //138译码器有效
55 3 P1 = line[j]; //行扫描
C51 COMPILER V6.12 P1 11/28/2006 21:31:21 PAGE 2
56 3 line_count++; //行扫描一次,行计数器加1
57 3 //if(line_count > 31)
58 3 if(line_count > 64)
59 3 line_count = 0;
60 3 delay();
61 3 }
62 2 }
63 1
64 1 }
65
66 void transform_data() //数据转换
67 {
68 1 /*
69 1 uchar temp[5] = {0};
70 1 uchar i;
71 1 for( i = 0; i < 4; i++)
72 1 temp[i] = font[(font_count + i) * 8 + line_count]; //取第i行数据
73 1 for( i = 0; i < 4; i++)
74 1 buff[i] = ( temp[ i ] >> move_count )|( temp[ i + 1] << ( 7 - move_count ) );
75 1 */
76 1 uchar i;
77 1 for(i = 0; i < 8; i++)
78 1 {
79 2 buff[i] = hanzi[ line_count*8 + i];
80 2 }
81 1
82 1 for(i = 8; i < 16; i++)
83 1 {
84 2 buff[i] = hanzi[ line_count*8 + (i-8) + 512];
85 2 }
86 1 /*
87 1 for(i = 0; i < 4; i++)
88 1 {
89 1 buff[i] = hanzi[ line_count*4 + i];
90 1 }
91 1
92 1 for(i = 4; i < 8; i++)
93 1 {
94 1 buff[i] = hanzi[ line_count*4 + i + 128];
95 1 }
96 1
97 1 for(i = 8; i < 12; i++)
98 1 {
99 1 buff[i] = hanzi[ line_count*4 + i + 256];
100 1 }
101 1
102 1 for(i = 12; i < 16; i++)
103 1 {
104 1 buff[i] = hanzi[ line_count*4 + i + 384];
105 1 }
106 1 */
107 1
108 1
109 1 }
110
111
112 void send_data() //串行发送8个字节的数据
113 {
114 1 uchar i;
115 1 transform_data(); //数据转换
116 1
117 1 //显示"阵点"
C51 COMPILER V6.12 P1 11/28/2006 21:31:21 PAGE 3
118 1 for( i = 0; i < 16; i++)
119 1 {
120 2 //SBUF = 0xff;
121 2 SBUF = buff[i];
122 2 while(!TI);
123 2 TI = 0;
124 2 }
125 1
126 1 /*
127 1 //显示"点阵"
128 1 for( i = 4; i < 8; i++)
129 1 {
130 1 //SBUF = 0xff;
131 1 SBUF = buff[i];
132 1 while(!TI);
133 1 TI = 0;
134 1 }
135 1 for( i = 0; i < 4; i++)
136 1 {
137 1 //SBUF = 0xff;
138 1 SBUF = buff[i];
139 1 while(!TI);
140 1 TI = 0;
141 1 }
142 1 */
143 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 213 ----
CONSTANT SIZE = 1032 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 2
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 + -