资源简介

stc12c5a60s2 51单片机作为i2c从设备,加密芯片+红外+串口

资源截图

代码片段和文件信息

/*****************************************************************************
程序名:  
编写人:dragon101788

I2C协议具体描述:
0x50 开始算密码
0x51 密码第1字节
0x52 密码第2字节
0x53 密码第3字节
0x54 密码第4字节
0x55 密码第5位
0x56 密码第6位
0x57 密码第7位
0x58 密码第8位
*****************************************************************************/
#include  // 包含头文件  
#include 
#include 

unsigned char code secret_key[8]={‘1‘‘9‘‘8‘‘8‘‘1‘‘0‘‘1‘‘7‘};
unsigned char  random[8]={0x55‘2‘};

sbit IR_INT=P3^2;
sbit LED=P3^4;
sbit LED2=P3^5;
//#define I2C_TIMEOUT 200
unsigned int i2c_timeout;//超时时间
#define I2C_TIMEOUT (i2c_timeout*2+5)

unsigned char I2CsADDR=0x17;
sbit I2CsCLK=P1^1;
sbit I2CsDAT=P1^0;

unsigned char dat[4] = {0000}; //用于存放按键码值,初始化为 0000 0000

void RSHash()
{
char i;
unsigned char a=0;
unsigned char hash=0;
for(i = 0; i < 8; i++)
{

a = random[i]+hash;
hash += a;
random[i]=secret_key[hash%8]*hash;
}
}

/*****************************************************************************
UART 串口初始化函数 
振荡晶体为 12MHz,PC 串口端设置 [ 4800,8,无,1,无 ] 
*****************************************************************************/
void UART_Init (void) 
{
 EA = 1;     //允许总中断(如不使用中断,可用//屏蔽) 
 ES = 1;     //允许UART 串口的中断 
 TMOD = 0x20;   //定时器 T/C1 工作方式 2 
 SCON = 0x50;      //串口工作方式 1,允许串口接收 
 TL1  = 0xF9;      //定时器初值低 8 位设置,修改此处的值来修改波特率 
 TH1  = 0xF3;   //定时器初值高 8 位设置,修改此处的值来修改波特率 
 PCON = 0x80;      //波特率倍频 
 TR1  = 1;    //定时器启动     



/*****************************************************************************
UART 串口接收中断处理函数 
*****************************************************************************/
void UART_R (void) interrupt 4  using 1 
{
 unsigned char ch;  //定义串口接收数据变量 
 //LED=!LED;


 RI = 0;         //令接收中断标志位为 0(软件清零) 
 ch = SBUF;   //将接收到的数据送入变量 UART_data 
 putchar(ch);

}

int i2s_wait_low()
{
int i;
for(i=0;i {
if(I2CsCLK==0)
{
i2c_timeout=i;
return i;
}
}
return -1;
}


int i2s_wait_high()
{
int i;
for(i=0;i {
if(I2CsCLK==1)
{
return i;
}
}
return -1;
}

int i2s_send_ack()
{

//int i;

//低电平变化
i2s_wait_low();
I2CsDAT=0;

//高电平稳定
i2s_wait_high();

return 0;
}

int i2s_read_ack()
{

//int i;

//低电平变化
i2s_wait_low();

//高电平稳定
i2s_wait_high();

return (I2CsDAT==0);
}


void i2s_stop()
{
int i;
i2s_wait_high();
for(i=0;i {
if(I2CsCLK==0)
{
LED=0;
I2CsDAT=1;
return;
}
}
}
char i2s_read_byte(unsigned char * pbyte)
{
char i;
//int ret;
unsigned char byte;
for(i=0;i<8;i++)
{
if(i2s_wait_low()<0)
{//STOP位
I2CsDAT=1;
return -1;
}
I2CsDAT=1;

if(i2s_wait_high()<0)
{
return -1;
}
byte<<=1;
byte|=I2CsDAT;



}
*pbyte=byte;
return 0;
}

char i2s_send_byte(unsigned char * pbyte)
{
char i;
//int 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      15744  2013-06-13 11:35  加密+i2c\dragon

     文件       7030  2013-06-13 11:35  加密+i2c\dragon.hex

     文件         76  2013-06-13 11:35  加密+i2c\dragon.lnp

     文件      23834  2013-06-13 11:35  加密+i2c\dragon.M51

     文件      26568  2013-05-22 12:22  加密+i2c\dragon.plg

     文件      73540  2013-06-09 17:37  加密+i2c\dragon.uvgui.Administrator

     文件      73521  2013-06-08 09:23  加密+i2c\dragon.uvgui_Administrator.bak

     文件       6386  2013-06-09 17:37  加密+i2c\dragon.uvopt

     文件      13777  2013-05-22 19:31  加密+i2c\dragon.uvproj

     文件       6389  2013-06-08 09:23  加密+i2c\dragon_uvopt.bak

     文件      13622  2013-05-21 22:24  加密+i2c\dragon_uvproj.bak

     文件       7715  2013-06-13 11:35  加密+i2c\main.c

     文件      15238  2013-06-13 11:35  加密+i2c\main.LST

     文件      14625  2013-06-13 11:35  加密+i2c\main.OBJ

     文件       4800  2013-06-13 11:35  加密+i2c\PUTCHAR.lst

     文件       1093  2013-06-13 11:35  加密+i2c\PUTCHAR.obj

     文件       6376  2009-05-07 14:37  加密+i2c\STARTUP.A51

     文件      14048  2013-06-13 11:35  加密+i2c\STARTUP.LST

     文件        749  2013-06-13 11:35  加密+i2c\STARTUP.OBJ

     目录          0  2013-06-13 11:53  加密+i2c

----------- ---------  ---------- -----  ----

               325131                    20


评论

共有 条评论