#include
#include "INTRINS.H"
#define u8 unsigned char
#define u16 unsigned int
#define LCD_DATE P0
sbit lcd_rs = P1^6;
sbit lcd_en = P1^7 ;
sbit k=P1^0; //按键
u16 js=0; //计时
void delay(u16 i)
{
while(i--);
}
/************************************液晶写命
令************************************/
void lcd_write_com( u8 com )
{
lcd_rs = 0 ;
lcd_en = 0 ;
LCD_DATE = com ;
lcd_en = 1 ;
delay( 20 ) ;
lcd_en = 0 ;
delay( 100 ) ;
}
/************************************液晶写数据************************************/
void lcd_write_dat(u8 dat)
{
lcd_rs = 1 ;
lcd_en = 0 ;
LCD_DATE = dat ;
lcd_en = 1 ;
delay( 20 ) ;
lcd_en = 0 ;
delay( 100 ) ;
}
/************************************液晶初始化************************************/
void LCD1602_Init()
{
lcd_write_com( 0x38 ) ; //显示初始化
lcd_write_com( 0x0c ) ; //关闭光标闪烁
lcd_write_com( 0x06 ) ; //开显示,光标位移
lcd_write_com( 0x01 ) ; //清屏
}
void xs1(u8 add,u16 val){
if(add!=0)lcd_write_com( add ) ;
lcd_write_dat( val>9999? val/10000%10+'0':' ' ) ;
lcd_write_dat( val>999? val/1000%10+'0':' ' ) ;
lcd_write_dat( val/100%10+'0' ) ;
lcd_write_dat( '.') ;
lcd_write_dat( val/10%10+'0' ) ;
lcd_write_dat( (val%10)!=0 ? val%10+'0':' ' ) ;
}
//初始化函数
void InitTimer0()
{
TMOD = 0x01; //定时器0打开
EA = 1; //打开中断总开关
ET0 = 1; //打开中断允许开关
TR0 = 0; //打开定时器定时开关
}
/***********************************/
/*函数名 :
/*函数功能: 初始化
/*输入参数: 无
/*输出参数: 无
/**********************************/
void InitAll(){
LCD1602_Init(); //液晶的初始化
//定时器初始化
InitTimer0();
}
u8 t=0xff;
//主函数
void main()
{
//初始化
InitAll();
//循环
while(1)
{
t<<=1;
if(k==1)t|=0x01;
if((t&0x03)==2){ //按键下降沿
if(TR0==0){ //开始计时
TH0 = (65536-10000)/256;
TL0 = (65536-10000)/256;
js=0;
TR0=1;
}
else { //停止
TR0=0;
}
}
xs1(0x80,js); //显示
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = (65536-10000)/256;
TL0 = (65536-10000)/256;
if(js<65535)js++;
}