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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD12864不帶字庫的單片機程序如何改寫為帶字庫的顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:1011007 發表于 2022-4-17 15:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
#include "lcd12864.h"
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

#if 1                //TX_OSC
sbit pinLCD_CSA = P2^6;
sbit pinLCD_CSB = P2^7;
sbit pinLCD_DI = P1^7;                    // 寄存器操作
sbit pinLCD_RW = P2^4;                    // 寫寄存器操作
sbit pinLCD_E = P2^5;
#define LCD_DataPort P0

#endif


#if 0                //Test
sbit pinLCD_CSA = P2^4;
sbit pinLCD_CSB = P2^3;
sbit pinLCD_DI = P2^2;                    // 寄存器操作
sbit pinLCD_RW = P2^1;                    // 寫寄存器操作
sbit pinLCD_E = P2^0;
#define LCD_DataPort P1

#endif



#define  LCDField_NULL  4
#define c_LCD_MaxColNumber 16
//uchar ucDotData;

//----------------------------------------------------------------------------
// 函 數 名:void LCD_DrvFieldSelect(uchar ucField)
// 用    途:選擇液晶的區域,共1#?三個區域
// 入口參數:uchar ucField 第幾個區域,區域為 1 、 2 、3 , 三個區域
// 返    回: 無
// ----------------------------------------------------------------------------
void LCD_DrvFieldSelect(uchar ucField)
{
        switch(ucField)
        {
                case 0:
                         pinLCD_CSA = 0;
                        pinLCD_CSB = 1;
                        break;
                case 1:
                        pinLCD_CSA = 1;
                        pinLCD_CSB = 0;
                        break;
                default:
            pinLCD_CSA = 1;
                        pinLCD_CSB = 1;
                        break;
        }
}

//----------------------------------------------------------------------------
// 函 數 名:void LCD_DrvWriteREG(uchar ucIndicate)
// 用    途:寫液晶寄存器
// 入口參數:ucField    寄存器所在的通道
//           ucIndicate 指令
// 返    回: 無
//----------------------------------------------------------------------------
void LCD_DrvWriteREG(uchar ucField,uchar ucIndicate)
{


         pinLCD_DI = 0;                    // 寄存器操作
        pinLCD_RW = 0;                    // 寫寄存器操作

    LCD_DrvFieldSelect(ucField);      // 液晶片選

    LCD_DataPort = ucIndicate;    // 向液晶寄存器寫入數據
        pinLCD_E = 1;
        pinLCD_E = 0;


    pinLCD_RW = 1;                     // 寫寄存器操作

        pinLCD_DI = 0;                    // 寄存器操作
    LCD_DrvFieldSelect(LCDField_NULL); // 關閉液晶片選
}

//----------------------------------------------------------------------------
// 函 數 名:uchar LCD_DrvReadREG(uchar ucField)
// 用    途:讀液晶寄存器
// 入口參數:無
// 返    回: 液晶寄存器中的內容
//----------------------------------------------------------------------------

uchar LCD_DrvReadREG(uchar ucField)
{
        uchar ucResult;

        pinLCD_E = 0;

         pinLCD_DI = 0;                     // 寄存器操作
        pinLCD_RW = 1;                     // 寫寄存器操作
    _nop_();

    LCD_DrvFieldSelect(ucField);       // 液晶片選

    LCD_DataPort = 0xFF;    // 向液晶寄存器寫入數據
           pinLCD_E = 1;
        pinLCD_E = 0;

    ucResult = LCD_DataPort ;     // 從液晶寄存器讀出數據

    LCD_DrvFieldSelect(LCDField_NULL); // 關閉液晶片選

    return ucResult;
}


//----------------------------------------------------------------------------
// 函 數 名:void LCD_DrvWriteData(uchar ucData)
// 用    途:向液晶寫入數據
// 入口參數:ucField    寄存器所在的通道
//           ucData  待寫入的數據
// 返    回: 無
//----------------------------------------------------------------------------
void LCD_DrvWriteData(uchar ucField,uchar ucData)
{

        pinLCD_DI = 1;                      // 數據操作
    pinLCD_RW = 0;  

    LCD_DrvFieldSelect(ucField);        // 液晶片選
    LCD_DataPort = ucData;         // 向液晶寄存器寫入數據
        pinLCD_E = 1;
        pinLCD_E = 0;

        pinLCD_RW = 1;
        pinLCD_DI = 1;                      // 數據操作

    LCD_DrvFieldSelect(LCDField_NULL);  // 關閉液晶片選
}

//----------------------------------------------------------------------------
// 函 數 名:uchar LCD_DrvReadData(unsigned char ucField)
// 用    途:自液晶讀出數據
// 入口參數:ucField 第幾個區域 , 區域為 1 、 2 、3 , 三個區域
// 返    回: 液晶數據的內容
//----------------------------------------------------------------------------
/*
uchar LCD_DrvReadData(uchar ucField)
{
        uchar ucResult;

        pinLCD_DI = 0;                      // 數據操作
        pinLCD_RW = 0;                      // 讀數據操作
    Delay(10);

    LCD_DrvFieldSelect(ucField);        // 液晶片選
    ucResult = LCD_DataPort;       // 向液晶數據寫入數據
    Delay(10);

        pinLCD_RW = 1;
    Delay(10);

    LCD_DrvFieldSelect(LCDField_NULL);  // 關閉液晶片選

    return ucResult;
}
*/

/*
void loop_lcd_is_busy(unsigned char right)
{
  unsigned char tmp,counter=0;
  do {
          if(right) tmp = LCD_RCR;
          else tmp = LCD_LCR;        
        if(counter++>50) break;//超時跳出
  }
  while ((tmp|0x7f)==0xff);         
}
*/
void loop_lcd_is_busy(unsigned char right)
{
  unsigned char tmp,counter=0;
  do {
                tmp = LCD_DrvReadREG(right);

        if(counter++>50) break;//超時跳出
  }
  while ((tmp|0x7f)==0xff);         
}

void lcd_cmd_wr(unsigned char cmdcode,unsigned char right)
{
  loop_lcd_is_busy(right);
//  if(right) LCD_RCW = cmdcode;
//  else LCD_LCW = cmdcode;  
        LCD_DrvWriteREG(right,cmdcode);
}

void lcd_data_wr(unsigned char ldata,unsigned char right)
{
  loop_lcd_is_busy(right);
//  if(right) LCD_RDW = ldata;
//  else LCD_LDW = ldata;
        LCD_DrvWriteData(right,ldata);
}

void lcd12864_clr(void)
{
        unsigned char i,j;


        for(i=0;i<8;i++)
        {
                lcd_cmd_wr(SETY+i,0);
                lcd_cmd_wr(SETX,0);
                lcd_cmd_wr(SETY+i,1);
                lcd_cmd_wr(SETX,1);        

                for(j=0;j<64;j++)
                {
                        lcd_data_wr(0,0);
                        lcd_data_wr(0,1);
                }
        }
}

void lcd12864_init(void)
{
  lcd_cmd_wr(DISPON,0);
  lcd_cmd_wr(DISPFIRST,0);
  lcd_cmd_wr(SETY,0);
  lcd_cmd_wr(SETX,0);
  lcd_cmd_wr(DISPON,1);
  lcd_cmd_wr(DISPFIRST,1);
  lcd_cmd_wr(SETY,1);
  lcd_cmd_wr(SETX,1);
  lcd12864_clr();
}

/*圖片寫入函數*/
void lcd12864_put_xywhb(unsigned char x,y,w,h,unsigned char *bmp)
{
          unsigned char i,j;
          h = h/8;
          for(i=0;i<h;i++)
          {
                           lcd_cmd_wr(SETY+y+i,0);
                           lcd_cmd_wr(SETX+x,0);
                           for(j=0;j<w-64;j++)
                             lcd_data_wr(bmp[128*i+j],0);

                           lcd_cmd_wr(SETY+y+i,1);
                           lcd_cmd_wr(SETX+x,1);
                           for(j=64;j<w;j++)
                             lcd_data_wr(bmp[128*i+j],1);
          }
}//*

/*8x8點陣asci字符顯示*/
void lcd12864_put_xystr(unsigned char x,y,n,unsigned char *str)
{
        unsigned char i;               
        for(i=0;i<n;i++) {
                if((x+i)>63) {
                        lcd_cmd_wr(SETY+y,1);
                        lcd_cmd_wr(SETX+x+i-64,1);
                        lcd_data_wr(str[ i],1);
                }
                else {
                        lcd_cmd_wr(SETY+y,0);
                        lcd_cmd_wr(SETX+x+i,0);
                        lcd_data_wr(str[ i],0);
                }
        }        
}//*/

/*8x8點陣asci字符顯示*/
void lcd12864_put_clr(unsigned char x,y,n)
{
        unsigned char i;               
        for(i=0;i<n;i++) {
                if((x+i)>63) {
                        lcd_cmd_wr(SETY+y,1);
                        lcd_cmd_wr(SETX+x+i-64,1);
                        lcd_data_wr(0,1);
                }
                else {
                        lcd_cmd_wr(SETY+y,0);
                        lcd_cmd_wr(SETX+x+i,0);
                        lcd_data_wr(0,0);
                }
        }        
}//*/




#ifndef __LCD_12864_H__
#define __LCD_12864_H__

#include <reg52.h>
#include <absacc.h>
#include "Mini51b.h"

/************常用操作命令和參數定義********/
#define DISPON    0x3f    //display on
#define DISPOFF   0x3e    //display off
#define DISPFIRST 0xc0    //define the first row
#define SETY      0xb8    //define page address
#define SETX      0x40    //define column address


extern void lcd12864_init(void);

/*圖片寫入函數*/
extern void lcd12864_put_xywhb(unsigned char x,y,w,h,unsigned char *bmp);
/*8x8點陣asci字符顯示*/
extern void lcd12864_put_xystr(unsigned char x,y,n,unsigned char *str);
/*指定快清零*/
extern void lcd12864_put_clr(unsigned char x,y,n);
extern void lcd_cmd_wr(unsigned char cmdcode,unsigned char right);
extern void lcd_data_wr(unsigned char ldata,unsigned char right);
extern void lcd12864_clr(void);
#endif


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

使用道具 舉報

沙發
ID:732794 發表于 2022-4-17 20:26 | 只看該作者
液晶JLX12864G-1016不帶字庫.rar (2.97 MB, 下載次數: 42) 用這個,寫的很經典。



回復

使用道具 舉報

板凳
ID:123289 發表于 2022-4-18 17:05 | 只看該作者
1、刪除取字模部分
2、細讀新模塊手冊
3、按手冊中要求重寫。
回復

使用道具 舉報

地板
ID:1011007 發表于 2022-4-19 16:42 | 只看該作者
yzwzfyz 發表于 2022-4-18 17:05
1、刪除取字模部分
2、細讀新模塊手冊
3、按手冊中要求重寫。

謝謝,我看看參考資料再改改
回復

使用道具 舉報

5#
ID:1011007 發表于 2022-4-19 16:43 | 只看該作者
51FAN2020 發表于 2022-4-17 20:26
用這個,寫的很經典。

感謝您的資料,我下載學習學習
回復

使用道具 舉報

6#
ID:863267 發表于 2022-4-21 22:22 | 只看該作者
不能換,要重寫,不過有無字符庫的編寫經驗,直接引用這個有字符庫的模塊就是替換而已,不會太費時間
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久婷婷 | 18gay男同69亚洲网站 | 久久天天躁狠狠躁夜夜躁2014 | 免费在线看黄视频 | 国产视频中文字幕 | 日韩中文字幕第一页 | 国产精品久久久久久婷婷天堂 | 婷婷色国产偷v国产偷v小说 | 91精品国产一区二区三区 | 久久综合一区 | 国产日韩视频 | 成人影| hsck成人网 | 国产精品国产三级国产a | 欧美成年人视频在线观看 | 精品欧美一区二区三区久久久 | 日本免费在线 | 精精久久| 九九热在线视频免费观看 | 成人在线小视频 | 久久精品美女 | 老牛嫩草一区二区三区av | 伊人精品视频 | 久久aⅴ乱码一区二区三区 91综合网 | 欧美a区 | 51ⅴ精品国产91久久久久久 | 国产真实精品久久二三区 | 日本一区精品 | 久久久涩| 日韩精品在线播放 | 久久麻豆精品 | 久久精品国产亚洲 | 国产午夜视频 | www.国产精品 | 成人免费日韩 | 欧美日韩成人一区二区 | 在线午夜 | www.五月婷婷.com | 国产精品久久av | 免费天天干 | 亚洲国产一区在线 |