⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 实用的源码.c

📁 一组实用的C51源代码,不是我作的,在网站上载下来的,也许对大家有用,感谢作者
💻 C
📖 第 1 页 / 共 5 页
字号:
//实用的程序 

//以下是我本人使用的程序!不敢独享!---YWBS
//增加---计数器---4个字节---最大99999999
//增加T9输入法---主程序
//增加程序---拼音输入
//增加程序---字节颠倒
//增加程序---串口命令的分类
//增加程序---DEC


//为方便大家请发信到huafang@china.com!!!
//来信很多在此向大家说明我的有时间回信,所以还没有收到的朋友请来信

//说明,我一定回给您的。

//工作愉快!





//IIC 

unsigned char FgTimeout;


unsigned char IicByteRead(unsigned char device,unsigned char address)    /*002---读取指定器件指定地址中的数据*/
{
    unsigned char bytedata;                    /*定义一个变量bytedata,用来存放数据*/

    IicStart();                                /*开始传送起始信号*/

    IicSentByte(device);                    /*传送一字节(slave)地址*/

    IicSentByte(address);                    /*传送一字节(address)地址*/
    IicStart();                                /*开始传送起始信号*/
    IicSentByte(device|0x01);                /*传送读取信号*/        
    bytedata=IicReceiveByte();                /*从slave端读取一个数据并存入变量bytedata*/
    SendAcknowledge(1);                        /*Master端送出确认的信号等于“1”*/
    IicStop();                                /*传送停止信号*/

        return bytedata;                        /*返回读出值bytedata给原调用程序*/
}

void IicByteWrite(unsigned char device,unsigned char address,unsigned char bytedata)/*003*/
{
    unsigned char i;
    bit ack;

    FgTimeout=1;
    for(i=0;i<10;i++)
    {
        IicStart();

        ack=IicSentByte(device);
        if(ack==1)
        {
            IicStop();
            continue;
        }

        ack=IicSentByte(address);
        if(ack==1)
        {
            IicStop();
            continue;
        }

        ack=IicSentByte(bytedata);
        if(ack==1)
        {
            IicStop();
            continue;
        }

        IicStop();
        FgTimeout=0;
        if(ack==0)
        break;
    }
    DelayX1ms(10);

}

unsigned char IicReceiveByte(void)            /*004从slave端读取一个数据*/
{
    unsigned char i;                        /*定义变量 i 和变量 bytedata */
    unsigned char bytedata=0x00;

    for(i=0;i<8;i++)                        /*由于读的时一个字节的数据所以要循环8次*/
    {
        ISCL=1;                                /*先将SCL设定为1,并等待一定的时间*/
        IicWait();

        bytedata<<=1;                        /*先将数据变量bytedata左移1位---*/
        if (ISDA) bytedata |=0x01;            /*---此时如果SDA=“1”则将接受到的数据加(bit0=1)1---*/
                                            /*---否则自动清楚为0*/
        ISCL=0;                                /*SCL恢复为0,并等待一定的时间*/
        IicWait();
    }
    return bytedata;                        /*返回调用程序*/
}

unsigned char IicSentByte(unsigned char bytedata)    /*005传送一个 Byte 数据到 slave */
{
    unsigned char i;                        /*定义一个变量 i */
    bit ack;                                /*定义一个变量 ack */


    for(i=0;i<8;i++)                        /*循环8次*/
    {
        if(bytedata & 0x80)
        {                    /*如果bytedata和0x80作AND逻辑运算等于0x80---*/
            ISDA=1;
                    /*---即表示位7等于1则条件成立---*/
        }
        else
        {
            ISDA=0;
                    /*---所以设定SDA=1,否则清除SDA=0*/
        }
        bytedata <<=1;                        /*每传送1位,则须将待传送的数据左移1位,以便继续测试下1位*/
        IicWait();                            /*延时等候*/

        ISCL=1;
                        /*SCL置位*/
        IicWait();                            /*延时等候*/
        ISCL=0;
                        /*SCL清零*/
        IicWait();                            /*延时等候---SCL作“1”---“0”的变化*/
    }
    ISDA=1;
            /*SDA置位*/
    IicWait();                /*延时等候*/
    ISCL=1;
            /*SCL置位*/
    IicWait();                /*延时等候---SDA先设定为1,SCL也设定为1,等待确认信号的出现*/
    ack=ISDA;                /*读取确认信号*/
    ISCL=0;
            /*将SCL恢复为0电平*/
    IicWait();                /*延时等候*/
    return ack;                /*返回确认信号到原调用程序*/
}

void iicStart(void)                            /*006起始信号*/
{
    ISDA=1;                                    /*数据线等于1*/
    ISCL=1;                                    /*时钟线等于1*/
    IicWait();                                /*延时等候*/
    ISDA=0;                                    /*数据线等于0*/
    IicWait();                                /*延时等候*/
    ISCL=0;                                    /*时钟线等于0*/
}

void IicStop(void)                            /*007停止信号*/
{
    ISDA=0;                                    /*数据线清零*/
    IicWait();                                /*延时等候*/
    ISCL=1;                                    /*时钟线置位*/
    IicWait();                                /*延时等候*/
    ISDA=1;                                    /*数据线置位*/
}

void IicWait(void)                            /*008*/
{
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    
    
}
void SendAcknowledge(bit ack)                /*009应答信号*/
{
    ISDA=ack;                                /*发送应答信号ack*/
    ISCL=1;                                    /*ISCL作“1”到“0”的变化*/
    IicWait();
    ISCL=0;
}



 

//HEX-BCD 

char HexBcd(char Byte)
{
    signed char i,j;                    /*定义减数i,被减数j,相减蚀锡k,余数h*/
    EA=0;
    i=0;
    j=Byte;
    while(j>=0x0a)
    {
        j=j-0x0a;
        i=i+1;
    }

         


    switch(i)        /*命令的分类*/
    {
        case 1 :    /*主机对从机写数据。*/
                    Byte=0x10+j;
        break;
        case 2 :    /*主机对从机读数据。*/
                    Byte=0x20+j;        
        break;
        case 3 :    /*主机要求从机自检。*/
                    Byte=0x30+j;        
        break;
        case 4 :
                    Byte=0x40+j;
        break;
        case 5 :
                    Byte=0x50+j;
        break;
        case 6 :
                    Byte=0x60+j;
        break;
        case 7 :
                    Byte=0x70+j;
        break;
        case 8 :
                    Byte=0x80+j;
        break;
        case 9 :
                    Byte=0x90+j;
        break;
        default :
                            
        break;
    }
    return Byte;
    EA=1;
}




//68 10 10 68 10 10 10 10 10 10 10 10 10 10 a0 16




if(intserialcounter>=5)
    {
        if(databuf[1]==0x68)
        {
            
                if(databuf[2]==databuf[3])
                {
                    if(databuf[4]==0x68)
                    {
                        for(i=0;i<databuf[2];i++)
                        {
                            jyh=jyh+databuf[5+i];
                        }
                        if(jyh==databuf[4+databuf][3]]);
                        {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -