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

📄 电表.txt

📁 LPC932设计的电表程序。完整的设计代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
使用LPC932制作的一款电表---TOOLS  
日期:2005-7-31 14:29:40 人气:0 查看:[大字体 中字体 小字体]  
 
#include <REG932.h>
#include <Define.h>
#include <Stdio.h>
#include <Intrins.h>

///-----***-短延时-***-----//
void Delay(unsigned int count) reentrant
{
   unsigned int data i;
   unsigned char data j;
   for(i=0; i<count; i++)
   {
      for(j=0; j<5; j++)
      {
        ;
      }
   } 
}

///-----***-IIC-***-----///
unsigned char FgTimeout;
unsigned char IicByteRead(unsigned char device unsigned char address)      //读取指定器件指定地址中的数据
{
    unsigned char data 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 IicMuchByteRead(unsigned char Device unsigned char Address unsigned char DataLend)               //读取指定器件指定地址中的数据
{
    unsigned char i;                                                    //定义一个变量bytedata,用来存放数据    

    IicStart();                                                            //开始传送起始信号
    IicSentByte(Device);                                                //传送一字节(slave)地址
    IicSentByte(Address);                                                //传送一字节(address)地址
    IicStart();                                                            //开始传送起始信号
    IicSentByte(Device|0x01);                                            //传送读取信号
    for(i=0;i<DataLend-1;i++)    
    {
        IIcBuf[i]=IicReceiveByte();
        SendAcknowledge(0);
    }                                                                    //从slave端读取一个数据并存入变量bytedata                                                   //Master端送出确认的信号等于1
    IIcBuf[i]=IicReceiveByte();
    SendAcknowledge(1);
    IicStop();                                                            //传送停止信号

}
void IicByteWrite(unsigned char device unsigned char address unsigned char bytedata)//写数据到指定地址
{                                                                       //
    unsigned char i;                                                    //
    bit ack;                                                            //  

    FgTimeout=1;
    IicWP=0;                                                            //
    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;                                                          //
    }                                                                    //
    Delay(100);    //由200改为100                                                        //
    IicWP=1;

}
                                                                        //
unsigned char IicReceiveByte(void)                                        //从slave端读取一个数据*/
{
    unsigned char i;                                                    //*定义变量 i 和变量 bytedata */
    unsigned char bytedata=0;
    IicSDA=1;
    for(i=0;i<8;i++)                                                    //由于读的时一个字节的数据所以要循环8次*/
    {
        IicSCL=1;                                                        //先将SCL设定为1,并等待一定的时间*/
        IicWait();

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

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

        IicSCL=1;
                                                                    //SCL置位*/
        IicWait();                                                    //延时等候*/
        IicSCL=0;
                                                                    //SCL清零*/
        IicWait();                                                    //延时等候---SCL作“1”---“0”的变化*/
    }
    IicSDA=1;                                                                //SDA置位*/
    IicWait();                                                        //延时等候*/
    IicSCL=1;                                                                    //SCL置位*/
    IicWait();                                                        //延时等候---SDA先设定为1,SCL也设定为1,等待确认信号的出现*/
    ack=IicSDA;                                                            //读取确认信号*/
    IicSCL=0;
                                                                    //将SCL恢复为0电平*/
    IicWait();                                                        //延时等候*/
    return ack;                                                        //返回确认信号到原调用程序*/
}
void IicStart(void)                                                        //起始信号*/
{
    IicSDA=1;                                                            //数据线等于1*/
    IicSCL=1;                                                            //时钟线等于1*/
    IicWait();                                                        //延时等候*/
    IicSDA=0;                                                            //数据线等于0*/
    IicWait();                                                        //延时等候*/
    IicSCL=0;                                                            //时钟线等于0*/
}
void IicStop(void)                                                        //停止信号*/
{
    IicSDA=0;                                                            //数据线清零*/
    IicWait();                                                        //延时等候*/
    IicSCL=1;                                                            //时钟线置位*/
    IicWait();                                                        //延时等候*/
    IicSDA=1;                                                            //数据线置位*/
}
void IicWait(void)                                                        //等候
{
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    
    //去掉3个NOP
}
void SendAcknowledge(bit ack)                                                //应答信号*/
{
    IicSDA=ack;                                                            //发送应答信号ack*/
    //IicWait();
    IicSCL=1;                                                            //SCL作“1”到“0”的变化*/
    IicWait();
    IicSCL=0;
    //IicWait();
}
//-----***-1621-***-----//
void LcdStart(void)
{
    LcdCs=0;
    Delay(LcdDelay);
}

void LcdStop(void)
{

⌨️ 快捷键说明

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