#include
#include
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL;
sbit rs=P1^0; //液晶模塊接口
sbit rw=P1^1;
sbit ep=P1^2;
sbit cf=P1^3;
delay(BYTE ms)
{
BYTE i; //延時子程序
while(ms--)
{
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
BOOL lcd_bz()
{
BOOL result; //測試LCD忙碌狀態(tài)
rs=0;
rw=1;
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(BOOL)(P0&0x80);
ep=0;
return result;
}
lcd_wcmd(BYTE cmd) //寫入指令數(shù)據(jù)到LCD
{
while(lcd_bz());
rs="0;
" rw="0;
" ep="0;
" _nop_();
_nop_();
p0="cmd;
" _nop_();
_nop_();
_nop_();
_nop_();
ep="1;
" _nop_();
_nop_();
_nop_();
_nop_();
ep="0;
}
" extern void lcd_pos(BYTE pos)
{ //設置顯示位置
lcd_wcmd(pos|0x80);
}
extern void lcd_wdat(BYTE dat)
{ //寫入字符顯示數(shù)據(jù)到LCD
while(lcd_bz());
rs="1;
" rw="0;
" ep="0;
" p0="dat;
" _nop_();
_nop_();
_nop_();
_nop_();
ep="1;
" _nop_();
_nop_();
_nop_();
_nop_();
ep="0;
" }
extern void lcd_init()
{
ep="0;" //LCD初始化設定
lcd_wcmd(0x38); //8位數(shù)據(jù)接口,2行顯示,5*7
delay(1);
lcd_wcmd(0x0c); //顯示開,光標關 ,閃爍關
delay(1);
lcd_wcmd(0x06); //數(shù)據(jù)讀寫AC加1,畫面不移動
delay(1);
lcd_wcmd(0x01); //清除LCD的顯示內容
delay(1);
}
extern void lcd_init();
extern void lcd_wdat(BYTE dat);
extern void lcd_pos(BYTE pos);
void main()
{
lcd_init();
P0=0xFF;
P1=0xFF;
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
IE=0x82;
TR0=1;
while(1);
}
void time0(void) interrupt 1
{
static BYTE count="0;
TH0=0x3C;
TL0=0xB0;
if(count==19)
{
count++;
}
else
{
BYTE" GE,SHI,BAI,QIAN,WAN;
WORD SHU;
SHU=P3;//P3高位
SHU<<=8;
SHU+=P2;//P2低位
SHU&=0xFFF9;
//關閉定時器
TR0=0;
//輸出shu到lcd
GE=SHU%10;
SHI=SHU/10%10;
BAI=SHU/100%10;
qian="SHU/1000%10;
WAN=SHU/10000;
lcd_pos(0x00);
lcd_wdat(WAN+0x30);
lcd_wdat(QIAN+0x30);
lcd_wdat(BAI+0x30);
lcd_wdat(SHI+0x30);
lcd_wdat(GE+0x30);
lcd_wdat('" ');
lcd_wdat('H');
lcd_wdat('Z');
//初始化
count=0;
TH0=0x3C;
TL0=0xB0;
cf=1;
TR0=1;
cf=0;
}
}
|