📄 dzshowmode0.lst
字号:
C51 COMPILER V7.06 DZSHOWMODE0 01/16/2007 16:15:16 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DZSHOWMODE0
OBJECT MODULE PLACED IN dzshowmode0.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE dzshowmode0.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //************************************************
2 //在16×64的点阵显示屏上快速打出中文汉字
3 //点阵码由串口输入,接收点阵码采用中断方式
4 //************************************************
5 #include "reg52.h"
6 #include "intrins.h"
7 #include "absacc.h"
8 #include <stdio.h>
9 #define nop _nop_()
10 #define uchar unsigned char
11 #define DELAY_VALUE 300
12
13 sbit h_clk=P1^3; //行 clk
14 sbit h_data=P1^6; //行 data
15 sbit h_str=P1^7; //行 str
16 sbit l_clk=P1^4; //列 clk
17 sbit l_data=P1^2; //列 data
18 sbit l_str=P1^5; //列 str
19 sbit h_oe=P1^0; //行 oe
20 int flag=0;
21 int EvRcv=0;
22 unsigned char rcvdata=0; //从串口存储解手的变量
23 int data_count=129;
24 int xdata xdata_count ;
25 uchar xdata word[2000] _at_ 0x0000;
26 int index=0;
27
28 uchar xdata * data pword; //指向字的指针
29
30 uchar xdata * data ptext;
31
32 void init() //清屏
33 {
34 1 int i;
35 1 P1=0xff;
36 1 P0=0x00;
37 1 h_data=1;
38 1 h_str=1;
39 1 h_clk=0;
40 1
41 1 for(i=0;i<32;i++)
42 1 {
43 2 nop;nop;
44 2 h_clk=!h_clk;
45 2 }
46 1
47 1 h_clk=0;
48 1 l_clk=0;
49 1 }
50
51 void initial() //系统初始化
52 {
53 1 IP=0x10; // 串行口定义为高优先级中断
54 1 IE=0x97; //CPU开放中断,允许串行口中断
55 1 TCON=0x05; //置中断触发方式为跳变触发
C51 COMPILER V7.06 DZSHOWMODE0 01/16/2007 16:15:16 PAGE 2
56 1 TMOD=0x20; //T1工作,8位定时器/计数器
57 1 PCON=0; //波特率选择
58 1 SCON=0x50;//串行口工作方式1,异步通信
59 1 TH1=0xFD; //定时时间为1ms
60 1 TL1=0xFD;
61 1 TR1=1; //允许T1启动计数
62 1 EA=1; //开中断
63 1
64 1 }
65 void delay(int i)
66 {
67 1 int j=0;
68 1 i=i*DELAY_VALUE;
69 1 while(j<i)j++;
70 1 }
71
72 void savedata(unsigned char a)
73 {
74 1 ptext[index]=a; //index=0
75 1 index++;
76 1 delay(150);
77 1 }
78
79 void input() //取点阵码
80 {
81 1 uchar t;
82 1 t=*pword;
83 1 if(t&0x01)
84 1 l_data=1;
85 1 else l_data=0;
86 1 l_clk=1;
87 1 l_clk=0;
88 1 if(t&0x02)
89 1 l_data=1;
90 1 else l_data=0;
91 1 l_clk=1;
92 1 l_clk=0;
93 1 if(t&0x04)
94 1 l_data=1;
95 1 else l_data=0;
96 1 l_clk=1;
97 1 l_clk=0;
98 1 if(t&0x08)
99 1 l_data=1;
100 1 else l_data=0;
101 1 l_clk=1;
102 1 l_clk=0;
103 1 if(t&0x10)
104 1 l_data=1;
105 1 else l_data=0;
106 1 l_clk=1;
107 1 l_clk=0;
108 1 if(t&0x20)
109 1 l_data=1;
110 1 else l_data=0;
111 1 l_clk=1;
112 1 l_clk=0;
113 1 if(t&0x40)
114 1 l_data=1;
115 1 else l_data=0;
116 1 l_clk=1;
117 1 l_clk=0;
C51 COMPILER V7.06 DZSHOWMODE0 01/16/2007 16:15:16 PAGE 3
118 1 if(t&0x80)
119 1 l_data=1;
120 1 else l_data=0;
121 1 l_clk=1;
122 1 l_clk=0;
123 1 }
124
125 void main()
126 {
127 1 int hh;
128 1 int j=0,k=0;
129 1 int count=0;
130 1 int i=0;
131 1 int temp=384,temp1=1;
132 1 int flag1=0;
133 1 ptext = word;
134 1 initial();
135 1 init();
136 1 while(1)
137 1 {
138 2 if(flag==0)
139 2 {//if(flag)
140 3 for(j=0;j<temp;j++)
141 3 {
142 4 pword=word;
143 4 for(hh=0;hh<32;hh++)
144 4 {
145 5 if(h_clk==0)
146 5 {
147 6 if(flag==1)
148 6 break;
149 6 h_oe=0;
150 6 pword=word+(j/128)*128+hh;
151 6 for(i=0;i<4;i++)
152 6 {
153 7 l_clk=0;
154 7 input();
155 7 pword++;
156 7 input();
157 7 pword=pword+31;
158 7 }
159 6 if(hh==0)
160 6 h_data=1;
161 6 else
162 6 h_data=0;
163 6 }
164 5 else
165 5 {
166 6 for(i=0;i<100;i++)
167 6 nop;
168 6 }
169 5 h_clk=!h_clk;
170 5 if(h_clk==1)
171 5 h_oe=1;
172 5 }
173 4 }
174 3 break;
175 3 }//if(flag)
176 2 if(EvRcv) //是否收到串行数据的标志位
177 2 {
178 3 EvRcv=0;
179 3 flag1++;
C51 COMPILER V7.06 DZSHOWMODE0 01/16/2007 16:15:16 PAGE 4
180 3 if(count==0)
181 3 temp=rcvdata;
182 3 else if(count==1)
183 3 temp=rcvdata+temp*256;
184 3 else if(count==2)
185 3 temp1=rcvdata;
186 3 else
187 3 savedata(rcvdata);
188 3 count++;
189 3
190 3 if (count==temp+2)
191 3 {
192 4 flag=0;
193 4 count=0;
194 4 index=0;
195 4 h_oe=1;
196 4 }
197 3 }
198 2 }
199 1 }
200
201 void Rcv_INT (void) interrupt 4 using 0
202 {
203 1
204 1 if(RI)
205 1 {
206 2 h_oe=0;
207 2 ACC=SBUF;
208 2 rcvdata=ACC;
209 2 h_oe=0;
210 2 EvRcv=1;
211 2 RI=0;
212 2 flag=1;
213 2 }
214 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 661 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2 ----
PDATA SIZE = ---- ----
DATA SIZE = 13 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 + -