新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > pic單片機(jī)兩個(gè)IO口四線驅(qū)動(dòng)LCD1602

        pic單片機(jī)兩個(gè)IO口四線驅(qū)動(dòng)LCD1602

        作者: 時(shí)間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
        經(jīng)過多天調(diào)式,優(yōu)化程序。只用兩個(gè)IO端口驅(qū)動(dòng)74LS164擴(kuò)展成并口驅(qū)動(dòng)LCD1602(四線模式),這是個(gè)完整簡單的例子,可實(shí)現(xiàn)字符串左移200次,右移200次,不停的循環(huán)。現(xiàn)上傳與大家共享成果!//引入頭文件*********************************************************

        #include
        #include
        #include "delay.h"
        #include "delay.c"

        本文引用地址:http://www.104case.com/article/201611/323785.htm

        //熔絲配置***********************************************************
        __CONFIG(PROTECT & CPD & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO);

        //端口定義***********************************************************
        #define Port GPIO //端口址址
        #define Tris TRISIO //方向設(shè)置

        //腳位定義***********************************************************
        #define Dat GPIO4 //數(shù)據(jù)引腳
        #define Clk GPIO5 //時(shí)鐘引腳

        //顯示字符***********************************************************
        unsigned char TopChar[] = {"www.pic16.com "}; //
        unsigned char BotChar[] = {"ivws "}; //

        //*******************************************************************
        //函數(shù)名稱:PortInit();
        //輸入?yún)?shù):無
        //輸出參數(shù):無
        //功能描述:端口設(shè)置
        //建造日期:2008.12.08
        //********************************************************************
        void PortInit(void)
        {
        Port = 0x00; //端口設(shè)置
        Tris = 0x00;
        }

        //*******************************************************************
        //函數(shù)名稱:ConInit();
        //輸入?yún)?shù):無
        //輸出參數(shù):無
        //功能描述:定時(shí)器設(shè)置
        //建造日期:2008.12.08
        //*******************************************************************
        void ConInit(void)
        {
        OPTION = 0x00; //允許上拉
        CMCON = 0x07; //關(guān)比較器
        }

        //*******************************************************************
        //函數(shù)名稱: TxLs164(data);
        //輸入?yún)?shù):串行數(shù)據(jù)
        //輸出參數(shù):無
        //功能描述:串行發(fā)送數(shù)據(jù)
        //建造日期:2008.12.08
        //*******************************************************************
        void TxLs164(unsigned chardata)
        {
        unsigned char i;

        i = 6; //送出六位

        do
        {
        Dat = 0; //數(shù)據(jù)清零
        Clk = 1; //時(shí)鐘置位
        Clk = 0; //時(shí)鐘清零
        }
        while (--i); //循環(huán)發(fā)送

        i = 6; //送出六位

        do
        {
        Dat = 0; //先高后低

        if (data & 0x20) Dat = 1;

        Clk = 1; //時(shí)鐘置位
        data<<= 1; //數(shù)據(jù)左移
        Clk = 0; //時(shí)鐘清零
        }
        while (--i); //循環(huán)發(fā)送
        }

        //*******************************************************************
        //函數(shù)名稱: WriteData(data, rs);
        //輸入?yún)?shù):待寫數(shù)據(jù), 0 = 指令,1 = 數(shù)據(jù)
        //輸出參數(shù):無
        //功能描述:數(shù)據(jù)寫入LCD
        //建造日期:2008.12.08
        //*******************************************************************
        void WriteData(unsigned char data, unsigned char rs)
        {
        unsigned char temp;

        temp =data>> 4; //取高四位
        temp |= 1 << 5; //使用置位

        if (rs & 0x01) temp |= 1 << 4; //數(shù)據(jù)選擇

        TxLs164(temp); //寫高四位
        Dat = 1; //使能下沿
        Dat = 0;
        DelayUs(50); //延時(shí)等待

        temp =data& 0x0f; //取低四位
        temp |= 1 << 5; //使用置位

        if (rs & 0x01) temp |= 1 << 4; //數(shù)據(jù)選擇

        TxLs164(temp); //寫高四位
        Dat = 1; //使能下沿
        Dat = 0;
        DelayUs(50); //延時(shí)等待
        }

        //*******************************************************************
        //函數(shù)名稱:AddrSite(x, y);
        //輸入?yún)?shù):坐標(biāo)參數(shù)
        //輸出參數(shù):無
        //功能描述:設(shè)置顯示地址
        //建造日期:2008.12.08
        //*******************************************************************
        void AddrSite(unsigned char x, unsigned char y)
        {
        x &= 0x3f; //截取地址

        if (y == 0)
        {
        WriteData((0x80 | x), 0); //首行地址
        }

        else
        {
        WriteData((0xc0 | x), 0); //次行地址
        }
        }

        //*******************************************************************
        //函數(shù)名稱:PrintChar(*s);
        //輸入?yún)?shù):緩沖區(qū)首址
        //輸出參數(shù):無
        //功能描述:字符串輸出顯示
        //建造日期:2008.12.08
        //*******************************************************************
        void PrintChar(unsigned char *s)
        {
        while(*s)
        {
        WriteData(*s, 1); //字符數(shù)據(jù)
        s++; //下個(gè)字符
        }
        }


        上一頁 1 2 下一頁

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 江安县| 宁蒗| 赣州市| 华池县| 昂仁县| 偃师市| 西昌市| 陕西省| 颍上县| 商城县| 广东省| 花莲县| 阳高县| 汝州市| 霞浦县| 沂源县| 安阳县| 莱阳市| 平遥县| 宜兰县| 纳雍县| 宜阳县| 姜堰市| 边坝县| 德安县| 博乐市| 天全县| 安图县| 剑阁县| 长丰县| 军事| 明光市| 德江县| 蛟河市| 东源县| 三河市| 衢州市| 莱西市| 青州市| 华容县| 田林县|