?? main.lst
字號:
C51 COMPILER V7.09 MAIN 07/01/2006 11:24:09 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 main.c
3 16×16 LED點陣的掃描顯示:滾動顯示文字
4 */
5
6
7 #include "Zimo.h"
8 #include <reg51.h>
9 #include <ctype.h>
10
11
12 //設置屏幕滾動速度(單位:×10ms)
13 #define SCROLL_SPEED 15
14
15
16 //定義I/O端口
17 sbit STR = P1^3; //74HC595存儲寄存器時鐘(Storage register clock)
18 sbit SI = P1^4; //74HC595串行輸入信號(Serial Input)
19 sbit SCK = P1^5; //74HC595移位寄存器時鐘(Shift register clock)
20
21
22 //定義顯示緩沖區(在T1定時中斷里掃描)
23 unsigned char data DispBuf[32];
24
25
26 /*
27 函數:SysInit()
28 功能:系統初始化
29 */
30 void SysInit()
31 {
32 1 unsigned char i;
33 1 for ( i=0; i<32; i++ )
34 1 {
35 2 DispBuf[i] = 0x00;
36 2 }
37 1 STR = 1;
38 1 SI = 0;
39 1 SCK = 0;
40 1 TMOD &= 0xF0;
41 1 TMOD |= 0x01;
42 1 TMOD &= 0x0F;
43 1 TMOD |= 0x10;
44 1 TH1 = 0xFC;
45 1 TL1 = 0x66;
46 1 TR1 = 1;
47 1 ET1 = 1;
48 1 EA = 1;
49 1 }
50
51
52 /*
53 函數:Delay()
54 功能:延時10ms~2.56s
55 參數:
C51 COMPILER V7.09 MAIN 07/01/2006 11:24:09 PAGE 2
56 t>0時,延時(t*10)ms
57 t=0時,延時2.56s
58 */
59 void Delay(unsigned char t)
60 {
61 1 do
62 1 {
63 2 TH0 = 0xDC;
64 2 TL0 = 0x66;
65 2 TR0 = 1;
66 2 while ( !TF0 );
67 2 TR0 = 0;
68 2 TF0 = 0;
69 2 }while ( --t != 0 );
70 1 }
71
72
73 /*
74 函數:PutChar()
75 功能:滾動顯示一個字母或漢字
76 參數:
77 c:字母或漢字的編碼
78 當c>=0x80時,視為一個漢字
79 */
80 void PutChar(unsigned char c)
81 {
82 1 unsigned int a; //地址變量
83 1 unsigned char i,j; //循環變量
84 1 unsigned char t; //臨時變量
85 1 unsigned char code *Tab; //指針,用于查表
86 1 t = 8;
87 1 if ( c >= 0x80 ) //如果c是漢字
88 1 {
89 2 t = 16;
90 2 a = 32 * ( c - 0x80 );
91 2 Tab = HanziTab;
92 2 }
93 1 else if ( isupper(c) ) //如果c是大寫字母
94 1 {
95 2 a = 16 * ( c - 'A' );
96 2 Tab = UpperTab;
97 2 }
98 1 else if ( islower(c) ) //如果c是小寫字母
99 1 {
100 2 a = 16 * ( c - 'a' );
101 2 Tab = LowerTab;
102 2 }
103 1 else //如果是其它字符
104 1 {
105 2 return;
106 2 }
107 1 for ( j=0; j<t; j++ )
108 1 {
109 2 for ( i=0; i<15; i++ )
110 2 {
111 3 DispBuf[i] = DispBuf[i+1];
112 3 DispBuf[16+i] = DispBuf[17+i];
113 3 }
114 2 DispBuf[i] = Tab[a+j];
115 2 DispBuf[16+i] = Tab[a+j+t];
116 2 Delay(SCROLL_SPEED);
117 2 }
C51 COMPILER V7.09 MAIN 07/01/2006 11:24:09 PAGE 3
118 1 }
119
120
121 /*
122 函數:PutStr()
123 功能:滾動顯示一個文字串
124 參數:
125 *str:以'\0'結尾的文字串
126 *str可以同時包含字母和漢字,其中漢字必須是小漢字庫內的漢字
127 */
128 void PutStr(unsigned char code *str)
129 {
130 1 unsigned char c;
131 1 for (;;)
132 1 {
133 2 c = *str++;
134 2 if ( c == '\0' ) break;
135 2 PutChar(c);
136 2 }
137 1 }
138
139
140
141 /*
142 函數:T1INTSVC()
143 功能:T1中斷服務函數
144 */
145 void T1INTSVC() interrupt 3 using 2
146 {
147 1 code unsigned char Tab[] =
148 1 {//定義掃描數據表
149 1 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,
150 1 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
151 1 };
152 1 static unsigned char n = 0; //局部靜態變量,用于查表
153 1 unsigned char i,j; //循環變量
154 1 unsigned char d; //臨時變量
155 1 unsigned char data buf[4]; //臨時數組,用于向74HC595發送數據
156 1 //處理定時器T1
157 1 TR1 = 0;
158 1 TH1 = 0xFC;
159 1 TL1 = 0x66;
160 1 TR1 = 1;
161 1 //查表,取得要發送的數據
162 1 buf[0] = Tab[n];
163 1 buf[1] = Tab[16+n];
164 1 buf[2] = DispBuf[16+n];
165 1 buf[3] = DispBuf[n];
166 1 n++;
167 1 n &= 0x0F;
168 1 //向74HC595發送數據
169 1 STR = 0;
170 1 for ( i=0; i<4; i++ )
171 1 {
172 2 d = buf[i];
173 2 j = 8;
174 2 do
175 2 {
176 3 SI = (bit)(d & 0x01);
177 3 SCK = 1;
178 3 d >>= 1;
179 3 SCK = 0;
C51 COMPILER V7.09 MAIN 07/01/2006 11:24:09 PAGE 4
180 3 } while ( --j != 0 );
181 2 }
182 1 STR = 1;
183 1 }
184
185
186 void main()
187 {
188 1 //定義文字串
189 1 code unsigned char s[] =
190 1 {
191 1 0x81, //歡
192 1 0x82, //迎
193 1 0x83, //使
194 1 0x84, //用
195 1 'S','m','a','r','t','S','O','P','C',
196 1 0x85, //教
197 1 0x86, //學
198 1 0x87, //實
199 1 0x88, //驗
200 1 0x89, //開
201 1 0x8A, //發
202 1 0x8B, //平
203 1 0x8C, //臺
204 1 0x80, // (全角空白)
205 1 '\0'
206 1 };
207 1 SysInit();
208 1 for (;;)
209 1 {
210 2 PutStr(s);
211 2 }
212 1 }
213
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 452 ----
CONSTANT SIZE = 1303 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 14
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 + -