|
#include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include "lcd.h"
typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
------------------------------------------------------------------
sbit k1=P2^4;
sbit k2=P2^5;
sbit k3=P2^6;
sbit beep=P2^4;
sbit k4=P2^7;
------------------------------------------------------------------
------------------------------------------------------------------
u8 Disp[]="0123456789: zns";//z正常,n鬧鐘,s設(shè)置
u8 s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16;
u8 ss1,ss2,ss3,ss4,ss5,ss6,ss7,ss8,ss9,ss10,ss11,ss12,ss13,ss14,ss15,ss16;
u8 nz1,nz2,nz3,nz4,nz5,nz6,nz7,nz8,nz9,nz10,nz11;
u8 nzz1,nzz2,nzz3,nzz4,nzz5,nzz6;
u8 hw;
u8 msxz,msxz1,zns;//模式選擇
u8 kg;//k1繼電器
u8 fm;
u8 tsec; //秒
u8 tmin; //分
u8 thour;//時(shí)
u16 dat,dat1;
u16 tt1,ssbz,hh,tt2;
/*******************************************************************************
* 函 數(shù) 名 : delay
* 函數(shù)功能 : 延遲
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
//-----------------------------
void displays()
{
/*第一行*/
hh=1;
LcdInit();
LcdWriteData(Disp[ss1]);
LcdWriteData(Disp[ss2]);
LcdWriteData(Disp[10]);
LcdWriteData(Disp[ss4]);
LcdWriteData(Disp[ss5]);
LcdWriteData(Disp[10]);
LcdWriteData(Disp[ss7]);
LcdWriteData(Disp[ss8]);
LcdWriteData(Disp[11]);
LcdWriteData(Disp[msxz1]);
}
/*******************************************************************************
* 函 數(shù) 名 : nzxs
* 函數(shù)功能 : 鬧鐘顯示
*******************************************************************************/
void nzxs()
{
/*第一行*/
hh=1;
LcdInit();
LcdWriteData(Disp[nzz1]);
LcdWriteData(Disp[nzz2]);
LcdWriteData(Disp[10]);
LcdWriteData(Disp[nzz3]);
LcdWriteData(Disp[nzz4]);
LcdWriteData(Disp[10]);
LcdWriteData(Disp[nzz5]);
LcdWriteData(Disp[nzz6]);
LcdWriteData(Disp[11]);
LcdWriteData(Disp[msxz1]);
}
/*******************************************************************************
* 函 數(shù) 名 : key1
* 函數(shù)功能 : 設(shè)置,顯示光標(biāo)
*******************************************************************************/
void key1() //設(shè)置,顯示光標(biāo)
{
if(k1==0)
{
delay(100);
if(k1==0)
{
while(!k1);
kg++;
if(kg==3)
{
kg=0;
hw=0;
}
}
}
}
/*******************************************************************************
* 函 數(shù) 名 : key2
* 函數(shù)功能 : 換位
*******************************************************************************/
void key2() //換位
{
if(k2==0)
{
delay(100);
if(k2==0)
{
while(!k2);
hw++;
}
if(hw>=6)
hw=0;
}
}
/*******************************************************************************
* 函 數(shù) 名 : key3
* 函數(shù)功能 : 加數(shù)
*******************************************************************************/
void key3() //加數(shù)
{
if(k3==0)
{
delay(100);
if(k3==0)
{
while(!k3);
if(kg==2) //s設(shè)置模式
{
if(hw==0)
{
thour=thour+10;
if(thour>=24)thour=thour%10;
}
if(hw==1)
{
thour=thour+1;
if(thour>=24)thour=0;
}
if(hw==2)
{
tmin=tmin+10;
if(tmin>=60)tmin=0;
}
if(hw==3)
{
tmin=tmin+1;
if(tmin>=60)tmin=0;
}
if(hw==4)
{
tsec=tsec+10;
if(tsec>=60)tsec=0;
}
if(hw==5)
{
tsec=tsec+1;
if(tsec>=60)tsec=0;
}
if(hw==6)
{
msxz=msxz+1;
if(msxz>=15)msxz=12;
}
}
}
if(kg==1)//n鬧鐘模式
{
if(hw==0)
{
nz1=nz1+1;
if(nz1>=2)nz1=0;
}
if(hw==1)
{
nz2=nz2+1;
if(nz2>=9)nz2=0;
}
if(hw==2)
{
nz3=nz3+1;
if(nz3>=6)nz3=0;
}
if(hw==3)
{
nz4=nz4+1;
if(nz4>=9)nz4=0;
}
if(hw==4)
{
nz5=nz5+1;
if(nz5>=6)nz5=0;
}
if(hw==5)
{
nz6=nz6+1;
if(nz6>=9)nz6=0;
}
if(hw==6)
{
msxz=msxz+1;
if(msxz>=15)msxz=12;
}
}
}
}
//-----------------------------------------------------------------------------
void Timer0Init()
{
TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開啟動(dòng)。
TH0=(65535-49751)/256; //給定時(shí)器賦初值,定時(shí)50ms
TL0=(65535-49751)%256;
//ET0=1;//打開定時(shí)器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時(shí)器
}
void Timer0() interrupt 1
{
//static u16 i;
TH0=(65535-49751)/256; //給定時(shí)器賦初值,定時(shí)50ms
TL0=(65535-49751)%256;
tt1++;
if(tt1>=20)
{
tt1=0;
ssbz=~ssbz;
// tsec++;
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void Timer1Init()
{
TMOD|=0X10;//選擇為定時(shí)器1模式,工作方式1,僅用TR1打開啟動(dòng)。
TH1=(65535-49751)/256; //給定時(shí)器賦初值,定時(shí)50ms
TL1=(65535-49751)%256;
ET1=1;//打開定時(shí)器1中斷允許 //2021
EA=1;//打開總中斷
TR1=1;//打開定時(shí)器
}
/**************************************************************************************/
void Timer1() interrupt 3
{
//static u16 i;
TH1=(65535-49751)/256; //給定時(shí)器賦初值,定時(shí)50ms
TL1=(65535-49751)%256;
tt2++;
if(tt2>=20)
{
tt2=0;
tsec++;
}
}
void ssfz()
{
if(ssbz==0)
{
if(hw==0)
ss1=11;
if(hw==1)
ss2=11;
if(hw==2)
ss4=11;
if(hw==3)
ss5=11;
if(hw==4)
ss7=11;
if(hw==5)
ss8=11;
if(hw==6)
msxz1=11;
}
else{
ss1=s1;
ss2=s2;
ss3=s3;
ss4=s4;
ss5=s5;
ss6=s6;
ss7=s7;
ss8=s8;
}
}
void ssfz1()
{
if(ssbz==0)
{
if(hw==0)
nzz1=11;
if(hw==1)
nzz2=11;
if(hw==2)
nzz3=11;
if(hw==3)
nzz4=11;
if(hw==4)
nzz5=11;
if(hw==5)
nzz6=11;
}
else{
nzz1=nz1;
nzz2=nz2;
nzz3=nz3;
nzz4=nz4;
nzz5=nz5;
nzz6=nz6;
}
}
/*-------------------------------------------------------------------------------*/
void clockdisplay()
{
if(tsec>=60)
{
tsec=0;
tmin++;
}
if(tmin>=60)
{
tmin=0;
thour++;
}
if(thour>=24)
{
thour=0;
}
s7=(tsec)/10;
s8=(tsec)%10;
s4=(tmin)/10;
s5=(tmin)%10;
s1=(thour)/10;
s2=(thour)%10;
}
/*******************************************************************************
* 函 數(shù) 名 : fmkg
* 函數(shù)功能 : 蜂鳴繼電器
*******************************************************************************/
void fmkg()
{
if(fm==1)
{
beep=~beep;
delay(10);
}
if(k4==0)
{
delay(100);
{
while(!k4);
if(k4==0)
fm++;
if(fm==2)fm=0;
}
}
}
/*******************************************************************************
* 函 數(shù) 名 : bee
* 函數(shù)功能 : 蜂鳴判斷程序
*******************************************************************************/
void bee()
{
if(ss1==nz1)
{
if(ss2==nz2)
{
if(ss4==nz3)
{
if(ss5==nz4)
{
if(ss7==nz5)
{
if(ss8==nz6)
{
fm++;
}
}
}
}
}
}
}
/*******************************************************************************
* 函 數(shù) 名 : fmkg
* 函數(shù)功能 : 蜂鳴繼電器
*******************************************************************************/
/*
void fmkg()
{
if(fm==1)
{
beep=~beep;
delay(10);
}
if(k4==0)
{
delay(100);
{
while(!k4);
if(k4==0)
fm++;
if(fm==2)fm=0;
}
}
} */
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主程序
*******************************************************************************/
void main(void)
{
kg=0;
fm=0;
Timer0Init();
Timer1Init();
ssbz=0;
ET0=1;
while(1)
{ //displays();
/* bee(); /////////////
if(fm==1)
{
beep=~beep;
delay(10);
}
if(fm>=2)fm=0;
if(k4==0)
{
delay(100);
{
if(k4==0)fm++;
delay(100);
}
}
// fmkg();
msxz1=zns;
key1();
if(kg==1)
{
msxz=13;
msxz1=msxz;
ssfz1();
nzxs();
key2();
key3();
ET0=1;
ET1=1;
nzz1=nz1;
nzz2=nz2;
nzz3=nz3;
nzz4=nz4;
nzz5=nz5;
nzz6=nz6;
}
if(kg==2)
{
msxz=14;
msxz1=msxz;
clockdisplay();
ssfz();
displays();
key2();
key3();
// ssfz();
ET0=1;
ET1=0;
ss1=s1;
ss2=s2;
ss3=s3;
ss4=s4;
ss5=s5;
ss6=s6;
ss7=s7;
ss8=s8;
} */
// if(kg==0)
{
msxz=12;
msxz1=msxz;
clockdisplay();
displays();
ET0=0;
// ET1=1;
ss1=s1;
ss2=s2;
ss3=s3;
ss4=s4;
ss5=s5;
ss6=s6;
ss7=s7;
ss8=s8;
}
//displays();
}
}
這是我剛才修改的,但是這個(gè)只能顯示一行時(shí)鐘,不知道哪里出問題了 |
|