新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)_1602液晶自定義心形圖案

        51單片機(jī)_1602液晶自定義心形圖案

        作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏
        # include

        unsigned char table1[]={0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,
        0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
        0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
        0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,
        0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
        0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,
        0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,
        0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00};//心圖案
        #define CLEARSCREEN LCD_write_command(0x01)

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

        /**************定義接口************************/

        #define LCDIO P0
        sbit LCD1602_RS=P2^2;
        sbit LCD1602_RW=P2^1;
        sbit LCD1602_EN=P2^0;

        /**************定義函數(shù)************************/
        void LCD_write_command(unsigned char command);//寫入指令函數(shù)
        void LCD_write_dat(unsigned char dat);//寫入數(shù)據(jù)函數(shù)
        void LCD_set_xy( unsigned char x, unsigned char y );//設(shè)置顯示位置函數(shù)
        void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat);//顯示一個(gè)字符函數(shù)
        void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s);//顯示字符串函數(shù)
        void LCD_init(void);//初始化函數(shù)
        void delay_nms(unsigned int n);//延時(shí)函數(shù)
        /********************************************/

        /************初始化函數(shù)****************/
        void LCD_init(void)
        {
        CLEARSCREEN;//clear screen
        LCD_write_command(0x38);//set 8 bit data transmission mode
        LCD_write_command(0x0c);//open display (enable lcd display)
        LCD_write_command(0x80);//set lcd first display address
        CLEARSCREEN;//clear screen
        }
        /****************************************************/

        /**************寫指令函數(shù)********************************/
        void LCD_write_command(unsigned char command)
        {
        LCDIO=command;
        LCD1602_RS=0;
        LCD1602_RW=0;
        LCD1602_EN=0;
        LCD1602_EN=1;
        delay_nms(10);
        }
        /***************************************************/
        /****************寫數(shù)據(jù)函數(shù)************************/
        void LCD_write_dat(unsigned char dat)
        {
        LCDIO=dat;
        LCD1602_RS=1;
        LCD1602_RW=0;
        LCD1602_EN=0;
        delay_nms(1);
        LCD1602_EN=1;
        }
        /****************************************************/

        /***************設(shè)置顯示位置**************************/
        void LCD_set_xy( unsigned char x, unsigned char y )
        {
        unsigned char address;
        if (y == 1)
        address = 0x80 + x;
        else
        address =0xc0+ x;
        LCD_write_command(address);
        }
        /***************************************************/

        /****************顯示一個(gè)字符**********************/
        void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat)
        {
        LCD_set_xy( x, y );
        LCD_write_dat(dat);
        }
        /**********************************************/

        /***************顯示字符串函數(shù)***************/
        void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s)
        {
        LCD_set_xy( X, Y );
        while (*s)
        {
        LCD_write_dat(*s);
        s ++;
        }
        }
        /***********************************************/

        /********** 延時(shí)**********************/
        void delay_nms(unsigned int n)
        {
        unsigned int i=0,j=0;
        for (i=n;i>0;i--)
        for (j=0;j<10;j++);
        }
        /**************************************/

        /***********主函數(shù)**************/
        void main(void)
        {
        unsigned char i,j,k,tmp;
        LCD_init();
        delay_nms(100);
        tmp=0x40;//設(shè)置CGRAM地址的格式字
        k=0;
        for(j=0;j<8;j++)
        {
        for(i=0;i<8;i++)
        {
        LCD_write_command(tmp+i); // 設(shè)置自定義字符的 CGRAM 地址
        delay_nms(2);
        LCD_write_dat(table1[k]); // 向CGRAM寫入自定義字符表的數(shù)據(jù)
        k++;
        delay_nms(2);
        }
        tmp=tmp+8;
        }
        LCD_dsp_string(1,1,"heart: ");//在第一行第一列顯示“heart”
        for (i=0;i<4;i++)
        {
        LCD_dsp_char( 10+i,1,i);//在第一行第10列位置顯示心圖案的上半部
        delay_nms(1);
        }
        for (i=4;i<8;i++)
        {
        LCD_dsp_char( 10+i-4,2,i);//在第二行第10列位置顯示心圖案的下半部
        delay_nms(1);
        }
        while (1);
        }
        /************************ 感謝陳青華老師的幫助********************************************/



        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 龙海市| 纳雍县| 岳阳县| 年辖:市辖区| 乳山市| 太和县| 内丘县| 顺平县| 阳新县| 托克逊县| 田东县| 白银市| 阿巴嘎旗| 凤冈县| 石阡县| 蓬安县| 岳池县| 中西区| 广东省| 鹤庆县| 镇康县| 防城港市| 玉林市| 罗江县| 资源县| 张家港市| 大丰市| 沭阳县| 比如县| 通江县| 建阳市| 西安市| 邹城市| 武宁县| 苗栗县| 汤原县| 灌阳县| 易门县| 阿拉尔市| 武邑县| 新昌县|