#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忙碌状态
rs=0;
rw=1;
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(BOOL)(P0&0x80);
ep=0;
return result;
}
lcd_wcmd(BYTE cmd) //写入指令数据到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)
{ //写入字符显示数据到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位数据接口,2行显示,5*7
delay(1);
lcd_wcmd(0x0c); //显示开,光标关 ,闪烁关
delay(1);
lcd_wcmd(0x06); //数据读写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;
}
}
|