#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define ulong unsigned long
#define uint unsigned int
uchar idata welcome[16]={" CLOCK "};//定义第一行显示数组
uchar idata sslcdtimer[16]={" 00:00:00 "};//定义第二行显示数组
uchar temps;
bit sstimeflag;
sbit e=P2^0;//LCD显示器EN
sbit rw=P2^1;//LCD显示器RW
sbit rs=P2^2;//LCD显示器RS
sbit K1=P1^2;
sbit K2=P1^3;
uchar KeyCount=0;
uchar th1_f;//在中断中装载的T0的值高8位
uchar tl1_f;//在中断中装载的T0的值低8位
uint m=0;
uint n=0;
ulong i;
//**************************************************
//软件延时函数(系统晶振为11.0592MHz),延时时间约为40μs
//入口条件:无符号整型变量del1,最终的延时时间为(del1*40)μs
//**************************************************
void delay(uint del1)
{
uchar del2;
for(;del1>0;del1--)
for(del2=10;del2>0;del2--);
}
//**************************************************
//液晶显示器判忙函数
//**************************************************
void busy()
{
uchar temp;
temp=0x00;
rs=0;
rw=1;
while((temp&0x80)==0x80)
{
P0=0xff;
e=1;
temp=P0;
e=0;
}
}
//**************************************************
//向液晶显示器写命令函数
//**************************************************
void WR_Com(uchar temp)
{
busy();
rs=0;
rw=0;
P0=temp;
e=1;
e=0;
}
//**************************************************
//向液晶显示器写数据函数
//**************************************************
void WR_Data(uchar num)
{
busy();
rs=1;
rw=0;
P0=num;
e=1;
e=0;
}
//**************************************************
//向液晶显示器写入显示数据函数
//入口条件:液晶显示器行首地址和待显示数组的首地址
//**************************************************
void disp_lcd(uchar addr,uchar *temp1)
{
uchar i;
WR_Com(addr);
delay(100);
for(i=0;i<16;i++)
{
WR_Data(temp1[i]);
delay(100);
}
}
//**************************************************
//液晶显示器初始化函数
//**************************************************
void lcd_ini()
{
char i;
for(i=3;i>0;i--)
{
P0=0x30;
rs=0;
rw=0;
e=1;
e=0;
delay(100);
}
P0=0x38;
rs=0;
rw=0;
e=1;
e=0;
delay(100);
}
//**************************************************
//液晶显示器复位函数
//**************************************************
void lcd_Reset()
{
WR_Com(0x01);
delay(100);
WR_Com(0x06);
delay(100);
WR_Com(0x0c);
delay(100);
}
//**************************************************
//定时/计数器中断函数,1S及0.01S
//**************************************************
void timer0() interrupt 1 using 2
{
TH0=(65536-10000)/256;//10ms左右
TL0=(65536-10000)%256;
{
sslcdtimer[8]+=1;
}
if(sslcdtimer[8]>'9')//10ms位
{
sslcdtimer[8]='0';
sslcdtimer[7]+=1;
}
if(sslcdtimer[7]>'9')//100ms位
{
sslcdtimer[7]='0';
sslcdtimer[5]+=1;
}
if(sslcdtimer[5]>'9')//1s位
{
sslcdtimer[5]='0';
sslcdtimer[4]+=1;
}
if(sslcdtimer[4]>='6')//10s位
{
sslcdtimer[4]='0';
sslcdtimer[2]+=1;
}
if(sslcdtimer[2]>='9')
{
sslcdtimer[2]='0';
sslcdtimer[1]+=1;
}
}
//**************************************************
//主函数
//**************************************************
void main()
{
lcd_ini();//显示初始化
lcd_Reset();//显示复位
disp_lcd(0x80,welcome);//LCD滚动显示
delay(5000);
TMOD=0x01;//T0.16位定时
TH0=(65536-10000)/256;//10ms左右
TL0=(65536-10000)%256;
TR0=1;//开T0定时
IE=0x82;//1000?0110,开EA,EX1,ET0
sstimeflag=0;//0.01秒计时标
while(1)
{
disp_lcd(0xc0,sslcdtimer);//显示秒表数值//秒表跑动
}
}
能让开关有开始,暂停,复位功能
#include<intrins.h>
#define uchar unsigned char
#define ulong unsigned long
#define uint unsigned int
uchar idata welcome[16]={" CLOCK "};//定义第一行显示数组
uchar idata sslcdtimer[16]={" 00:00:00 "};//定义第二行显示数组
uchar temps;
bit sstimeflag;
sbit e=P2^0;//LCD显示器EN
sbit rw=P2^1;//LCD显示器RW
sbit rs=P2^2;//LCD显示器RS
sbit K1=P1^2;
sbit K2=P1^3;
uchar KeyCount=0;
uchar th1_f;//在中断中装载的T0的值高8位
uchar tl1_f;//在中断中装载的T0的值低8位
uint m=0;
uint n=0;
ulong i;
//**************************************************
//软件延时函数(系统晶振为11.0592MHz),延时时间约为40μs
//入口条件:无符号整型变量del1,最终的延时时间为(del1*40)μs
//**************************************************
void delay(uint del1)
{
uchar del2;
for(;del1>0;del1--)
for(del2=10;del2>0;del2--);
}
//**************************************************
//液晶显示器判忙函数
//**************************************************
void busy()
{
uchar temp;
temp=0x00;
rs=0;
rw=1;
while((temp&0x80)==0x80)
{
P0=0xff;
e=1;
temp=P0;
e=0;
}
}
//**************************************************
//向液晶显示器写命令函数
//**************************************************
void WR_Com(uchar temp)
{
busy();
rs=0;
rw=0;
P0=temp;
e=1;
e=0;
}
//**************************************************
//向液晶显示器写数据函数
//**************************************************
void WR_Data(uchar num)
{
busy();
rs=1;
rw=0;
P0=num;
e=1;
e=0;
}
//**************************************************
//向液晶显示器写入显示数据函数
//入口条件:液晶显示器行首地址和待显示数组的首地址
//**************************************************
void disp_lcd(uchar addr,uchar *temp1)
{
uchar i;
WR_Com(addr);
delay(100);
for(i=0;i<16;i++)
{
WR_Data(temp1[i]);
delay(100);
}
}
//**************************************************
//液晶显示器初始化函数
//**************************************************
void lcd_ini()
{
char i;
for(i=3;i>0;i--)
{
P0=0x30;
rs=0;
rw=0;
e=1;
e=0;
delay(100);
}
P0=0x38;
rs=0;
rw=0;
e=1;
e=0;
delay(100);
}
//**************************************************
//液晶显示器复位函数
//**************************************************
void lcd_Reset()
{
WR_Com(0x01);
delay(100);
WR_Com(0x06);
delay(100);
WR_Com(0x0c);
delay(100);
}
//**************************************************
//定时/计数器中断函数,1S及0.01S
//**************************************************
void timer0() interrupt 1 using 2
{
TH0=(65536-10000)/256;//10ms左右
TL0=(65536-10000)%256;
{
sslcdtimer[8]+=1;
}
if(sslcdtimer[8]>'9')//10ms位
{
sslcdtimer[8]='0';
sslcdtimer[7]+=1;
}
if(sslcdtimer[7]>'9')//100ms位
{
sslcdtimer[7]='0';
sslcdtimer[5]+=1;
}
if(sslcdtimer[5]>'9')//1s位
{
sslcdtimer[5]='0';
sslcdtimer[4]+=1;
}
if(sslcdtimer[4]>='6')//10s位
{
sslcdtimer[4]='0';
sslcdtimer[2]+=1;
}
if(sslcdtimer[2]>='9')
{
sslcdtimer[2]='0';
sslcdtimer[1]+=1;
}
}
//**************************************************
//主函数
//**************************************************
void main()
{
lcd_ini();//显示初始化
lcd_Reset();//显示复位
disp_lcd(0x80,welcome);//LCD滚动显示
delay(5000);
TMOD=0x01;//T0.16位定时
TH0=(65536-10000)/256;//10ms左右
TL0=(65536-10000)%256;
TR0=1;//开T0定时
IE=0x82;//1000?0110,开EA,EX1,ET0
sstimeflag=0;//0.01秒计时标
while(1)
{
disp_lcd(0xc0,sslcdtimer);//显示秒表数值//秒表跑动
}
}
能让开关有开始,暂停,复位功能