欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
求大神指點迷津,單片機萬年歷時在時鐘與年月日轉化出問題了
[打印本頁]
作者:
上進求學
時間:
2020-10-3 19:48
標題:
求大神指點迷津,單片機萬年歷時在時鐘與年月日轉化出問題了
我在做萬年歷時在時鐘與年月日轉化出問題了;;
我基本想法是令key2控制由時鐘轉化為年月日;然后年月日用for語句執行100次后重新返回時鐘程序,理想狀態下應該是時鐘一直在執行,中斷返回后時鐘繼續走,但現在出現的問題是轉化為年月日返回后有時可以時鐘正常運行,有時需停頓幾秒才能繼續運行。
求大神指點!!!
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delay(uint);
sbit key1=P2^7;
sbit key2=P2^6;
sbit key5=P2^3;
sbit key4=P2^4;
uchar num=0,shi=0,fen=0,miao=0,nian=20,yue=10,ri=3;
void wmiao()
{
P0=0x7f;
P1=table[miao%10]; //個位
delay(1);
P0=0xbf;
P1=table[miao/10]; //十位
delay(1);
P0=0xff; //消影
delay(1);
}
//void display(uchar shu)
//{
//
//
// P0=0x7f;
// P1=table[shu%10]; //個位
// delay(1);
// P0=0xbf;
// P1=table[shu/10]; //十位
// delay(1);
// P0=0xff; //消影
// delay(1);
//}
void wfen()
{
P0=0xef;
P1=table[fen%10]; //分個位
delay(1);
P0=0xf7;
P1=table[fen/10]; //分十位
delay(1);
P0=0xff; //消影
delay(1);
}
void wshi()
{
P0=0xfd;
P1=table[shi%10]; //時個位
delay(1);
P0=0xfe;
P1=table[shi/10]; //時十位
delay(1);
P0=0xff; //消影
delay(1);
}
void gang() //杠
{
P0=0xdb;
P1=0x40;
delay(1);
}
void wnyr()
{
P0=0xfe; //年
P1=table[nian/10];
delay(1);
P0=0xfd;
P1=table[nian%10];
delay(1);
P0=0xfb;
P1=table[nian/10];
delay(1);
P0=0xf7;
P1=table[nian%10];
delay(1);
P0=0xef; //月
P1=table[yue/10];
delay(1);
P0=0xdf;
P1=table[yue%10];
delay(1);
P0=0xbf; //日
P1=table[ri/10];
delay(1);
P0=0x7f;
P1=table[ri%10];
delay(1);
}
void init() //啟動定時器并賦值
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
// TH1=(65536-45872)/256;
// TL1=(65536-45872)%256;
EA=1;
ET0=1;
// ET1=1;
TR0=1;
// TR1=1;
}
void keyscan() //掃描鍵盤
{
uchar m;
if(key1==0)
{
delay(10); //去抖
if(key1==0)
{
while(!key1); //等待按鍵釋放
TR1=~TR1;
}
}
if(key2==0) //切換時鐘與年月日
{
delay(10); //去抖
if(key2==0)
{
for(m=0;m<100;m++)
wnyr();
}
}
if(key5==0) //分加1
{
delay(10); //去抖
if(key5==0)
{
fen++;
delay(200);
if(fen>=60) //分滿60進1
{
fen=0;
shi++;
if(shi>=24)
{
shi=fen=miao=0;
}
}
}
}
if(key4==0) //時加1
{
delay(10); //去抖
if(key4==0)
{
shi++;
delay(200);
if(shi>=24)
{
shi=fen=miao=0;
}
}
}
}
void main()
{
init();
while(1)
{
keyscan();
//display(num);
wmiao();
wfen();
wshi();
gang();
if(num==20) //1秒到
{
num=0;
miao++;
if(miao==60) //秒60進1
{
miao=0;
fen++;
if(fen>=60) //分60進1
{
fen=0;
shi++;
if(shi>=24)
{
shi=fen=miao=0;
ri++;
if(yue!=2) //月份
{
switch(yue)
{
case 1:if(ri==32)
ri=1;
break;
case 3:if(ri==31)
ri=1;
break;
case 4:if(ri==31)
ri=1;;
break;
case 5:if(ri==32)
ri=1;
break;
case 6:if(ri==31)
ri=1;
break;
case 7:if(ri==32)
ri=1;
break;
case 8:if(ri==32)
ri=1;
break;
case 9:if(ri==31)
ri=1;
break;
case 10:if(ri==32)
ri=1;
break;
case 11:if(ri==31)
ri=1;
break;
case 12:if(ri==32)
ri=1;
break;
}
}
else //二月
{
if((nian%4==0)&&(nian%400==0)) //閏年
{
if(ri>=30)
ri=1;
}
else
{
if(ri>=29)
ri=1;
}
}
if(ri==1)
{
yue++;
if(yue==13)
{
yue=0;
nian++;
}
}
}
}
}
}
}
}
//void T1_time() interrupt 3
//{
// TH1=(65536-45872)/256;
// TL1=(65536-45872)%256;
// num++;
//}
void T0_time() interrupt 1
{
// uchar n;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
// if(key2==0)
// {
//// delay(10);
//// if(key2==0)
//// {
// for(n=0;n<100;n++)
// wnyr();
//// }
// }
}
void delay(uint m) //延時函數
{
uint x,y;
for(x=m;x>0;x--)
for(y=110;y>0;y--);
}
復制代碼
作者:
RIDER
時間:
2020-10-4 21:37
大佬求解 流水燈設計
作者:
xianfajushi
時間:
2020-10-6 10:08
可參
https://blog.csdn.net/xianfajushi/article/details/104001986
返回月的天數代碼是通用的已經有閏年的處理,只要傳遞年和月的參數即可返回值用于判斷,只要大等于就可執行月遞增和年遞增。
作者:
xianfajushi
時間:
2020-10-6 10:10
而且不用每天調用,調用一次保存值,判斷大等于值后再去調用獲取下月的值,即函數只需每月末調用一次即可。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1