電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 1915|回復(fù): 0
收起左側(cè)

單片機(jī)C語言實(shí)例-179-液晶12864并行

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2022-2-14 11:15:31 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
單片機(jī)C語言實(shí)例-179-液晶12864并行

/********************************************************************
* 文件名  : 12864液晶顯示
* 描述    :  
* 創(chuàng)建人  : 東流,2009年4月8日
* 版本號  : 2.0
***********************************************************************/
#include <reg52.h>
#include <string.h>

#define uchar unsigned char
#define uint  unsigned int

uchar code IC_DAT[];
uchar code pic1[];
uchar code pic2[];
uchar code pic3[];

sbit RS  = P2^5;
sbit WRD = P2^6;
sbit E   = P2^7;
sbit PSB = P2^2;
sbit RES = P2^4;

void TransferData(char data1,bit DI);
void display(void);
void display_grapic(void);
void delayms(uint n);
void DisplayLine(uchar line1,uchar line2);
void DisplayGraphic(uchar code *adder);
void delay(uint m);
void lcd_mesg(uchar code *adder1);

uchar code IC_DAT[]={
"     HOT-51     "  
"                "
"  單片機(jī)開發(fā)板  "
"    東流電子    "
};

uchar code IC_DAT2[]={
"  白日依山盡,  "                        //0x80
"  欲窮千里目,  "                        //0x90
"  黃河入海流。  "                        //0x88
"  更上一層樓。  "                        //0x98
};



void initinal(void)           //LCD字庫初始化程序
{
           delay(40);             //大于40MS的延時(shí)程序
           PSB=1;                 //設(shè)置為8BIT并口工作模式
           delay(1);              //延時(shí)
           RES=0;                 //復(fù)位
           delay(1);              //延時(shí)
           RES=1;                 //復(fù)位置高
           delay(10);
           TransferData(0x30,0);  //Extended Function Set :8BIT設(shè)置,RE=0: basic instruction set, G=0 :graphic display OFF
           delay(100);            //大于100uS的延時(shí)程序
           TransferData(0x30,0);  //Function Set
           delay(37);             ////大于37uS的延時(shí)程序
           TransferData(0x08,0);  //Display on Control
           delay(100);            //大于100uS的延時(shí)程序
           TransferData(0x10,0);  //Cursor Display Control光標(biāo)設(shè)置
           delay(100);            //大于100uS的延時(shí)程序
           TransferData(0x0C,0);  //Display Control,D=1,顯示開
           delay(100);            //大于100uS的延時(shí)程序
           TransferData(0x01,0);  //Display Clear
           delay(10);             //大于10mS的延時(shí)程序
           TransferData(0x06,0);  //Enry Mode Set,光標(biāo)從右向左加1位移動
           delay(100);            //大于100uS的延時(shí)程序
          }

/********************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void     initina2(void)           //LCD顯示圖片(擴(kuò)展)初始化程序
          {
           delay(40);             //大于40MS的延時(shí)程序
           PSB=1;                 //設(shè)置為8BIT并口工作模式
           delay(1);              //延時(shí)
           RES=0;                 //復(fù)位
           delay(1);              //延時(shí)
           RES=1;                 //復(fù)位置高
           delay(10);

           TransferData(0x36,0);  //Extended Function Set RE=1: extended instruction
           delay(100);            //大于100uS的延時(shí)程序
           TransferData(0x36,0);  //Extended Function Set:RE=1: extended instruction set
           delay(37);             ////大于37uS的延時(shí)程序
           TransferData(0x3E,0);  //EXFUNCTION(DL=8BITS,RE=1,G=1)
           delay(100);            //大于100uS的延時(shí)程序
           TransferData(0x01,0);  //CLEAR SCREEN
           delay(100);            //大于100uS的延時(shí)程序
          }

/********************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void    main(void)
     {
         while(1)
            {
                  initina2();            //調(diào)用LCD顯示圖片(擴(kuò)展)初始化程序

          DisplayGraphic(pic2);  //顯示圖片2
          delayms(200);                          

          initinal();                    //調(diào)用LCD字庫初始化程序
          delay(100);            //大于100uS的延時(shí)程序
          lcd_mesg(IC_DAT);      //顯示中文漢字1
          delayms(240);
          delayms(240);
          
          initinal();                    //調(diào)用LCD字庫初始化程序
          delay(100);            //大于100uS的延時(shí)程序
          lcd_mesg(IC_DAT2);     //顯示中文漢字2
          delayms(240);
                  delayms(240);
                  initinal();  
        }
      }

/********************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void   lcd_mesg(unsigned char code *adder1)
{
        unsigned char i;
        TransferData(0x80,0);  //Set Graphic Display RAM Address
        delay(100);
        for(i=0;i<32;i++)
                {
                          TransferData(*adder1,1);
                           adder1++;
                }

        TransferData(0x90,0);  //Set Graphic Display RAM Address
        delay(100);
        for(i=32;i<64;i++)
                {
                          TransferData(*adder1,1);
                           adder1++;
                }
}

/********************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void    TransferData(char data1,bit DI)  //傳送數(shù)據(jù)或者命令,當(dāng)DI=0是,傳送命令,當(dāng)DI=1,傳送數(shù)據(jù).
          {
            WRD=0;
            RS=DI;
            delay(1);
            P0=data1;
            E=1;
            delay(1);
            E=0;
           }

/********************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void    delayms(unsigned int n)            //延時(shí)10×n毫秒程序
                   {
                      unsigned int i,j;
                      for(i=0;i<n;i++)
                         for(j=0;j<2000;j++);
                   }

/********************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void    delay(unsigned int m)            //延時(shí)程序
                   {
                      unsigned int i,j;
                      for(i=0;i<m;i++)
                         for(j=0;j<10;j++);
                   }

/********************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void DisplayGraphic(unsigned char code *adder)
{

   int i,j;
//*******顯示上半屏內(nèi)容設(shè)置
   for(i=0;i<32;i++)              //
    {
      TransferData((0x80 + i),0); //SET  垂直地址 VERTICAL ADD
      TransferData(0x80,0);       //SET  水平地址 HORIZONTAL ADD
      for(j=0;j<16;j++)
       {
         TransferData(*adder,1);
         adder++;
       }
    }          
//*******顯示下半屏內(nèi)容設(shè)置
   for(i=0;i<32;i++)              //
    {
      TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD
      TransferData(0x88,0);       //SET 水平地址 HORIZONTAL ADD
      for(j=0;j<16;j++)
       {
         TransferData(*adder,1);
         adder++;
       }
    }
}


更多詳情參考附件文檔

游客,如果您要查看本帖隱藏內(nèi)容請回復(fù)

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表