📄 9346su.lst
字号:
C51 COMPILER V7.50 9346SU 10/11/2008 18:56:28 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 9346SU
OBJECT MODULE PLACED IN 9346SU.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 9346SU.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 93C46读写 8路跑马灯方式数码管显示 *
3 * 从地址0x00开始写入数据"1-8",然后再读出送数码管显示。 *
4 *硬件连接:数码管数据接P0,数码管控制接P2,93C46接P3.4--P3.7 *
5 *开机, 数码管显示0-7,移动显示,为了证明93C46的作用, 去掉93C46连线,则无显示 *
6 *注意:在擦除或写入数据之前,必须先写入EWEN指令, 用于8位模式 *
-
7 */
8 #include <reg51.h>
9 #include <intrins.h>
10 //define OP code
11 #define OP_EWEN_H 0x00 // 00 write enable
12 #define OP_EWEN_L 0x60 // 11X XXXX write enable
13 #define OP_EWDS_H 0x00 // 00 disable
14 #define OP_EWDS_L 0x00 // 00X XXXX disable
15 #define OP_WRITE_H 0x40 // 01 A6-A0 write data
16 #define OP_READ_H 0x80 // 10 A6-A0 read data
17 #define OP_ERASE_H 0xc0 // 11 A6-A0 erase a word
18 #define OP_ERAL_H 0x00 // 00 erase all
19 #define OP_ERAL_L 0x40 // 10X XXXX erase all
20 #define OP_WRAL_H 0x00 // 00 write all
21 #define OP_WRAL_L 0x20 // 01X XXXX write all
22 //define pin
23 sbit CS = P3^2;
24 sbit SK = P1^5;
25 sbit DI = P1^4;
26 sbit DO = P1^3;
27 unsigned char code dis_code[] = {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff,0xfd};//0,1,2,3,4,
-5,6,7,8,9,关显示,数码管码表
28 unsigned char display[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
29 void start();
30 void ewen();
31 void ewds();
32 void erase();
33 void write(unsigned char addr, unsigned char indata);
34 unsigned char read(unsigned char addr);
35 void inop(unsigned char op_h, unsigned char op_l);
36 void shin(unsigned char indata);
37 unsigned char shout();
38 void delayms(unsigned int ms);
39 //*********************************************************
40 main()
41 {
42 1 unsigned char i,shift;
43 1 CS = 0; //初始化端口
44 1 SK = 0;
45 1 DI = 1;
46 1 DO = 1;
47 1 ewen(); // 使能写入操作
48 1 erase(); // 擦除全部内容
49 1 for(i = 0 ; i < 8; i++) //写入显示代码到AT93C46
50 1 {
51 2 write(i, dis_code[i]);
52 2 }
53 1 ewds(); // 禁止写入操作
C51 COMPILER V7.50 9346SU 10/11/2008 18:56:28 PAGE 2
54 1 for(i = 0 ; i < 8; i++)
55 1 {
56 2 display[i]=read(i); // 读取AT93C46内容
57 2 }
58 1 while(1)
59 1 {
60 2 shift=0x7f;
61 2 P2=0xff ;
62 2 for(i=0; i<8; i++)
63 2 {
64 3 P2=display[i];
65 3 P0=shift;
66 3 shift=_cror_(shift,1);
67 3 delayms(400); //跑马灯方式显示
68 3 }
69 2 }
70 1 }
71 //*********************************************************
72 void write(unsigned char addr, unsigned char indata)
73 // 写入数据indata到addr
74 {
75 1 inop(OP_WRITE_H, addr); // 写入指令和地址
76 1 shin(indata);
77 1 CS = 0;
78 1 delayms(10); // Twp
79 1 }
80 //*********************************************************
81 unsigned char read(unsigned char addr)
82 // 读取addr处的数据
83 {
84 1 unsigned char out_data;
85 1 inop(OP_READ_H, addr); // 写入指令和地址
86 1 out_data = shout();
87 1 CS = 0;
88 1 return out_data;
89 1 }
90 //*********************************************************
91 void ewen()
92 {
93 1 inop(OP_EWEN_H, OP_EWEN_L);
94 1 CS= 0;
95 1 }
96 //*********************************************************
97 void ewds()
98 {
99 1 inop(OP_EWDS_H, OP_EWDS_L);
100 1 CS= 0;
101 1 }
102 //*********************************************************
103 void erase()
104 {
105 1 inop(OP_ERAL_H, OP_ERAL_L);
106 1 delayms(30);
107 1 CS = 0;
108 1 }
109 //*********************************************************
110 void inop(unsigned char op_h, unsigned char op_l)
111 //移入op_h的高两位和op_l的低7位
112 //op_h为指令码的高两位
113 //op_l为指令码的低7位或7位地址
114 {
115 1 unsigned char i;
C51 COMPILER V7.50 9346SU 10/11/2008 18:56:28 PAGE 3
116 1 SK = 0; // 开始位
117 1 DI = 1;
118 1 CS = 1;
119 1 _nop_();
120 1 _nop_();
121 1 SK = 1;
122 1 _nop_();
123 1 _nop_();
124 1 SK = 0; // 开始位结束
125 1 DI = (bit)(op_h & 0x80); // 先移入指令码高位
126 1 SK = 1;
127 1 op_h <<= 1;
128 1 SK = 0;
129 1 DI = (bit)(op_h & 0x80); // 移入指令码次高位
130 1 SK = 1;
131 1 _nop_();
132 1 _nop_();
133 1 SK = 0;
134 1 // 移入余下的指令码或地址数据
135 1 op_l <<= 1;
136 1 for(i = 0; i < 7; i++)
137 1 {
138 2 DI = (bit)(op_l & 0x80);// 先移入高位
139 2 SK = 1;
140 2 op_l <<= 1;
141 2 SK = 0;
142 2 }
143 1 DI = 1;
144 1 }
145 //*********************************************************
146 void shin(unsigned char indata)
147 //移入数据
148 {
149 1 unsigned char i;
150 1 for(i = 0; i < 8; i++)
151 1 {
152 2 DI = (bit)(indata & 0x80);// 先移入高位
153 2 SK = 1;
154 2 indata <<= 1;
155 2 SK = 0;
156 2 }
157 1 DI = 1;
158 1 }
159 //*********************************************************
160 unsigned char shout(void)
161 // 移出数据
162 {
163 1 unsigned char i, out_data;
164 1 for(i = 0; i < 8; i++)
165 1 {
166 2 SK = 1;
167 2 out_data <<= 1;
168 2 SK = 0;
169 2 out_data |= (unsigned char)DO;
170 2 }
171 1 return(out_data);
172 1 }
173 //*********************************************************
174 void delayms(unsigned int ms)
175 // 延时子程序
176 {
177 1 unsigned char i;
C51 COMPILER V7.50 9346SU 10/11/2008 18:56:28 PAGE 4
178 1 while(ms--)
179 1 {
180 2 for(i = 0; i < 240; i++);
181 2 }
182 1 }
183 //*********************************************************
184
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 311 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 3
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 + -