|
本帖最后由 千年約定 于 2021-3-2 10:03 編輯
8位數(shù)碼管左邊2位顯示倒計(jì)時(shí)次數(shù),右邊四位顯示分鐘和秒鐘 第一次按k1啟動(dòng)的時(shí)候,左邊顯示 1 ,右邊開始倒計(jì)時(shí), 倒計(jì)時(shí)結(jié)束聲光警報(bào),
再次按k1能夠再次啟動(dòng) ,此時(shí)左邊顯示 2 ,右邊開始倒計(jì)時(shí)
按k2能夠調(diào)節(jié)次數(shù) 分鐘 秒鐘的數(shù)值 現(xiàn)在就是要將次數(shù) 分鐘 秒鐘 存儲(chǔ)到AT24C02里面 ,
存儲(chǔ)我會(huì)但是如何將
次數(shù) 1 的時(shí)候 設(shè)置的 分鐘 秒鐘 ,次數(shù) 2的 時(shí)候設(shè)置的 分鐘 秒鐘
。。。。。。。。。。。。。。。。
次數(shù) 8的時(shí)候設(shè)置的分鐘 秒鐘
這些分別存儲(chǔ) 等到對(duì)應(yīng)次數(shù)的時(shí)候調(diào)出相應(yīng)設(shè)置的分鐘 秒鐘
應(yīng)該怎么判斷
#include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include "i2c.h"
#define key_S 15
#define key_L key_S*33
#define key_I key_S*25
sbit k1=P3^0;
sbit k2=P3^1;
sbit k4=P3^3;
sbit k8=P3^7;
bit flag=0;
bit flash=0;
char sec=0,min=0;
unsigned char sec_s=0,min_s=0;
unsigned int Cnt10ms=0;
unsigned char num=0;
unsigned char shu=0;
unsigned char KeyValue=0;
unsigned char DisplayData[8];
unsigned char code dongtai[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(unsigned int i)
{
while(--i);
}
void Timer0Init()
{
TMOD |= 0x01;
TH0 = 0xD8;
TL0 = 0xF0;
TF0 = 0;
TR0 = 1;
ET0=1;
EA=1;
}
void keyscan()
{
static unsigned int time=0;
if(!k1||!k2||!k4||!k8)
{
time++;
if(time>key_L)
time=key_I;
if(time==key_S)
{
if(!k1 && KeyValue==0)
{
if(shu>0)
{
flag=1;
if(shu==1)
{
shu=At24c02Read(1);
sec_s=At24c02Read(2);
min_s=At24c02Read(3);
}
if(shu==2)
{
shu=At24c02Read(4);
sec_s=At24c02Read(5);
min_s=At24c02Read(6);
}
if(shu==3)
{
shu=At24c02Read(7);
sec_s=At24c02Read(8);
min_s=At24c02Read(9);
}
if(shu==4)
{
shu=At24c02Read(10);
sec_s=At24c02Read(11);
min_s=At24c02Read(12);
}
if(shu==5)
{
shu=At24c02Read(13);
sec_s=At24c02Read(14);
min_s=At24c02Read(15);
}
if(shu==6)
{
shu=At24c02Read(16);
sec_s=At24c02Read(17);
min_s=At24c02Read(18);
}
if(shu==7)
{
shu=At24c02Read(19);
sec_s=At24c02Read(20);
min_s=At24c02Read(21);
}
if(shu==8)
{
shu=At24c02Read(22);
sec_s=At24c02Read(23);
min_s=At24c02Read(24);
}
shu=shu;
sec=sec_s;
min=min_s;
}
}
if(k2!=0xFF)
delay(30000);
if(k2!=0xFF)
KeyValue=++KeyValue%4;
}
if(time==key_S||time==key_L)
{
if(!k4 && KeyValue>0)
{
switch(KeyValue)
{
case 3: if(shu<99)shu++; break;
case 1: if(min_s<99)min_s++; break;
case 2: if(sec_s<59)sec_s++; break;
}
}
if(!k8 && KeyValue>0)
{
switch(KeyValue)
{
case 3: if(shu>0)shu--; break;
case 1: if(min_s>0)min_s--; break;
case 2: if(sec_s>0)sec_s--; break;
}
}
}
}
else time=0;
}
void BufferMemory()
{
if(KeyValue==0)
{
if(shu==1)
{
At24c02Write(1,shu);
At24c02Write(2,sec_s);
At24c02Write(3,min_s);
}
if(shu==2)
{
At24c02Write(4,shu);
At24c02Write(5,sec_s);
At24c02Write(6,min_s);
}
if(shu==3)
{
At24c02Write(7,shu);
At24c02Write(8,sec_s);
At24c02Write(9,min_s);
}
if(shu==4)
{
At24c02Write(10,shu);
At24c02Write(11,sec_s);
At24c02Write(12,min_s);
}
if(shu==5)
{
At24c02Write(13,shu);
At24c02Write(14,sec_s);
At24c02Write(15,min_s);
}
if(shu==6)
{
At24c02Write(16,shu);
At24c02Write(17,sec_s);
At24c02Write(18,min_s);
}
if(shu==7)
{
At24c02Write(19,shu);
At24c02Write(20,sec_s);
At24c02Write(21,min_s);
}
if(shu==8)
{
At24c02Write(22,shu);
At24c02Write(23,sec_s);
At24c02Write(24,min_s);
}
DisplayData[0]=dongtai[shu/10];
DisplayData[1]=dongtai[shu%10];
DisplayData[4]=dongtai[min/10];
DisplayData[5]=dongtai[min%10]+0x80;
DisplayData[6]=dongtai[sec/10];
DisplayData[7]=dongtai[sec%10];
}
else
{
if(KeyValue==3&&flash==1)
{
DisplayData[0]=0;
DisplayData[1]=0;
}
else
{
DisplayData[0]=dongtai[shu/10];
DisplayData[1]=dongtai[shu%10];
}
if(KeyValue==1&&flash==1)
{
DisplayData[4]=0;
DisplayData[5]=0x80;
}
else
{
DisplayData[4]=dongtai[min_s/10];
DisplayData[5]=dongtai[min_s%10]+0x80;
}
if(KeyValue==2&&flash==1)
{
DisplayData[6]=0;
DisplayData[7]=0;
}
else
{
DisplayData[6]=dongtai[sec_s/10];
DisplayData[7]=dongtai[sec_s%10];
}
}
}
void display()
{
static unsigned char t=0;
P0=0x00;
P2&=0xe3;
P2|=(t<<2);
P0=DisplayData[t];
t=++t%8;
}
void main()
{
Timer0Init();
DisplayData[2]=0x80;
DisplayData[3]=0x80;
while(1)
{
keyscan();
BufferMemory();
display();
delay(125);
}
}
void Timer0() interrupt 1
{
TH0 = 0xD8;
TL0 = 0xF0;
if(flag)
{
if(min|sec!=0)
{
Cnt10ms++;
if(Cnt10ms>=100)
{
Cnt10ms=0;
sec--;
if(min==0&&sec==0)
{
flag=0;
shu++;
if(shu>=9)
shu=1;
}
else if(sec<0)
{
min--;
sec=59;
}
}
}
else flag=0;
}
if(++num==20)
{
num=0;
flash=~flash;
}
}
|
|