久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1822|回復: 0
打印 上一主題 下一主題
收起左側

液晶控制芯片ST7920驅動源文件

[復制鏈接]
跳轉到指定樓層
樓主
ID:625484 發表于 2021-3-23 11:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/***********************************************************************
//                                                液晶控制芯片ST7920驅動源文件                                        *
//                                                                                                                                                *
//硬件連接說明:                                                                                                                 *
//                                                                                                                                                *
//                                RS(CS)    -----------------------------  P3^1                        *
//                                R/W(STD)  -----------------------------  P3^4                        *
//                                E(SCLK)   -----------------------------  P3^5                        *
//                                PSB       -----------------------------  P0^1                        *
//                                RST       -----------------------------  P0^0                        *
//                                DB0       -----------------------------  P1^0                        *
//                                DB1       -----------------------------  P1^1                        *
//                                DB2       -----------------------------  P1^2                        *
//                                DB3       -----------------------------  P1^3                        *
//                                DB4       -----------------------------  P1^4                        *
//                                DB5       -----------------------------  P1^5                        *
//                                DB6       -----------------------------  P1^6                        *
//                                DB7(BUSY) -----------------------------  P1^7                        *
//                                                                                                                                                *
//***********************************************************************

#include <reg52.h>
#include<intrins.h>
#include<string.h>
#define uchar unsigned char
#define uint  unsigned int

#define  COUNT    0x10

//每行的首地址,基于RT12864-4M型液晶
#define LINE_ONE_ADDRESS   0x80
#define LINE_TWO_ADDRESS   0x90
#define LINE_THREE_ADDRESS 0x88
#define LINE_FOUR_ADDRESS  0x98

//基本指令集預定義
#define DATA                       1                 //數據位
#define COMMAND                    0                         //命令位
#define        CLEAR_SCREEN               0x01                  //清屏       
#define        ADDRESS_RESET              0x02                //地址歸零         
#define        BASIC_FUNCTION                  0x30                //基本指令集
#define        EXTEND_FUNCTION                   0x34                //擴充指令集

//擴展指令集預定義
#define        AWAIT_MODE                        0x01                 //待命模式       
#define ROLLADDRESS_ON                0x03                //允許輸入垂直卷動地址
#define IRAMADDRESS_ON                0x02                //允許輸入IRAM地址       
#define        SLEEP_MODE                        0x08                 //進入睡眠模式
#define        NO_SLEEP_MODE                0x0c                 //脫離睡眠模式
#define GRAPH_ON                        0x36                //打開繪圖模式
#define GRAPH_OFF                        0x34                //關閉繪圖模式


//并行位定義
sbit RS=P3^1;
sbit RW=P3^4;
sbit E= P3^5;
sbit BUSY=P1^7;

//控制位定義
sbit PSB = P2^3;        //串并選擇信號
sbit RST = P2^5;         //復位信號


uchar code Tab1[]="北京信息科技大學";//顯示在第一行
uchar code Tab2[]="信息與通信工程系";//顯示在第二行
uchar code Tab3[]="電子信息工程專業";//顯示在第三行
uchar code Tab4[]="全國電子設計大賽";//顯示在第四行
uchar code Tab5[]={0x54,0xf4};

//*******************************************
//*函數名稱:void Parallel_Check_Busy(void)        *
//*函數功能:并行方式查忙                                        *
//*形式參數:無                                                                *
//*形參說明:無                                                                *
//*返回參數:無                                                                *
//*使用說明:無                                                                *
//*******************************************
void Parallel_Check_Busy(void)
{
        bit temp;
          P1 = 0xff;        //輸入前置1
          RS = 0;                //指令
          RW = 1;                //讀模式
        do
        {       
            E  = 1;         //使能
                temp = BUSY;
              E  = 0;
        }
          while(temp);//等待不忙
}


//************************************************************************************
//*函數名稱:void Parallel_Write_LCD( bit b_Data_Command , unsigned char uc_Content ) *
//*函數功能:并行模式向LCD發送數據或指令                                                                                                 *
//*形式參數:bit b_Data_Command , unsigned char uc_Content                                                         *
//*形參說明:數據或指令的標志位,指令或數據的內容                                                                                 *
//*返回參數:無                                                                                                                                                 *
//*使用說明:無                                                                                                                                                 *
//************************************************************************************
void Parallel_Write_LCD( bit b_Data_Command , unsigned char uc_Content )
{
        Parallel_Check_Busy();
          if(b_Data_Command)
            {
                RS = 1;   //數據
            RW = 0;   //寫模式
            }
          else
            {
            RS = 0;   //指令
            RW = 0;   //寫模式
            }
          P1=uc_Content;//數據放到P1口上
          E = 1;
          _nop_();//很重要
        _nop_();
           _nop_();
    E = 0;                                                                                                               
}


//********************************************
//*函數名稱:uc_Parallel_Read_LCD_Data                 *
//*函數功能:并行讀LCD數據                                         *
//*形式參數:無                                                                 *
//*形參說明:無                                                                 *
//*返回參數:讀回的數據                                                 *
//*使用說明:無                                                                 *
//********************************************
uchar uc_Parallel_Read_LCD_Data(void)
{
        uchar uc_Content;
        Parallel_Check_Busy();
        P1 = 0xff;                        //輸入前置1
    RS = 1;                           //數據
    RW = 1;                           //讀模式
          E = 1;                                //使能
          uc_Content = P1;    //P1口的內容放到變量中
          E = 0;
        return uc_Content;
}

//*************************************************************
//*函數名稱:void Parallel_DDRAM_Address_Set(uchar ucDDramAdd) *
//*函數功能:設定DDRAM(文本區)地址到地址計數器AC                                  *
//*形式參數:uchar ucDDramAdd                                                                  *
//*行參說明:具體地址                                                                                  *
//*格式說明:                                                                                                  *
//*                RS        RW        DB7        DB6        DB5        DB4        DB3        DB2        DB1        DB0                                  *
//*                0        0        1        AC6        AC5        AC4        AC3        AC2        AC1        AC0                                  *
//*返回參數:無                                                                                                  *
//*使用說明:                                                                                                  *
//*        第一行地址:80H~8FH                                                                                  *
//*        第二行地址:90H~9FH                                                                                  *
//*        第三行地址:A0H~AFH                                                                                  *
//*        第四行地址:B0H~BFH                                                                                  *
//*************************************************************
void Parallel_DDRAM_Address_Set(uchar ucDDramAdd)
{
        Parallel_Write_LCD(COMMAND,BASIC_FUNCTION);                        //基本指令集
        Parallel_Write_LCD(COMMAND,ucDDramAdd);                                //設定DDRAM地址到地址計數器AC
}


//*************************************************************
//*函數名稱:void Parallel_CGRAM_Address_Set(uchar ucCGramAdd) *
//*函數功能:設定CGRAM(自定義字庫區)地址到地址計數器AC                  *
//*形式參數:uchar ucCGramAdd                                                                  *
//*形參說明:具體地址                                                                                  *
//*格式說明:                                                                                                  *
//*                RS        RW        DB7        DB6        DB5        DB4        DB3        DB2        DB1        DB0                                  *
//*                0        0        0        1        AC5        AC4        AC3        AC2        AC1        AC0                                  *
//*返回參數:無                                                                                                  *
//*使用說明:地址范圍為40H~3FH                                                                  *
//*************************************************************
void Parallel_CGRAM_Address_Set(uchar ucCGramAdd)
{
        Parallel_Write_LCD(COMMAND,BASIC_FUNCTION);                        //基本指令集
        Parallel_Write_LCD(COMMAND,ucCGramAdd);                                //設定CGRAM地址到地址計數器AC
}


//*******************************************************************************
//*函數名稱:void Parallel_GDRAM_Address_Set(uchar ucGDramAdd)                                        *
//*函數功能:設定GDRAM(圖形區)地址到地址計數器AC                                                                        *
//*形式參數:uchar ucGDramAdd                                                                                                        *
//*形參說明:具體地址值                                                                                                                        *
//*                RS        RW        DB7        DB6        DB5        DB4        DB3        DB2        DB1        DB0                                                                        *
//*                0        0        1        AC6        AC5        AC4        AC3        AC2        AC1        AC0                                                                        *
//*                先設定垂直位置再設定水平位置(連續寫入兩個字節完成垂直和水平位置的設置)        *       
//*                垂直地址范圍:AC6~AC0                                                                                                        *
//*                水平地址范圍:AC3~AC0                                                                                                        *
//*返回參數:無                                                                                                                                        *
//*使用說明:必須在擴展指令集的情況下使用                                                                                *
//*******************************************************************************
void Parallel_GDRAM_Address_Set(uchar ucGDramAdd)
{
        Parallel_Write_LCD(COMMAND,EXTEND_FUNCTION);                        //擴展指令集
        Parallel_Write_LCD(COMMAND,ucGDramAdd);               
}



//*******************************************
//*函數名稱:void Parallel_Init_LCD(void)        *
//*函數功能:并行初始化LCD                                        *
//*形式參數:無                                                                *
//*形參說明:無                                                                *
//*返回參數:無                                                                *
//*使用說明:無                                                                *
//*******************************************
void Parallel_Init_LCD(void)
{
          RST = 1;                                                                        //復位后拉高,停止復位
          PSB = 1;                                                                        //選擇并行傳輸模式               
          Parallel_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令動作   
          Parallel_Write_LCD(COMMAND,CLEAR_SCREEN);          //清屏,地址指針指向00H
          Parallel_Write_LCD(COMMAND,0x06);                      //光標的移動方向
          Parallel_Write_LCD(COMMAND,0x0c);                          //開顯示,關游標

}



//********************************************************
//*函數名稱:void Parallel_Clear_Ram(void)                     *
//*函數功能:并行清屏函數                                                     *
//*形式參數:無                                                                             *
//*形參說明:無                                                                              *
//*返回參數:無                                                                             *
//*使用說明:DDRAM填滿20H,并設定DDRAM AC到00H                 *
//*格式說明:                                                                                         *
//*                    RS        RW        DB7         DB6  DB5  DB4        DB3        DB2        DB1        DB0         *
//*                    0        0         0          0           0        0         0   0         0         1         *
//********************************************************
void Parallel_Clear_Ram(void)
{
        Parallel_Write_LCD(COMMAND,BASIC_FUNCTION);                        //基本指令集
        Parallel_Write_LCD(COMMAND,CLEAR_SCREEN);                        //清屏
}


//*****************************************************
//*函數名稱:void Parallel_Graph_Mode_Set(bit bSelect) *
//*函數功能:打開或關閉繪圖顯示                                                  *
//*形式參數:bit bSelect                                                                  *
//*形參說明:打開或關閉繪圖顯示的標志位,1打開,0關閉          *
//*格式說明:                                                                                  *
//*                RS        RW        DB7        DB6        DB5        DB4        DB3        DB2        DB1        DB0                  *
//*                0        0        0        0        1        DL        X        RE         G         X                  *
//*                DL:0,4bitMPU控制界面                                                  *
//*                DL:1,8bitMPU控制界面                                                  *
//*                RE:0,基本指令集                                                                  *
//*                RE:1,擴充指令集                                                                  *
//*                G :0,繪圖顯示OFF                                                          *
//*                G :1,繪圖顯示ON                                                                  *
//*返回參數:無                                                                                  *
//*使用說明:無                                                                                  *
//*****************************************************
void Parallel_Graph_Mode_Set(bit bSelect)
{
        Parallel_Write_LCD(COMMAND,EXTEND_FUNCTION);        //擴展指令集
        if(bSelect)
        {
        Parallel_Write_LCD(COMMAND,GRAPH_ON);                        //打開繪圖模式
        }
        else
        {
        Parallel_Write_LCD(COMMAND,GRAPH_OFF);                        //關閉繪圖模式       
        }
}


//*********************************************************************************
//*函數名稱:void Parallel_DisplayStrings_WithAddress(uchar ucAdd,uchar code *p)          *
//*函數功能:在(文本區)ucAdd指定的位置顯示一串字符(或是漢字或是ASCII或是兩者混合)  *
//*形式參數:uchar ucAdd,uchar code *p                                                                                          *
//*形參說明:指定的位置,要顯示的字符串                                                                                          *
//*地址必須是:80H~8FH,90H~9FH,88H~AFH,98H~BFH                                                                          *
//*返回參數:無                                                                                                                                          *
//*使用說明:使用之前要初始化液晶                                                                                                  *
//*********************************************************************************
void Parallel_DisplayStrings_WithAddress(uchar ucAdd,uchar code *p)
{
        uchar length;
        length = strlen(p);
    Parallel_Write_LCD(COMMAND,BASIC_FUNCTION);                          //基本指令動作   
        Parallel_DDRAM_Address_Set(ucAdd);
        for( ;  length ; length -- )
        Parallel_Write_LCD(DATA, *(p++));                                       
}



//****************************************************************
//*函數名稱:void Parallel_ImgDisplay(unsigned char code *img)         *
//*函數功能:全屏顯示128*64個象素的圖形                                                         *
//*形式參數:unsigned char code *img                                                                 *
//*形參說明:要顯示的圖形                                                                                 *
//*液晶屏坐標說明:                                                                                                 *
//*                 _______________________________________________                 *
//*                |(0,0)                                                         (7,0) |                 *
//*                |                                                                                        |                 *
//*                |                                                                                    |                 *
//*                |(0,31)                                                         (7,31)|                 *
//*                |(8,0)                                                         (15,0)|                 *
//*                |                                                                                        |                 *
//*                |                                                                                         |                 *
//*                |(8,31)                                 (15,31)|                 *
//*            |______________________________________________|                 *
//                                                                                                                                 *
//返回參數:無                                                                                                         *
//使用說明:此函數適用于RT12864-4M型液晶                                                         *
//****************************************************************
void Parallel_ImgDisplay(unsigned char code *img)
{
          uchar i,j;
    Parallel_Graph_Mode_Set(0x01); //先關閉圖形顯示功能
        for(j=0;j<32;j++)
           {
            for(i=0;i<8;i++)
              {
                      Parallel_Write_LCD(COMMAND,0x80+j);                //設定垂直坐標
                      Parallel_Write_LCD(COMMAND,0x80+i);                //設定水平坐標
                  Parallel_Write_LCD(DATA,img[j*16+i*2]);        //放入數據高字節
                      Parallel_Write_LCD(DATA,img[j*16+i*2+1]);        //放入數據低字節
             }
           }
          for(j=32;j<64;j++)
           {
            for(i=0;i<8;i++)
             {
                      Parallel_Write_LCD(COMMAND,0x80+j-32);
                      Parallel_Write_LCD(COMMAND,0x88+i);
                      Parallel_Write_LCD(DATA,img[j*16+i*2]);
                 Parallel_Write_LCD(DATA,img[j*16+i*2+1]);
             }
           }
        Parallel_Graph_Mode_Set(0x00);//最后打開圖形顯示功能
}



//******************************************************************************
//*函數名稱:void Parallel_ImgDisplayCharacter(uchar x,uchar y,uchar code *img) *
//*函數功能:使用繪圖的方法,在(x,y)處畫一個16*16點陣的圖案,也可以是字符                   *
//*形式參數:uchar x,uchar y,uchar code *img                                                                           *
//*                        x取值范圍:0~15                                                                                                           *
//*                        y取值范圍:0~32 (針對RT12864-4M型液晶)                                                       *
//*形參說明:坐標水平位置,坐標垂直位置,要顯示的圖形                                                           *
//*液晶屏坐標說明:                                                                                                                           *
//*                _______________128個象素______________________                                                   *
//*                |(0,0)                                                                     (7,0)|                                                   *
//*                |                                                                                          |                                                   *
//*        6        |                                                                                          |                                                   *
//*        4        |(0,31)                                                                        (7,31)|                                                   *
//*        個        |(8,0)                                                                        (15,0)|                                                   *
//*        象        |                                                                                          |                                                   *
//*        素        |                                                                                          |                                                   *
//*                |(8,31)________________________________(15,31)|                                                   *
//*                                                                                                                                                           *
//*返回參數:無                                                                                                                                   *
//*使用說明:此函數適用于RT12864-4M型液晶                                                                       *
//******************************************************************************
void Parallel_ImgDisplayCharacter(uchar x,uchar y,uchar code *img)
{
          uchar i;
        Parallel_Graph_Mode_Set(0x01);                //先關閉圖形顯示功能
    Parallel_Write_LCD(COMMAND,EXTEND_FUNCTION);
        for(i=0;i<16;i++)
           {

                 //        Parallel_Write_LCD(COMMAND,0x80+y+i);
                      //Parallel_Write_LCD(COMMAND,0x80+x);
                        Parallel_GDRAM_Address_Set(0x80+y+i);
                    Parallel_GDRAM_Address_Set(0x80+x);
                      Parallel_Write_LCD(DATA,img[i*2]);
                      Parallel_Write_LCD(DATA,img[i*2+1]);
           }
   Parallel_Graph_Mode_Set(0x00);                                //最后打開圖形顯示功能
}

                                                                    

void main(void)
{   
Parallel_Init_LCD();
while(1)
{

  Parallel_DisplayStrings_WithAddress(0x80,Tab1);
  Parallel_DisplayStrings_WithAddress(0x90,Tab2);
  Parallel_DisplayStrings_WithAddress(0x88,Tab3);
  Parallel_DisplayStrings_WithAddress(0x98,Tab4);
  //Parallel_ImgDisplay(Tab5);
  //Parallel_ImgDisplayCharacter(2,8,Tab1);
  //Parallel_ImgDisplay(Tab5);
}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91操操操| 黄在线| av一区在线| 午夜视频在线观看视频 | 日日夜夜91 | 精品一二三区 | 亚洲精品一区在线 | av色站| 中文字幕乱码一区二区三区 | 日韩免费三级 | 亚洲视频在线观看免费 | 日韩成人高清 | 成人在线精品 | 中文字幕在线观看 | 色网站在线免费观看 | 免费欧美 | 国产成人精品免高潮在线观看 | 亚洲欧美中文字幕在线观看 | 超碰导航 | 中文字幕亚洲区一区二 | 日韩在线视频免费观看 | 久久亚洲春色中文字幕久久久 | 精品日本久久久久久久久久 | 日韩精品一 | 欧美日韩亚洲视频 | 国产一级片免费在线观看 | 日韩av免费在线观看 | 伊人久久一区二区 | 国产福利在线播放麻豆 | 欧美日韩一区在线 | 国产精品欧美一区二区三区 | 天天曰天天曰 | 91精品国产一区二区三区 | 一级片在线视频 | 国产乱码精品一区二区三区av | 亚洲精品免费观看 | 亚洲最大的成人网 | 久久99精品久久久久久国产越南 | 精品国产伦一区二区三区观看方式 | 国产精品美女久久久久aⅴ国产馆 | 久久久激情视频 |