📄 7279.c
字号:
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#include<math.h>
//7279
sbit cs=P1^0;
sbit clk=P1^1;
sbit dat=P1^2;
sbit key=P1^3;
//485发送变量
unsigned char *piont1;
unsigned char fs_count,xor;
unsigned char idata fs[20];
sbit fa_song=P1^7; //按键值
bit wanbi,fawan,fs_end;
//**********
//接受变量
unsigned char idata jishou[20],js_count;
unsigned char R_Count;
bit jieshou_wan;
//7279
void long_delay(void); //长延时
void short_delay(void); //短延时
void delay10ms(unsigned char); //延时10ms
void write7279(unsigned char,unsigned char);
unsigned char read7279(unsigned char);
void send_byte(unsigned char);
unsigned char receive_byte(void);
#define CMD_RESET 0xa4
#define CMD_TEST 0xbf
#define DECODE0 0x80
#define DECODE1 0xc8
#define CMD_READ 0x15
#define UNDECODE 0x90
#define BLINKCTL 0x88
//7279程序 ///////////////////////////////////////////////
void send_byte(unsigned char out_byte)
{
unsigned char i;
cs=0;
long_delay();
for(i=0;i<8;i++)
{
if(out_byte&0x80)
{
dat=1;
}
else
{
dat=0;
}
clk=1;
short_delay();
clk=0;
short_delay();
out_byte=out_byte*2;
}
dat=0;
}
void write7279(unsigned char cmd, unsigned char dta )
{
send_byte(cmd);
send_byte(dta);
}
unsigned char read7279(unsigned char command)
{
send_byte(command);
return(receive_byte());
}
unsigned char receive_byte(void)
{
unsigned char i,in_byte;
dat=1;
long_delay();
for(i=0;i<8;i++)
{
clk=1;
short_delay();
in_byte=in_byte*2;
if(dat)
{
in_byte=in_byte|0x01;
}
clk=0;
short_delay();
}
dat=0;
return(in_byte);
}
void long_delay(void)
{
unsigned char i;
for(i=0;i<0x30;i++);
}
void short_delay(void)
{
unsigned char i;
for(i=0;i<8;i++);
}
//***************************************************************8//
delay3(unsigned char h)
{
unsigned char i,j,k;
for(i=0;i<h;i++)
{
for(j=0;j<4;j++)
{
for(k=0;k<245;k++);
}
}
}
/***********发送************
** 函数名称:startsend
** 功能描述:初始化发送
** 输 入:无
** 输 出:无
** 全局变量:xor,*piont1
** 调用模块: 无
** 日 期: 2007年5月9日/
***************************************************************/
void startsend(void)
{
fs[0]=0x4c;fs[1]=0x5d;
fa_song=1;piont1=fs;
xor=0;
SBUF=*piont1; //启动串口中断
xor=xor^*piont1;piont1++;
fs_count=fs[2]+3;
wanbi=1;REN=0;
}
/**********************************************************
** 函数名称:fasong
** 功能描述:中断通信发送
** 输 入:无
** 输 出:无
** 全局变量:xor,*piont1
** 调用模块: 无
** 作者;袁涛
** 日 期: 2007年5月9日/
***************************************************************/
void fasong(void) interrupt 4
{
if(TI==1)
{
ES=0;TI=0;RI=0;fs_end=1;
if(wanbi==1)
{
if(fs_count>1)
{
fa_song=1; fs_count--;
SBUF=*piont1;xor=xor^*piont1;
piont1++;
}
else
{
SBUF=xor; wanbi=0; fawan=1;
}
}
else
{
fa_song=0; REN=1;fs_end=0; //////////////////////////发完标志//////////////
}
ES=1;TI=0;RI=0;
}
if(RI==1)
{
TH0=0;TL0=0;TR0=1;
RI=0;
jishou[R_Count]=SBUF;R_Count++;
}
}
void jieshou(void)
{
unsigned char data i,xor=0;
if(jishou[0]==0xab&&jishou[1]==0xcd)
{
for(i=0;i<jishou[2]+3;i++)
{
xor=xor^jishou[i];
}
if(xor==jishou[jishou[2]+3])
{
write7279(DECODE1,jishou[6]);
write7279(DECODE1+1,jishou[5]|0x80);
write7279(DECODE1+2,jishou[4]);
write7279(DECODE1+3,jishou[3]);
}
else
{
_nop_();
}
}
jieshou_wan=0;
}
void time_2(void) interrupt 1
{
jieshou_wan=1;
R_Count=0;
TR0=0;TF0=0;
}
//*********接完*****//
void main(void)
{
unsigned char keyz;
SP=0xd0;
TMOD=0x20;
SCON=0x50;
TH1=0xfd;TL1=0xfd; //设置波特率
TH0=0;TL0=0; //定时器0
ES=1;EA=1;TR1=1;
ET0=1;
fs_end=0;
jieshou_wan=0;
send_byte(CMD_RESET); //7279复位
write7279(DECODE1,9);
write7279(DECODE1+1,9|0x80);
write7279(DECODE1+2,9);
write7279(DECODE1+3,9);
while(1)
{
//keyz=key2();
keyz=read7279(CMD_READ);
switch(keyz) 按键
{
case 0x3b:fs[2]=1;fs[3]=1;if(fs_end==0)startsend();break;
case 0x3e:fs[2]=1;fs[3]=2;if(fs_end==0)startsend();break;
case 0x3d:fs[2]=1;fs[3]=3;startsend();break;
case 0x3c:fs[2]=1;fs[3]=4;startsend();break;
}
delay3(7);
if(jieshou_wan==1)
{
jieshou();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -