📄 receive2.lst
字号:
C51 COMPILER V8.06 RECEIVE2 05/07/2007 15:02:58 PAGE 1
C51 COMPILER V8.06, COMPILATION OF MODULE RECEIVE2
OBJECT MODULE PLACED IN receive2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE receive2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<stdio.h>
3 #include<absacc.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 sbit COL_RCK=P1^0; //列时钟控制端
7 sbit COL_DS=P1^1; //列数据发送端
8 sbit COL_SCK=P1^2; //74HC595列数据控制端
9 sbit ROW_RCK=P1^7; //行时钟控制端
10 sbit ROW_DS=P1^6; //行数据发送端
11 sbit ROW_SCK=P1^5; //74HC595行数据控制端
12 uchar number[56];
13 //从机的波特率设置为4800bit/s,并将串行口设为允许接房事,收,SM2设为1
14 void init_scon()
15 {
16 1 TMOD=0x20;
17 1 TH1=0xf3;
18 1 TL1=0xf3;
19 1 SCON=0xf0;
20 1 PCON=0x80;
21 1 TR1=1;
22 1 }
23 //从机串行接收
24 uchar receive()
25 {
26 1 uchar temp;
27 1 while(RI==0);
28 1 RI=0;
29 1 temp=SBUF;
30 1 return temp;
31 1 }
32 //从机串行发送
33 void send(uchar x)
34 {
35 1 SBUF=x;
36 1 while(TI==0);
37 1 TI=0;
38 1 }
39 void delay()
40 {
41 1 uint i,j;
42 1 for(i=0;i<20;i++)
43 1 for(j=0;j<15;j++);
44 1 }
45 void col_send_data(uchar *p)
46 {
47 1 uint i;
48 1 uchar temp;
49 1 temp=*p;
50 1 COL_SCK=0;
51 1 for(i=0;i<8;i++)
52 1 {
53 2 if(temp&0x80)
54 2 COL_DS=1;
55 2 else
C51 COMPILER V8.06 RECEIVE2 05/07/2007 15:02:58 PAGE 2
56 2 COL_DS=0;
57 2 COL_RCK=0;
58 2 COL_RCK=1;
59 2 temp=temp<<1;
60 2 }
61 1 COL_SCK=1;
62 1 }
63 void row_send_data(uchar value)
64 {
65 1 uint i;
66 1 ROW_SCK=0;
67 1 for(i=0;i<8;i++)
68 1 {
69 2 if(value&0x80)
70 2 ROW_DS=1;
71 2 else
72 2 ROW_DS=0;
73 2 ROW_RCK=0;
74 2 ROW_RCK=1;
75 2 value=value<<1;
76 2 }
77 1 ROW_SCK=1;
78 1 }
79 int main(void)
80 {
81 1
82 1 uchar receive_adr;//从机从主机接收的地址
83 1 uchar receive_data; //从机从主机接收的数据
84 1 uchar *p1,*p2;
85 1 uint i,j,k;
86 1 uchar local_adr;//从机本地地址
87 1 uchar temp;
88 1 init_scon();
89 1 local_adr=0x02; //设问从机的本地地址为0X02
90 1 i=0;
91 1 while(i<56) //不停的接收,直到接收到正确的地址
92 1 {
93 2 if(RB8) //如果SM2=1,且接收到的第9位RB8=1,产生中断请求,将接收到的8位数据送SBUF,
94 2 { //如果RB8为0,则RI不置1,不接收主机发来的数据
95 3 receive_adr=SBUF;
96 3 RI=0;
97 3 }
98 2 if(receive_adr==local_adr)
99 2 { //如果从主机接收到的地址和从机的地址相同
100 3 SM2=0; //则SM2=0,不论RB8是0还是1,都将接收从主机发来的数据
101 3 send(local_adr);
102 3 for(i=0;i<56;i++) //将接收到的数据存储在反冲区数组DATA1中
103 3 {
104 4 receive_data=receive();
105 4 number[i]=receive_data;
106 4 }
107 3 }
108 2 }
109 1 SM2=1;
110 1 while(1)
111 1 {
112 2 p1=number; //数组起始指针赋值给P1
113 2 for(i=0;i<48;i++)
114 2 {
115 3 //控制点阵显示移动数度
116 3 for(j=0;j<50;j++)
117 3 {
C51 COMPILER V8.06 RECEIVE2 05/07/2007 15:02:58 PAGE 3
118 4 p2=p1; //恢复扫描该帧的起始地址
119 4 temp=0x7f;//行扫描控制初值
120 4 //扫描一帧
121 4 for(k=0;k<8;k++)
122 4 {
123 5 col_send_data(p2);
124 5 delay();
125 5 row_send_data(temp);
126 5 p2++;
127 5 temp=temp>>1|0x80;
128 5 }
129 4 }
130 3 p1++;
131 3 }
132 2 }
133 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 358 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 56 15
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 + -