?? 解碼lcd.c
字號(hào):
/*******************************************************************/
//Name of this design: LCD show Electric Clock
//Author: Huangxiang
//Date: 2007-10-02
/*******************************************************************/
#include <reg51.h>
#include <intrins.h>
#include <string.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define BUSY 0x80 //lcd忙檢測(cè)標(biāo)志
#define DATAPORT P0 //定義P0口為L(zhǎng)CD通訊端口
sbit light=P1^3;
sbit LCM_RS=P2^0; //數(shù)據(jù)/命令端
sbit LCM_RW=P2^1; //讀/寫(xiě)選擇端
sbit LCM_EN=P2^2;
void delay_LCM(uint); //LCD延時(shí)子程序
void lcd_wait(void); //LCD檢測(cè)忙子程序
void WriteCommandLCM(uchar WCLCM,uchar BusyC); //寫(xiě)指令到ICM子函數(shù)
void WriteDataLCM(uchar WDLCM); //寫(xiě)數(shù)據(jù)到LCM子函數(shù)
void DisplayOneChar(uchar X,uchar Y,uchar DData); //顯示指定坐標(biāo)的一個(gè)字符子函數(shù)
void initLCM( void); //LCD初始化子程序
void DisplayListChar(uchar X,uchar Y, unsigned char *DData); //顯示指定坐標(biāo)的一串字符子函數(shù)
/*********延時(shí)K*1ms,12.000mhz**********/
void delay_LCM(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<60;j++)
{;}
}
}
/**********寫(xiě)指令到LCM子函數(shù)************/
void WriteCommandLCM(uchar WCLCM,uchar BusyC)
{
if(BusyC)lcd_wait();
DATAPORT=WCLCM;
LCM_RS=0; // 選中指令寄存器
LCM_RW=0; // 寫(xiě)模式
LCM_EN=1;
_nop_();
_nop_();
_nop_();
LCM_EN=0;
}
/**********寫(xiě)數(shù)據(jù)到LCM子函數(shù)************/
void WriteDataLCM(uchar WDLCM)
{
lcd_wait( ); //檢測(cè)忙信號(hào)
DATAPORT=WDLCM;
LCM_RS=1; // 選中數(shù)據(jù)寄存器
LCM_RW=0; // 寫(xiě)模式
LCM_EN=1;
_nop_();
_nop_();
_nop_();
LCM_EN=0;
}
/***********lcm內(nèi)部等待函數(shù)*************/
void lcd_wait(void)
{
DATAPORT=0xff;
LCM_EN=1;
LCM_RS=0;
LCM_RW=1;
_nop_();
while(DATAPORT&BUSY)
{ LCM_EN=0;
_nop_();
_nop_();
LCM_EN=1;
_nop_();
_nop_();
}
LCM_EN=0;
}
/**********LCM初始化子函數(shù)***********/
void initLCM( )
{
DATAPORT=0;
delay_LCM(15);
WriteCommandLCM(0x38,0); //三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
delay_LCM(5);
WriteCommandLCM(0x38,0);
delay_LCM(5);
WriteCommandLCM(0x38,0);
delay_LCM(5);
WriteCommandLCM(0x38,1); //8bit數(shù)據(jù)傳送,2行顯示,5*7字型,檢測(cè)忙信號(hào)
WriteCommandLCM(0x08,1); //關(guān)閉顯示,檢測(cè)忙信號(hào)
WriteCommandLCM(0x01,1); //清屏,檢測(cè)忙信號(hào)
WriteCommandLCM(0x06,1); //顯示光標(biāo)右移設(shè)置,檢測(cè)忙信號(hào)
WriteCommandLCM(0x0c,1); //顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)
}
/****************顯示指定坐標(biāo)的一個(gè)字符子函數(shù)*************/
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
uchar mx,my;
my=Y&1;
mx=X&0xf;
if(my>0)mx+=0x40; //若y為1(顯示第二行),地址碼+0X40
mx+=0x80; //指令碼為地址碼+0X80
WriteCommandLCM(mx,0);
WriteDataLCM(DData);
}
/***********顯示指定坐標(biāo)的一串字符子函數(shù)***********/
void DisplayListChar(uchar X,uchar Y, unsigned char *DData)
{
uchar i=0,n;
Y&=0x01;
X&=0x0f;
n=strlen(DData);
while(i<n)
{
DisplayOneChar(X,Y,DData[i]);
i++;
X++;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -