?? receive2.c
字號:
#include<reg51.h>
#include<stdio.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
sbit COL_RCK=P1^0; //列時鐘控制端
sbit COL_DS=P1^1; //列數(shù)據(jù)發(fā)送端
sbit COL_SCK=P1^2; //74HC595列數(shù)據(jù)控制端
sbit ROW_RCK=P1^7; //行時鐘控制端
sbit ROW_DS=P1^6; //行數(shù)據(jù)發(fā)送端
sbit ROW_SCK=P1^5; //74HC595行數(shù)據(jù)控制端
uchar number[56];
//從機的波特率設(shè)置為4800bit/s,并將串行口設(shè)為允許接房事,收,SM2設(shè)為1
void init_scon()
{
TMOD=0x20;
TH1=0xf3;
TL1=0xf3;
SCON=0xf0;
PCON=0x80;
TR1=1;
}
//從機串行接收
uchar receive()
{
uchar temp;
while(RI==0);
RI=0;
temp=SBUF;
return temp;
}
//從機串行發(fā)送
void send(uchar x)
{
SBUF=x;
while(TI==0);
TI=0;
}
void delay()
{
uint i,j;
for(i=0;i<20;i++)
for(j=0;j<15;j++);
}
void col_send_data(uchar *p)
{
uint i;
uchar temp;
temp=*p;
COL_SCK=0;
for(i=0;i<8;i++)
{
if(temp&0x80)
COL_DS=1;
else
COL_DS=0;
COL_RCK=0;
COL_RCK=1;
temp=temp<<1;
}
COL_SCK=1;
}
void row_send_data(uchar value)
{
uint i;
ROW_SCK=0;
for(i=0;i<8;i++)
{
if(value&0x80)
ROW_DS=1;
else
ROW_DS=0;
ROW_RCK=0;
ROW_RCK=1;
value=value<<1;
}
ROW_SCK=1;
}
int main(void)
{
uchar receive_adr;//從機從主機接收的地址
uchar receive_data; //從機從主機接收的數(shù)據(jù)
uchar *p1,*p2;
uint i,j,k;
uchar local_adr;//從機本地地址
uchar temp;
init_scon();
local_adr=0x02; //設(shè)問從機的本地地址為0X02
i=0;
while(i<56) //不停的接收,直到接收到正確的地址
{
if(RB8) //如果SM2=1,且接收到的第9位RB8=1,產(chǎn)生中斷請求,將接收到的8位數(shù)據(jù)送SBUF,
{ //如果RB8為0,則RI不置1,不接收主機發(fā)來的數(shù)據(jù)
receive_adr=SBUF;
RI=0;
}
if(receive_adr==local_adr)
{ //如果從主機接收到的地址和從機的地址相同
SM2=0; //則SM2=0,不論RB8是0還是1,都將接收從主機發(fā)來的數(shù)據(jù)
send(local_adr);
for(i=0;i<56;i++) //將接收到的數(shù)據(jù)存儲在反沖區(qū)數(shù)組DATA1中
{
receive_data=receive();
number[i]=receive_data;
}
}
}
SM2=1;
while(1)
{
p1=number; //數(shù)組起始指針賦值給P1
for(i=0;i<48;i++)
{
//控制點陣顯示移動數(shù)度
for(j=0;j<50;j++)
{
p2=p1; //恢復(fù)掃描該幀的起始地址
temp=0x7f;//行掃描控制初值
//掃描一幀
for(k=0;k<8;k++)
{
col_send_data(p2);
delay();
row_send_data(temp);
p2++;
temp=temp>>1|0x80;
}
}
p1++;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -