新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于I2C总线的银行排队系统接口设计

基于I2C总线的银行排队系统接口设计

作者: 时间:2013-04-19 来源:网络 收藏

3 软件模拟的实现方法

原理图如图4所示,由P3.4、P3.3模拟串行的SDA端及SCL输出端,构成模拟的IIC串行。总线功能的实现除了简单硬件连接,大部分功能通过软件模拟来实现,下面给出部分总线常用子程序,这些子程序通用性较好,基本适用于大部分IIC总线的芯片[2-3]。

3.1 总线启动、停止函数

void IIC_Start(void)
{
IIC_SCL=1;
IIC_Delay();
IIC_SDA=1;
IIC_Delay();
IIC_SDA=0;
IIC_Delay();
IIC_SCL=0;
IIC_Delay();
}
void IIC_Stop(void)
{
IIC_SDA=0;
IIC_Delay();
IIC_SCL=1;
IIC_Delay();
IIC_SDA=1;
IIC_Delay();
IIC_SCL=1;
IIC_Delay();
}

3.2 从IIC器件指定位置读若干字节

bit RetBit;
unsigned char i;
IIC_Start(); /*启动总线*/
RetBit=IIC_Write_Byte(Device_Addr);
/*发送器件从地址*/ if(RetBit==0)
return(0);
RetBit=IIC_Write_Byte(Mem_Addr);
/*发送器件子地址*/ if(RetBit==0)
return(0);
IIC_Stop(); /*结束总线*/    IIC_Start(); /*重新启动总线*/
RetBit=IIC_Write_Byte(Device_Addr+1);
if(RetBit==0)
return(0);
for(i=0;iNum-1;i++)
{
*DataPointer=IIC_Read_Byte(); /*接收数据*/
IIC_Ack(0); /*发送应答位*/
DataPointer++;
}
*DataPointer=IIC_Read_Byte(); /*接收数据*/
IIC_Ack(1);
IIC_Stop(); /*结束总线*/
return(1);

3.3 向IIC发送1字节函数

bit Ack_Flag;
unsigned char i;
for(i=0;i8;i++) /*要传送的数据长度为8位*/
{
IIC_SDA=(bit)((Datai)0x80);
/*依次判断待发送位高低*/
IIC_Delay();
IIC_SCL=1;
/*置时钟线为高,通知E2PROM开始接收数据位*/
IIC_Delay();
IIC_SCL=0;
IIC_Delay();
}
IIC_SDA=1;
/*8位数据发送完后释放数据线,准备接收应答位*/
IIC_Delay();
IIC_SCL=1;
IIC_Delay();
if(IIC_SDA)
Ack_Flag=0; /* E2PROM无应答*/    else
Ack_Flag=1; /*数据成功发送*/
IIC_SCL=0;
IIC_Delay();
return(Ack_Flag); /*返回E2PROM应答标志*/

3.4 系统仿真

经过软件分析后,即可利用keil c集成开发环境uVision2对用C语言编写的程序进行编译、调试,通过JTAG口将编译好的程序烧写到单片机中,完成所需功能。系统经过仿真测试,得到入口处摆放机供储户索取排队编号,打印编号;柜台内工作人员通过按钮可以实现叫号;叫号后在大屏幕显示上显示并通过喇叭播放叫号信息;工作人员可以通过后台进行系统的相关设置。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭