新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于I2C總線的銀行排隊(duì)系統(tǒng)接口設(shè)計(jì)

        基于I2C總線的銀行排隊(duì)系統(tǒng)接口設(shè)計(jì)

        作者: 時(shí)間:2013-04-19 來源:網(wǎng)絡(luò) 收藏

        3 軟件模擬的實(shí)現(xiàn)方法

        原理圖如圖4所示,由P3.4、P3.3模擬串行的SDA端及SCL輸出端,構(gòu)成模擬的IIC串行。總線功能的實(shí)現(xiàn)除了簡(jiǎn)單硬件連接,大部分功能通過軟件模擬來實(shí)現(xiàn),下面給出部分總線常用子程序,這些子程序通用性較好,基本適用于大部分IIC總線的芯片[2-3]。

        3.1 總線啟動(dòng)、停止函數(shù)

        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(); /*啟動(dòng)總線*/
        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(); /*結(jié)束總線*/    IIC_Start(); /*重新啟動(dòng)總線*/
        RetBit=IIC_Write_Byte(Device_Addr+1);
        if(RetBit==0)
        return(0);
        for(i=0;iNum-1;i++)
        {
        *DataPointer=IIC_Read_Byte(); /*接收數(shù)據(jù)*/
        IIC_Ack(0); /*發(fā)送應(yīng)答位*/
        DataPointer++;
        }
        *DataPointer=IIC_Read_Byte(); /*接收數(shù)據(jù)*/
        IIC_Ack(1);
        IIC_Stop(); /*結(jié)束總線*/
        return(1);

        3.3 向IIC發(fā)送1字節(jié)函數(shù)

        bit Ack_Flag;
        unsigned char i;
        for(i=0;i8;i++) /*要傳送的數(shù)據(jù)長(zhǎng)度為8位*/
        {
        IIC_SDA=(bit)((Datai)0x80);
        /*依次判斷待發(fā)送位高低*/
        IIC_Delay();
        IIC_SCL=1;
        /*置時(shí)鐘線為高,通知E2PROM開始接收數(shù)據(jù)位*/
        IIC_Delay();
        IIC_SCL=0;
        IIC_Delay();
        }
        IIC_SDA=1;
        /*8位數(shù)據(jù)發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位*/
        IIC_Delay();
        IIC_SCL=1;
        IIC_Delay();
        if(IIC_SDA)
        Ack_Flag=0; /* E2PROM無應(yīng)答*/    else
        Ack_Flag=1; /*數(shù)據(jù)成功發(fā)送*/
        IIC_SCL=0;
        IIC_Delay();
        return(Ack_Flag); /*返回E2PROM應(yīng)答標(biāo)志*/

        3.4 系統(tǒng)仿真

        經(jīng)過軟件分析后,即可利用keil c集成開發(fā)環(huán)境uVision2對(duì)用C語(yǔ)言編寫的程序進(jìn)行編譯、調(diào)試,通過JTAG口將編譯好的程序燒寫到單片機(jī)中,完成所需功能。系統(tǒng)經(jīng)過仿真測(cè)試,得到入口處擺放機(jī)供儲(chǔ)戶索取排隊(duì)編號(hào),打印編號(hào);柜臺(tái)內(nèi)工作人員通過按鈕可以實(shí)現(xiàn)叫號(hào);叫號(hào)后在大屏幕顯示上顯示并通過喇叭播放叫號(hào)信息;工作人員可以通過后臺(tái)進(jìn)行系統(tǒng)的相關(guān)設(shè)置。


        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 喀喇| 上犹县| 淄博市| 德兴市| 疏附县| 潞城市| 铜鼓县| 洛隆县| 同德县| 曲水县| 兴义市| 通山县| 连平县| 宾阳县| 黄石市| 泸溪县| 安庆市| 晋城| 桃园市| 彝良县| 陆良县| 田东县| 正镶白旗| 叶城县| 新野县| 时尚| 安达市| 绥宁县| 西盟| 龙泉市| 新野县| 保山市| 千阳县| 噶尔县| 琼结县| 丹巴县| 贵港市| 万州区| 夏邑县| 梅河口市| 宽城|