国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 4693|回復: 1
打印 上一主題 下一主題

ST7920中文字庫液晶顯示模塊LCD12232并行8位顯示C30演示程序

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2009-4-2 23:00:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關鍵詞: 模塊 , 演示 , 液晶顯示 , 中文 , 字庫
/*------------------------------------------------------------
ST7920中文字庫液晶顯示模塊LCD12232并行8位顯示C30演示程序
C30菜鳥HotPower@126.com             2007.12.8 于雁塔菜地
-------------------------------------------------------------*/

#include "lcd.h"

unsigned char LcdRowWriteEnable[2] = {0, 0};//顯示行刷新允許標志
unsigned char LcdBuffer[2][15];//LCD顯示緩沖區(2行15個字符)
unsigned char LcdRow = 0, LcdCol = 0;//虛擬光標

void LcdInit(void)//LCD初始化
{
    LcdIOInit();//LCD管腳初始化
    LcdClearBuffer();//清空LCD顯示緩沖區

//    LcdWriteCommand(0x20);//發送功能設定控制命令(4位)
    LcdWriteCommand(0x30);//發送功能設定控制命令(8位)
    LcdWriteCommand(0x02);//發送位址歸位命令,設定DDRAM位址計數器為0
    LcdWriteCommand(0x04);//發送進入點命令
    LcdWriteCommand(0x0c);//發送開顯示關光標命令
    LcdWriteCommand(0x01);//發送清除顯示命令
    LcdWriteCommand(0x80);//發送設定DDRAM地址0x00命令,光標定位到(0,0)

/*----------------------------------------------------------------------
    LcdWriteCommand(0x30);//發送功能設定控制命令(8位)
    LcdWriteCommand(0x30);//發送功能設定控制命令(8位)
    LcdWriteCommand(0x30);//發送功能設定控制命令(8位)
    LcdWriteCommand(0x01);//發送清除顯示命令
    LcdWriteCommand(0x06);//發送進入點命令0x06
    LcdWriteCommand(0x0a);//發送開關顯示關光標命令
    LcdWriteCommand(0x0c);//發送開顯示關光標命令
    LcdWriteCommand(0x02);//發送位址歸位命令,設定DDRAM位址計數器為0
    LcdWriteCommand(0x17);//游標或顯示移位控制
    LcdWriteCommand(0x80);//發送設定DDRAM地址0x00命令,光標定位到(0,0)
----------------------------------------------------------------------*/
    LCD_BK = 0;//打開背光
}

void LcdIOInit(void)//LCD管腳初始化
{
    LCD_BK = 0;//打開背光
    LCD_E = 0;//不使能
    LCD_RW = 1;//寫讀數據
    TRIS_E  =  PORTOUTMODE;//定義E為輸出IO
    TRIS_RW =  PORTOUTMODE;//定義RW為輸出IO
    TRIS_RS =  PORTOUTMODE;//定義RS為輸出IO
    TRIS_BK =  PORTOUTMODE;//定義BK為輸出IO
    TRIS_DATA = 0;//定義RE0~RE7為輸出IO
}

void LcdWriteCommand(unsigned char Command)//寫LCD命令字
{
    LCD_RS = 0;//命令
    Nop();
    LCD_RW = 0;//寫命令
    Nop();
    LCD_E = 1;//使能      
    Nop();
    LCD_BUS = Command;//發送8位命令
    Nop();     
    LCD_E = 0;//不使能,讀出數據 打入命令
    Nop();     
    LCD_RW = 1;//寫命令結束
      if (Command == 0x01)//清除顯示命令,需要等待時間相對較長
    {
         _delay_loop(1600);//st7920要求等待1.6mS
    }
      else
    {
         _delay_loop(72);//st7920要求等待72uS
    }
}

void LcdWriteData(unsigned char data)//寫LCD顯示數據
{
    LCD_RS = 1;//數據
    Nop();
    LCD_RW = 0;//寫數據
    Nop();
    LCD_E = 1;//使能      
    Nop();
    LCD_BUS = data;//發送8位數據
    Nop();     
    LCD_E = 0;//不使能,打入數據
    Nop();     
    LCD_RW = 1;//寫數據結束
    _delay_loop(72);//st7920要求等待72uS
}

void LcdWaitBusy(void)//LCD忙標志測試(有時死機,故沒用)  
{
    TRIS_DATA = 0xff;//定義RE0~RE7為輸入IO
    LCD_BUS = 0xff;
    Nop();
    LCD_RS = 0;//命令         
    Nop();
    LCD_RW = 1;//讀數據
    Nop();
    LCD_E = 1;//使能      
    Nop();
    while(LCD_BF)//讀取忙碌標志BF(LCD_DATA.7)
    {
        Nop();//搞不清有時死機在此處,所以用_delay_loop()代替
    }
    LCD_E = 0;//不使能,讀出狀態
    Nop();     
    TRIS_DATA = 0;//定義RE0~RE7為輸出IO
    Nop();     
}

void LcdClearBuffer(void)
{
unsigned char i, j;
    for (i = 0;i < 2;i ++)//2行字符
    {//2行漢字
        for (j = 0;j < 15; j ++)//15個字符
        {//每行7個半漢字15個字符
            LcdBuffer[j] = ' ';//空白字符
        }
        LcdRowWriteEnable = 1;//允許此行刷新漢字顯示
    }
    LcdRow = 0;//虛擬光標定位在0行
    LcdCol = 0;//虛擬光標定位在0列
}


void LcdDisplayPos(unsigned char row, unsigned char col)
{
    if ((row < 2) && (col < 15))//容錯處理,光標越界
    {
        LcdRow = row;//刷新虛擬光標
        LcdCol = col;//刷新虛擬光標
        LcdRowWriteEnable[row] = 1;//允許此行刷新漢字顯示
    }
}

void LcdDisplay(const char * string)//不真的LCD顯示
{
    while(*string)//0字符結束
    {
        LcdBuffer[LcdRow][LcdCol ++] = *string ++;//寫入顯示緩沖區
    }
}

unsigned char LcdDisplayBuffer(void)//顯示刷新LCD緩沖區內的數據(一般0.25S~0.5S刷新一次)
{
unsigned char i, j;
unsigned char num = 0;//刷新字符個數
    for (i = 0; i < 2; i ++)
    {//2行漢字
        if (LcdRowWriteEnable)
        {//允許此行刷新漢字顯示
            LcdWriteCommand(0x80 + (i << 4));//移動真的LCD光標
            for (j = 0; j < 15; j ++)
            {//每行7個半漢字15個字符
                LcdWriteData(LcdBuffer[j]);//刷新顯示字符
                num ++;//刷新字符個數計數
            }
            LcdRowWriteEnable = 0;//過后不允許此行刷新漢字顯示
        }
    }
    return num;//返回實際刷新字符個數
}

void _delay_loop(unsigned long count)//軟件延時
{
    while(count --)
    {
        //ClrWdt();//注意大延時要記住喂狗
    }
}


St7920中文字庫LCD驅動控制器資料
沙發
發表于 2011-11-2 09:13:00 | 只看該作者
很好
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人爽久久久噜噜噜丁香AV| 日本欧美国产精品第一页久久| 亚洲精品自拍视频| 日韩中文字幕免费| 乌鸦传媒国产剧| 超碰久久国产vs| 天天插天天射天天干| 四虎1515hh海外海外| 特一级黄| 亚洲三级网| 韩国伦理三级| 中文字幕日本一区| 欧美中文在线观看| 色综合色综合色综合色综合网 | 热久久国产欧美一区二区精品| 伸进大胸老师里面挤奶吃奶的频 | ae58老司机福利| 美女被爽cao免费漫画| 一道精品视频一区二区三区| 亚欧在线精品免费观看一区| 视频在线二区| 天天摸天天爽天天澡视频| 中文字幕成人免费视频| 国产一区二区免费在线观看| 一级做a爰片久久毛片苍井优| 日韩色天使综合色视频| 一二三四影院网在线观看免费| 亚洲一卡2卡三卡4卡5卡组| 黑人开嫩苞| 西班牙一级特级毛片dvd| 日韩欧美在线免费观看| 香蕉草草久在视频在线播放| 国产成A人片在线观看| 少男同志freedeos| 三级黄色毛片网站| 日本一区二区高清免费不卡| 综合欧美日韩| japonensis护士| 亚欧日韩毛片在线看免费网站| 日本最新伦中文字幕| 有码中文字幕在线观看|