📄 电表.txt
字号:
使用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 + -