基于I2C總線的銀行排隊系統(tǒng)接口設計
排隊系統(tǒng)原理圖如圖4所示,由P3.4、P3.3模擬串行總線的SDA端及SCL輸出端,構成模擬的IIC串行總線系統(tǒng)??偩€功能的實現(xiàn)除了簡單硬件連接,大部分功能通過軟件模擬來實現(xiàn),下面給出部分總線常用子程序,這些子程序通用性較好,基本適用于大部分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器件指定位置讀若干字節(jié)
bit RetBit;
unsigned char i;
IIC_Start(); /*啟動總線*/
RetBit=IIC_Write_Byte(Device_Addr);
/*發(fā)送器件從地址*/ if(RetBit==0)
return(0);
RetBit=IIC_Write_Byte(Mem_Addr);
/*發(fā)送器件子地址*/ 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); /*發(fā)送應答位*/
DataPointer++;
}
*DataPointer=IIC_Read_Byte(); /*接收數據*/
IIC_Ack(1);
IIC_Stop(); /*結束總線*/
return(1);
3.3 向IIC發(fā)送1字節(jié)函數
bit Ack_Flag;
unsigned char i;
for(i=0;i8;i++) /*要傳送的數據長度為8位*/
{
IIC_SDA=(bit)((Datai)0x80);
/*依次判斷待發(fā)送位高低*/
IIC_Delay();
IIC_SCL=1;
/*置時鐘線為高,通知E2PROM開始接收數據位*/
IIC_Delay();
IIC_SCL=0;
IIC_Delay();
}
IIC_SDA=1;
/*8位數據發(fā)送完后釋放數據線,準備接收應答位*/
IIC_Delay();
IIC_SCL=1;
IIC_Delay();
if(IIC_SDA)
Ack_Flag=0; /* E2PROM無應答*/ else
Ack_Flag=1; /*數據成功發(fā)送*/
IIC_SCL=0;
IIC_Delay();
return(Ack_Flag); /*返回E2PROM應答標志*/
3.4 系統(tǒng)仿真
經過軟件分析后,即可利用keil c集成開發(fā)環(huán)境uVision2對用C語言編寫的程序進行編譯、調試,通過JTAG口將編譯好的程序燒寫到單片機中,完成所需排隊功能。系統(tǒng)經過仿真測試,得到銀行入口處擺放排隊機供儲戶索取排隊編號,打印編號;銀行柜臺內工作人員通過按鈕可以實現(xiàn)叫號;叫號后在大屏幕顯示上顯示并通過喇叭播放叫號信息;銀行工作人員可以通過后臺進行系統(tǒng)的相關設置。
評論