新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機LCD實驗1

        單片機LCD實驗1

        作者: 時間:2016-11-21 來源:網絡 收藏
        代碼如下:
        //filename:global.h
        #include
        //#include
        //#include
        #define uchar unsigned char
        #define uint unsigned int
        //filename:T6963C.H
        #define DATA_PORT P0
        //-------------------------------------------
        // 管腳定義
        //------------------------------------------
        sbit CD=P2^0; //數據(L)/命令(H)選擇
        sbit WRIT=P2^1; //寫,低電平有效
        sbit CE=P2^2; //使能,低電平有效
        //===========================================
        // 函數聲明
        //-------------------------------------------
        void delay_lcd(char);
        void write_data(char);
        void write_text(char);
        void write_com(char);
        void clr_lcd(char,char,int);
        void lcd_init_graph();
        void lcd_init_text();
        void text_out(char a);
        int asc2lcd(int asc);
        //--------------------------------------------
        // 寫數據函數
        //--------------------------------------------
        void write_data(char dat){
        CD=0; //數據
        CE=0; //LCD使能
        WRIT=0; //寫
        DATA_PORT=dat; //把數據送到P口
        delay_lcd(1); //當晶振較高時加延時
        WRIT=1; //關寫
        CE=1; //關使能
        }
        //--------------------------------------------
        // 寫數據函數
        //--------------------------------------------
        void write_text(char text){
        CD=0; //數據
        CE=0; //LCD使能
        WRIT=0; //寫
        DATA_PORT=text; //把數據送到P口
        delay_lcd(1); //當晶振較高時加延時
        WRIT=1; //關寫
        CE=1; //關使能
        }
        //--------------------------------------------
        // 寫命令函數
        //--------------------------------------------
        void write_com(char com){
        CD=1; //命令
        CE=0;
        WRIT=0;
        DATA_PORT=com;
        delay_lcd(1); //當晶振較高時加延時
        WRIT=1;
        CE=1;
        }
        void clr_lcd(char x,char y,int length){
        int i,place;
        place=x*30+y;
        write_data(place&0xff);
        write_data(place/256);
        write_com(0x24); //設置
        for(i=0;i
        write_data(0xff); //寫入空格,清屏
        write_com(0xb2); //關閉自動寫
        }
        //--------------------------------------------
        // LM4229初始化函數
        //--------------------------------------------
        void lcd_init_graph(){
        write_data(0); //圖形首地址
        write_data(0);
        write_com(0x42); //圖形首地址設置
        write_data(30);
        write_data(0);
        write_com(0x43); //圖形區域設置
        write_com(0x80); //設置為OR模式
        write_com(0x98); //關閉文本顯示,開圖形顯示
        }
        //--------------------------------------------
        // LM4229初始化函數
        //--------------------------------------------
        void lcd_init_text(){
        write_data(0);
        write_data(0);
        write_com(0x40); //set text home address
        write_data(30);
        write_data(0);
        write_com(0x41); //set text area;
        write_com(0x84); //text attribute mode
        write_com(0x94); //text on graphic off
        }
        void cursor_on(){
        write_com(0xA0);
        write_com(0x93);
        write_com(0x94); //text on graphic off
        }
        void print_text(char x,char y,char a){
        int place;
        place=x*30+y;
        write_data(place&0xff); //寫地址低8位
        write_data(place/256); //寫地址高8位
        write_com(0x24); //設置地址
        write_com(0xb0); //設置數據自動寫
        write_text(a);
        write_com(0xb2); //自動復位
        }
        void text_out(char a){
        write_com(0xb0); //設置數據自動寫
        write_text(a);
        write_com(0xb2); //自動復位
        }
        void text_location(int place){
        write_data(place&0xff); //寫地址低8位
        write_data(place/256); //寫地址高8位
        write_com(0x24); //設置地址
        }
        void print_string(char* str){
        int i;
        int ch;
        for(i=0;str[i]!=0;i++)
        {
        ch=asc2lcd(str[i]);
        text_out(ch);
        }
        }
        //--------------------------------------------
        // 延時函數
        //--------------------------------------------
        void delay_lcd(uchar t){
        for(;t!=0; t--);
        }
        //===================================================
        int asc2lcd(int asc){
        uint r;
        r=asc-32;
        return r;
        }
        //latest revise:2010-2-11
        //by:alex shoal
        //email:alex.shoal@gmail.com
        main(){
        int place=5;
        char ch=0x00;
        lcd_init_text();
        text_location(place);
        print_string("Hello,china! ");
        while(1);
        }



        關鍵詞: 單片機LCD實

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 托克托县| 长乐市| 武定县| 陵水| 三亚市| 玉山县| 通道| 藁城市| 高邑县| 靖宇县| 卢湾区| 彭州市| 九寨沟县| 伊宁县| 托里县| 平泉县| 宜兴市| 平乡县| 逊克县| 乾安县| 榆中县| 浪卡子县| 措勤县| 宁陵县| 新巴尔虎左旗| 莱芜市| 奈曼旗| 和硕县| 柯坪县| 鄢陵县| 常州市| 金昌市| 古交市| 卓尼县| 太仓市| 邹平县| 定西市| 新巴尔虎左旗| 江华| 桦南县| 全椒县|