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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

LCD12864字庫系列單片機(jī)程序(控制器ST7920A)

[復(fù)制鏈接]
ID:147721 發(fā)表于 2016-11-13 23:18 | 顯示全部樓層 |閱讀模式
//LCD12864字庫系列(控制器ST7920A),單片機(jī):89S52,晶振:12M,
//并行連接方式,P2.0-RS,P2.1-RW,P2.2-E
//設(shè)計(jì):TIMEN HUANG
#include<reg52.h>
#include <intrins.h>
sbit RS=P3^2;//串口時(shí)為CS
sbit RW=P3^1; //串口為SID
sbit E=P3^0;  //串口為時(shí)鐘SCLK
sbit stop=P2^2;
sbit PSB=P3^4;
sbit REST=P3^3;

//以下是用<at89x51.h>頭文件的定義
/*
#define RS  P2_0
#define RW  P2_1 //定義引腳
#define E   P2_2
#define PSB P2_3
#define REST P2_4
#define Data  P1
#include<at89x51.h>
*/
#define BF    0x80 //用于檢測(cè)LCM狀態(tài)字中的Busy標(biāo)識(shí)
typedef unsigned int Uint;
typedef unsigned char Uchar;
//字符串例子
//"F1--English",也可以往里面寫入漢字碼,一個(gè)漢字由兩個(gè)碼組成
const Uchar F1English[]={0x46,0x31,0x2d,0x2d,0x45,0x6e,0x67,0x6c,0x69,0x73,0x68,0x00};
const Uchar lengthF1=6;  //字符串長度
//漢字,直接可以寫入字形
unsigned char code uctech[] = {"有限公司"};
const Uchar lengthCF3=8;

Uchar code TAB1[]={
/*--  調(diào)入了一幅圖像:D:\公司的文件\程序圖片\未命名11.bmp  --*/
/*--  寬度x高度=128x64  --*/
      0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x05,0xAE,0x90,0x00,0x00,0x00,0x00,0x00,
      0x95,0x55,0x48,0x80,0x00,0x00,0x00,0x00,
      0x2B,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
      0xA8,0x00,0x22,0x15,0x20,0x00,0x00,0x00,
      0x97,0xFB,0x00,0x00,0x00,0x00,0x00,0x00,
      0x45,0x55,0x08,0xA0,0x00,0x00,0x00,0x0A,
      0x6F,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,
      0xB2,0x80,0x40,0x00,0x04,0x40,0x00,0x00,
      0xBA,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
      0x4D,0x55,0x15,0x15,0x20,0x00,0x00,0x95,
      0xD5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0xFF,0xE8,0x40,0x40,0x00,0x00,0x00,0x4A,
      0xAA,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
      0xFF,0xFF,0x2A,0x00,0x40,0x00,0x00,0x15,
      0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0xFF,0xFD,0xD0,0xAA,0x01,0x00,0x00,0x25,
      0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
      0xFF,0xFF,0xB6,0x00,0x10,0x00,0x01,0x4A,
      0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0xFF,0xFF,0xFD,0xE8,0x40,0x00,0x00,0x11,
      0x00,0x24,0x84,0x00,0x00,0x00,0x00,0x00,
      0xAB,0xFF,0xFF,0x55,0x00,0x00,0x00,0x24,
      0x02,0x49,0x5E,0xA0,0x00,0x00,0x00,0x00,
      0x84,0xBF,0xFF,0xF4,0x88,0x00,0x00,0x00,
      0x10,0x05,0xFF,0xF4,0x00,0x00,0x00,0x00,
      0x29,0x0B,0xFF,0xFA,0x20,0x00,0x00,0x00,
      0x02,0xBF,0xFF,0xFC,0x00,0x00,0x00,0x00,
      0x44,0xA0,0x57,0xFD,0x80,0x00,0x00,0x00,
      0x08,0x5F,0xFF,0xFF,0x80,0x00,0x00,0x00,
      0x91,0x0A,0xAA,0xF6,0x50,0x00,0x00,0x00,
      0x41,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,
      0x44,0xA0,0x01,0x1B,0x84,0x00,0x00,0x00,
      0x26,0xFF,0xFF,0xFF,0x90,0x00,0x00,0x00,
      0x11,0x0A,0xAA,0x6D,0x68,0x00,0x00,0x00,
      0x0B,0xFB,0xFF,0xEF,0xE0,0x00,0x00,0x00,
      0xC4,0xA0,0x01,0x02,0x80,0x00,0x00,0x00,
      0x43,0xF1,0xFE,0x63,0xF0,0x00,0x00,0x00,
      0x15,0x55,0x54,0x55,0x6A,0x00,0x00,0x00,
      0x9F,0xE3,0xFC,0x87,0x38,0x00,0x00,0x00,
      0xCA,0xAB,0x91,0x00,0x90,0x00,0x00,0x00,
      0x07,0xC1,0xFA,0x2A,0x80,0x00,0x00,0x00,
      0x25,0xFF,0xFE,0x95,0x2A,0x00,0x00,0x00,
      0x2F,0x13,0xFE,0xFC,0x10,0x00,0x00,0x00,
      0x95,0xFF,0xFF,0xC0,0x50,0x00,0x00,0x00,
      0x0F,0x41,0xFF,0xF3,0x80,0x00,0x00,0x00,
      0x4F,0xFF,0xFF,0xF9,0x2A,0x00,0x00,0x00,
      0x9F,0x08,0xFF,0xD4,0x00,0x00,0x00,0x00,
      0xB3,0xFF,0xFF,0xFE,0x54,0x80,0x00,0x00,
      0x1E,0xA0,0x7F,0xA0,0x00,0x00,0x00,0x00,
      0x5F,0xFE,0x7F,0xFE,0xAA,0x00,0x00,0x00,
      0x5F,0x57,0xFE,0x00,0x00,0x00,0x00,0x00,
      0xAF,0xFD,0x7F,0xFF,0x94,0x80,0x00,0x00,
      0x1F,0xFE,0xE8,0x00,0x00,0x00,0x00,0x00,
      0x7F,0xFA,0x7F,0x5F,0xCA,0x00,0x00,0x00,
      0x3F,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
      0xAF,0xF1,0x7F,0xDE,0xF5,0x40,0x00,0x00,
      0x1A,0xA0,0x80,0x00,0x00,0x00,0x00,0x00,
      0xDF,0xF2,0x3F,0xFC,0xC2,0x00,0x00,0x00,
      0x50,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
      0x2F,0xFA,0xBF,0xFF,0xF4,0xA0,0x00,0x00,
      0x05,0x42,0x00,0x00,0x00,0x00,0x00,0x00,
      0x97,0xFE,0x3F,0xFF,0xE3,0x00,0x00,0x00,
      0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x68,0xFF,0xDF,0xD5,0x78,0x40,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x07,0x5F,0xFF,0x48,0x02,0x80,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0xD0,0xAA,0xF4,0xA0,0xAA,0x40,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x0A,0x45,0x09,0x05,0x11,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0xA1,0x28,0xA0,0x00,0x44,0x40,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x08,0x42,0x04,0x52,0x12,0x80,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0xA5,0x09,0x51,0x00,0x48,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x50,0x04,0x4A,0x12,0x80,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0xAA,0x05,0x50,0x21,0x48,0x20,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x90,0x02,0x84,0x12,0x80,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0xD4,0x05,0x48,0x10,0x48,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x81,0x20,0x00,0x02,0x02,0x80,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0xA4,0x84,0x92,0x48,0x94,0x40,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x48,0x10,0x00,0x00,0x21,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//這個(gè)是在串口時(shí)指令和數(shù)據(jù)之間的延時(shí)
/*
void delay10US(Uchar x)
{
   Uchar k;
for(k=0;k<x;k++);
}
*/
const Uchar delay=250;  //延時(shí)時(shí)間常數(shù)
static void Wait1ms(void)//延遲1 ms
{
  Uchar cnt=0;
  while (cnt<delay) cnt++;
}
//延遲n ms
void WaitNms(int n)
{
    Uchar i;
    for(i=1;i<=n;i++)
           Wait1ms();
}

void stopint(void)//中斷程序
{
if(stop==0)
while(1);
}

//**************************************************************************//
//以下是并口時(shí)才開的
//讀忙標(biāo)志,
void RDBF(void)
{
        Uchar temp;
        RS=0;        // RS=0
        RW=1;        // RW=1
        while(1)
        {
            P1=0xFF;      //數(shù)據(jù)線為輸入
            E=1;
        temp=P1;
        E=0;        // E=0
        if ((temp&0x80)==0) break;
    }        
}
//寫數(shù)據(jù)到指令寄存器

void WRCommand(Uchar comm)
{
        RDBF();
        RW=0;
        P1=comm;
        E=1;
        E=0;
}
//寫數(shù)據(jù)到數(shù)據(jù)寄存器
void WRData(Uchar TEMP)
{
        RDBF();
        RS=1;
        RW=0;
        P1=TEMP;
        E=1;
        E=0;
        stopint();
}

/////////////////////////////////////////////////////////////////////////////////
//以下是串口時(shí)開的讀寫時(shí)序
/*void SendByteLCD(Uchar WLCDData)
{
Uchar i;
for(i=0;i<8;i++)
{
if((WLCDData<<i)&0x80)RW=1;
else RW=0;
E=0;
E=1 ;
}
}
SPIWR(Uchar Wdata,Uchar WRS)
{
   SendByteLCD(0xf8+(WRS<<1));
   SendByteLCD(Wdata&0xf0);
   SendByteLCD((Wdata<<4)&0xf0);
}
void WRCommand(Uchar CMD)
{
  RS=0;
  RS=1;
  SPIWR(CMD,0);
  delay10US(90);//89S52來模擬串行通信,所以,加上89S52的延時(shí),
}
void WRData(Uchar Data)
{
  RS=0;
  RS=1;
  SPIWR(Data,1);

}
*/
/*******************************************************************/
//初始化LCD-8位接口
void LCDInit(void)
{  //        PSB=0; //串口
    PSB=1;//并口時(shí)選這個(gè),上一行取消
    REST=1;
    REST=0;
    REST=1;
          WRCommand(0x30);        //基本指令集,8位并行

        WRCommand(0x06);        //啟始點(diǎn)設(shè)定:光標(biāo)右移

        WRCommand(0x01);        //清除顯示DDRAM

        WRCommand(0x0C);        //顯示狀態(tài)開關(guān):整體顯示開,光標(biāo)顯示關(guān),光標(biāo)顯示反白關(guān)

        WRCommand(0x02);        //地址歸零        
}
//顯示數(shù)組字符串(顯示半寬字型16*8點(diǎn)陣)
void ShowQQChar(Uchar addr,Uchar *english,Uchar count)
{        
        Uchar i;
        WRCommand(addr);        //設(shè)定DDRAM地址
        for(i=0;i<count;)
        {        
            WRData(english[i*2]);
        WRData(english[i*2+1]);
                i++;
    }
}
//顯示連續(xù)字串(半寬字符)
void ShowNUMChar(Uchar addr,Uchar i,Uchar count)
{
     Uchar j;
        for(j=0;j<count;)
        {        
            WRCommand(addr);        //設(shè)定DDRAM地址
                WRData(i+j);
                j++;
                WRData(i+j);
                addr++;
                j++;
        }               
}
//自定義字符寫入CGRAM
void WRCGRAM(Uchar data1,Uchar data2,Uchar addr)
{     
      Uchar i;
      for(i=0;i<16;)
  {
      WRCommand(addr+i);          //設(shè)定CGRAM地址
      WRData(data1);
          WRData(data1);
      i++;
          WRCommand(addr+i);          //設(shè)定CGRAM地址
          WRData(data2);
          WRData(data2);
      i++;
  }  
}
//顯示自定義的字符,并把這個(gè)字符填滿全屏16*16
void ShowCGChar(Uchar addr,Uchar i)
{
     Uchar j;
        for(j=0;j<0x20;)
        {        
            WRCommand(addr+j);        //設(shè)定DDRAM地址
                WRData(0x00);
            WRData(i);
                j++;
        }               
}
void CLEARGDRAM(void)
{   
       Uchar j;
       Uchar i;
           WRCommand(0x34);
           WRCommand(0x36);
       for(j=0;j<32;j++)
  {
       WRCommand(0x80+j);
           WRCommand(0x80);//X坐標(biāo)
       for(i=0;i<32;i++)//
      {
       WRData(0x00);
      }
   }

}
//寫入GDRAM 繪圖,Y是Y繪圖坐標(biāo),2個(gè)字節(jié)一行,CLONG是圖形長度,以字節(jié)
//為單位;HIGHT是圖形高度,TAB是圖形數(shù)據(jù)表.12864M的圖形顯示是相當(dāng)于256*32點(diǎn)陣.
//由兩屏128*32上下兩屏組成,同一行的下屏的頭地址緊接上屏的未地址。
//繪圖在串口輸入時(shí),會(huì)比在并口下的輸入要慢一些
void WRGDRAM(Uchar Y1,Uchar clong,Uchar hight,Uchar *TAB1)
{   
       Uint k;
       Uchar j;
       Uchar i;
           WRCommand(0x34);
           WRCommand(0x36);
           for(j=0;j<hight;j++)//32
  {   //先上半屏
       WRCommand(Y1+j);  //Y總坐標(biāo),即第幾行
           WRCommand(0x80);//X坐標(biāo),即橫數(shù)第幾個(gè)字節(jié)開始寫起
       for(i=0;i<clong;i++)//
      {
       WRData(TAB1[clong*j+i]);
      }
             //后下半屏

       for(k=0;k<clong;k++)//
      {
       WRData(TAB1[clong*(j+hight)+k]);
      }

  }
}

void menu(void)
{
        LCDInit();
    ShowNUMChar(0x80,0x01,0x0f);//顯示半寬特殊符號(hào)
        ShowNUMChar(0x90,0x30,0x0f);//顯示半寬0~?數(shù)字標(biāo)點(diǎn)
        ShowNUMChar(0x88,0x41,0x0f);//顯示半寬A~P大寫
        ShowNUMChar(0x98,0x61,0x0f);//顯示半寬a~p小寫
        WaitNms(250);                //等待時(shí)間
        WaitNms(250);                //等待時(shí)間
          stopint();
        WRCommand(0x01);        //清除顯示DDRAM

        WRCGRAM(0xff,0x00,0x40);//寫入橫
        WRCGRAM(0x00,0xff,0x50);//寫入橫2
        WRCGRAM(0xaa,0xaa,0x60);//寫入豎
        WRCGRAM(0x55,0x55,0x70);//寫入豎2
    ShowCGChar(0x80,0x00);//顯示橫并填滿
        WaitNms(250);                //等待時(shí)間
        WaitNms(250);                //等待時(shí)間
          stopint();
        WRCommand(0x01);        //清除顯示DDRAM

    ShowCGChar(0x80,02);//顯示橫2并填滿
        WaitNms(250);                //等待時(shí)間
        WaitNms(250);                //等待時(shí)間
          stopint();
        WRCommand(0x01);        //清除顯示DDRAM

        ShowCGChar(0x80,04);//顯示豎并填滿
        WaitNms(250);                //等待時(shí)間
        WaitNms(250);                //等待時(shí)間
          stopint();
        WRCommand(0x01);        //清除顯示DDRAM

        ShowCGChar(0x80,06);//顯示豎2并填滿
        WaitNms(250);                //等待時(shí)間
        WaitNms(250);                //等待時(shí)間
          stopint();
        WRCommand(0x01);        //清除顯示DDRAM

        WRCGRAM(0x00,0x00,0x40);//清CGRAM1
        WRCGRAM(0x00,0x00,0x50);//清CGRAM2
        WRCGRAM(0xaa,0x55,0x40);//寫入點(diǎn)
        WRCGRAM(0x55,0xaa,0x50);//寫入點(diǎn)2
        ShowCGChar(0x80,00);//顯示點(diǎn)并填滿
        WaitNms(250);                //等待時(shí)間
        WaitNms(250);                //等待時(shí)間
          stopint();
        WRCommand(0x01);        //清除顯示DDRAM

        ShowCGChar(0x80,02);//顯示點(diǎn)2并填滿
        WaitNms(250);                //等待時(shí)間
        WaitNms(250);                //等待時(shí)間
          stopint();
        WRCommand(0x01);        //清除顯示DDRAM

    ShowQQChar(0x80,uctech,lengthCF3);//顯示'有限公司',以下共四行
    ShowQQChar(0x90,uctech,lengthCF3);
    ShowQQChar(0x88,uctech,lengthCF3);
    ShowQQChar(0x98,uctech,lengthCF3);
           WaitNms(250);                //等待時(shí)間
        WaitNms(250);                //等待時(shí)間
          stopint();
        WRCommand(0x01);        //清除顯示DDRAM
}

void menu2(void)
{   CLEARGDRAM();
    WRGDRAM(0x80,16,32,TAB1);
         WaitNms(250);                //等待時(shí)間
        WaitNms(250);                //等待時(shí)間
          stopint();

}
//主函數(shù)
void main(void)
{
    menu();//初始化及半寬字符和點(diǎn)橫豎漢字掃描
    menu2();//繪圖顯示
for(;;)
{;}

}

回復(fù)

使用道具 舉報(bào)

ID:882048 發(fā)表于 2022-5-12 17:33 | 顯示全部樓層
最近我也購買了一塊這個(gè)LCD,怎么弄都出不來顯示。不知道是程序問題還是液晶本身的問題。問了一下出售的商家,說是要加一個(gè)電位器調(diào)節(jié)。怎么產(chǎn)品出廠都不經(jīng)過測(cè)試的嗎?
回復(fù)

使用道具 舉報(bào)

ID:1012735 發(fā)表于 2022-5-13 22:27 | 顯示全部樓層
icjsb 發(fā)表于 2022-5-12 17:33
最近我也購買了一塊這個(gè)LCD,怎么弄都出不來顯示。不知道是程序問題還是液晶本身的問題。問了一下出售的商 ...

我也經(jīng)歷過,但我調(diào)背后的羅絲調(diào)出來了,要不然就扔了。羅絲旋轉(zhuǎn)中能顯示出字的角度很小,要慢慢擰。還有就是我板上用的那一塊是正常顯示的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人 在线 | 欧美激情精品久久久久久免费 | 亚洲精品在线免费观看视频 | 91伊人| 观看av| 久久日韩粉嫩一区二区三区 | 国产一极毛片 | 一区二区电影网 | 欧美一区二区小视频 | 欧美日韩中文字幕 | 秋霞电影一区二区 | 亚洲精品一二三 | 久久久久久黄 | 精品免费| 国产精品欧美精品 | 亚洲自拍一区在线观看 | 国产成人免费 | 一a一片一级一片啪啪 | 中文字幕视频在线看 | 亚洲综合第一页 | 久久久精彩视频 | 亚洲视频一区在线播放 | 免费一区二区三区 | 日本精品视频在线 | 亚州毛片 | 五月婷婷激情网 | 免费高潮视频95在线观看网站 | 成人在线看片 | 久久亚洲精品国产精品紫薇 | a欧美 | 国产精品波多野结衣 | 九九精品久久久 | 欧美精品一区在线观看 | 2022精品国偷自产免费观看 | 精品久久久久久久久久久下田 | 日韩在线小视频 | 综合网视频| 亚洲视频在线观看一区二区三区 | 欧美高清一区 | 国产不卡视频 | 午夜天堂精品久久久久 |