#include<reg51.h>
#include"lcd.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define put_start 3
#define put_stop 4
void delay170us(void);
void delay20ms(void);
void InitTimer0(void);
void beep(void);
void disply_init(void);
int key_scan(void);
//--定义全局变量--//
unsigned char table1[]="set time:00M-00s";
unsigned char table2[]="rea time:";
unsigned char table0[]="0123456789";
//unsigned int sec=0;//秒
//unsigned int min=0;//分
unsigned int fors=0;
//unsigned int bep=0;
sbit bee=P3^7; //?????
sbit sec_add=P1^1;
sbit sec_sub=P1^2;
sbit min_add=P1^3;
sbit min_sub=P1^4;
sbit stop=P1^5;
sbit start=P1^6;
int sec_tar=0;
int min_tar=0;
unsigned int value=1;
unsigned char flag=0;
void main(void)
{//1602 第一行80 第二行C0
LcdInit();
InitTimer0();
disply_init();
while(1)
{
if((sec_tar==0)&&(min_tar==0)&&(flag==1))
{
beep();
if(flag==1)
{
EA=0;
flag=0;
}
}
value=key_scan();
if(value==put_start)
{
EA=1;
/*将显示移到下一行*/
LcdWriteCom(0xC0);
flag=1;
//********************为了显示set time*****************************/
/***********显示分***********/
LcdWriteCom(0x89);
LcdWriteData(table0[min_tar/10]);
LcdWriteCom(0x8a);
LcdWriteData(table0[min_tar%10]);
/************** **显示M****************/
LcdWriteCom(0x8b);
LcdWriteData(table1[11]);
/******************显示 - *********************/
LcdWriteCom(0x8c);
LcdWriteData(table1[12]);
/*************显示秒*********/
LcdWriteCom(0x8d);
LcdWriteData(table0[sec_tar/10]);
LcdWriteCom(0x8e);
LcdWriteData(table0[sec_tar%10]);
/************** ****显示S**************/
LcdWriteCom(0x8F);
LcdWriteData(table1[15]);
/************** ****************/
/*****************************************************/
}
if(value==put_stop)
{
EA=0;
/*编辑上一行的时间*/
}
/***********显示分***********/
LcdWriteCom(0xC9);
LcdWriteData(table0[min_tar/10]);
LcdWriteCom(0xCa);
LcdWriteData(table0[min_tar%10]);
/************** **显示M****************/
LcdWriteCom(0xCb);
LcdWriteData(table1[11]);
/******************显示 - *********************/
LcdWriteCom(0xCc);
LcdWriteData(table1[12]);
/*************显示秒*********/
LcdWriteCom(0xCd);
LcdWriteData(table0[sec_tar/10]);
LcdWriteCom(0xCe);
LcdWriteData(table0[sec_tar%10]);
/************** ****显示S**************/
LcdWriteCom(0xCF);
LcdWriteData(table1[15]);
/************** ****************/
}
}
int key_scan(void)//按键扫描与定时时间设置
{
/*****************************************/
if(start==0)//
{
delay20ms();
if(start==0)
{
return put_start;
}
}
/*****************************************/
if(stop==0)//
{
delay20ms();
if(stop==0)
{
return put_stop;
}
}
/*****************************************/
if(sec_add==0)
{
delay20ms();
if(sec_add==0)
{
sec_tar++;
}
}
/*****************************************/
if(sec_sub==0)
{
delay20ms();
if(sec_sub==0)
{
if(sec_tar==0)
{
sec_tar=0;
}
else
sec_tar--;
}
}
/*****************************************/
if(min_add==0)
{
delay20ms();
if(min_add==0)
{
min_tar++;
}
}
/*****************************************/
if(min_add==0)
{
delay20ms();
if(min_sub==0)
{
if(min_tar==0)
{
min_tar=0;
}
else
min_tar--;
}
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0FF;
TL0 = 0x38;
//add your code here!
fors++;
if(fors==5000)//1s
{
fors=0;
if(sec_tar==0)
{
if(min_tar==0)
{
min_tar=0;
sec_tar=0;
}
else
{
min_tar--;
sec_tar=60;
}
}
else sec_tar=sec_tar-1;
}
}
void disply_init(void)
{
unsigned char ai;
for(ai=0; ai<16; ai++)
{
LcdWriteData(table1[ai]);
}
LcdWriteCom(0xC0);
for(ai=0; ai<9; ai++)
{
LcdWriteData(table2[ai]);
}
}
void InitTimer0(void)//定时器0初始化
{
TMOD = 0x01;
TH0 = 0x0FF;
TL0 = 0x38;
EA = 0;
ET0 = 1;
TR0 = 1;
}
void delay20ms(void) //?? 0us
{
unsigned char a,b,c;
for(c=2;c>0;c--)
for(b=95;b>0;b--)
for(a=209;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void beep(void)//蜂鸣器响
{
uint i=0;
for(;i<1500;i++)//响0.5s
{
delay170us();
bee=1;
delay170us();
bee=0;
}
}
void delay170us(void)
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=82;a>0;a--);
}
评论5
最新资源