|
|
#include<reg51.h>
#include<string.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#include "LCD1602.H"
uchar code mychar[8][8]={
0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02, //年 0x00
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00, //月 0x01
0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00, //日 0x02
0x10,0x06,0x09,0x08,0x08,0x08,0x09,0x06, // ℃ 0x03
0x01,0x03,0x1D,0x11,0x1D,0x03,0x01,0x00, //小喇叭標(biāo)記 0x04
0x1F,0x0A,0x0A,0x1F,0x0A,0x0A,0x1A,0x00, // 開 0x05
0x11,0x0A,0x1F,0x04,0x1F,0x0A,0x11,0x00, // 關(guān) 0x06
0x04,0x0E,0x0E,0x0E,0x1F,0x1F,0x04,0x00, // 鬧鐘標(biāo)記 0x07
};
///****************延時(shí)函數(shù)************************/
//void delay(uint i)
//{
// while(--i); //自減 當(dāng)i為1時(shí),跳出循環(huán)
//}
/****************側(cè)忙函數(shù)************************/
bit ReadStatusLCD()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 1;
delay(50);
result = (bit)(LCD_Data&0x80); //當(dāng)LCD_DATA&0x80不為0時(shí)result=1,否則result=0
LCD_E = 0;
return result;
}
/****************LCD1602寫指令函數(shù)************************/
/*
/*寫指令數(shù)據(jù)到LCD
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。
/*
/*********************************************************/
void WriteCommandLCM(uchar WDLCD)
{
while(ReadStatusLCD());
LCD_RS = 0; //表示向LCM寫入指令
LCD_RW = 0; //表示向LCM寫入指令
/****在高脈沖下命令輸入*****/
LCD_E = 0;
delay(50);
LCD_Data = WDLCD; //指令代碼
delay(50);;
LCD_E = 1;
delay(50);
LCD_E = 0;
}
/****************LCD1602寫數(shù)據(jù)函數(shù)************************/
/*
/*寫顯示數(shù)據(jù)到LCD
/*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。
/*
/*******************************************************************/
void WriteDataLCM(uchar WDLCD)
{
while(ReadStatusLCD());
LCD_RS = 1;//寫數(shù)據(jù)使能
LCD_RW = 0;
/****在高脈沖下數(shù)據(jù)輸入*****/
LCD_E = 0;
LCD_Data = WDLCD; //數(shù)據(jù)內(nèi)容
delay(50);
LCD_E = 1;
delay(50);
LCD_E = 0;
}
/****************CGRAM區(qū)寫入自定義的字符************************/
void WriteCGRAM(void)
{
uchar x,y;
WriteCommandLCM(0x40);
for(y = 0; y < 8; y++)
{
for(x = 0; x < 8; x++)
{
WriteDataLCM(mychar[y][x]); //寫入自定義漢字字模,作為臨時(shí)字庫。掉電會清除。
}
}
}
extern uchar code time0[]; //顯示日期字符串
extern uchar code time1[]; //顯示時(shí)間字符串
/****************初始化LCD1602函數(shù)************************/
void LCMInit(void)
{
uchar i;
P2&=~0x10;
delay(50);
WriteCommandLCM(0x38);//顯示模式設(shè)置
delay(50);
WriteCommandLCM(0x38);
delay(50);
WriteCommandLCM(0x38);
WriteCommandLCM(0x08);//顯示關(guān)閉
delay(50);
WriteCommandLCM(0x01);//清除DDRAM的所有單元,光標(biāo)被移動到屏幕左上角,也就是清除屏幕內(nèi)容
WriteCommandLCM(0x06);//光標(biāo)移動設(shè)置整屏不移動
WriteCommandLCM(0x0c);//屏幕開、光標(biāo)不閃(0)不顯示(0)
delay(50);
WriteCommandLCM(0x80); //指定第一行
for(i = 0;i < 16;i++)
{
WriteDataLCM(time0[i]); //顯示字符 日期
delay(5);
switch(i)
{
case 4 : WriteDataLCM(0x00);break; //顯示自定義漢字 年
case 6 : WriteDataLCM(0x01);break; //顯示自定義漢字 月
case 8 : WriteDataLCM(0x02);break; //顯示自定義漢字 日
}
}
WriteCommandLCM(0x80+0x40); //指定第二行
for(i = 0;i < 12;i++)
{
WriteDataLCM(time1[i]); //顯示字符 時(shí)間
delay(5);
}
} |
|