欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
帶倒計時 溫度的數碼管萬年歷 單片機+MAX7221驅動 帶仿真和源碼 原理圖
[打印本頁]
作者:
51黑ff
時間:
2016-9-26 17:53
標題:
帶倒計時 溫度的數碼管萬年歷 單片機+MAX7221驅動 帶仿真和源碼 原理圖
給51黑電子論壇的朋友們分享一個數碼管萬年歷程序,MAX7221芯片驅動,下面是原理圖:
0.png
(394.54 KB, 下載次數: 66)
下載附件
2016-9-26 17:50 上傳
0.png
(46.99 KB, 下載次數: 57)
下載附件
2016-9-26 17:51 上傳
所有資料下載:
帶倒計時版的萬年歷.rar
(143.86 KB, 下載次數: 156)
2016-9-26 17:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
下面是部分源程序:
#include "Max7221.h"
#include "1302.h"
sbit SLED=P2^3;
sbit DQ=P2^4;
sbit BT1=P1^1;
sbit BT2=P1^2;
sbit BT3=P1^3;
sbit BT4=P1^4;
unsigned char Nums[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//顯示緩沖區
unsigned char TENums[]={0,0};
SYSTEMTIME NowTimes;
uint Temperature;
uchar Old_Sec;
uchar Old_Day;
uchar Old_State=1;
uchar Buttons;
uchar ButtonCount;
uchar HasChange;
uchar HasOpera;
void Delay(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
void delay_18B20(unsigned int i)
{
while(i--);
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1;
delay_18B20(8);
DQ = 0;
delay_18B20(80);
DQ = 1;
delay_18B20(14);
x=DQ;
delay_18B20(20);
}
unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
{
DQ = 0;
dat>>=1;
DQ = 1;
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
void WriteOneChar(uchar dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}
void ReadTemp(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned char t=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
delay_18B20(100);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
delay_18B20(100);
a=ReadOneChar();
b=ReadOneChar();
Temperature=b<<4;
Temperature+=(a&0xf0)>>4;
}
void DayDiscount(void)
{
NowTimes.DateString[16]=NowTimes.DateString[16]-1;
if(NowTimes.DateString[16]<0)
{
NowTimes.DateString[15]=NowTimes.DateString[15]-1;
NowTimes.DateString[16]=9;
if(NowTimes.DateString[15]<0)
{
NowTimes.DateString[14]=NowTimes.DateString[14]-1;
NowTimes.DateString[15]=9;
if(NowTimes.DateString[14]<0)
{
NowTimes.DateString[13]=NowTimes.DateString[13]-1;
NowTimes.DateString[14]=9;
if(NowTimes.DateString[13]<0)
{
NowTimes.DateString[13]=9;
NowTimes.DateString[14]=9;
NowTimes.DateString[15]=9;
NowTimes.DateString[16]=9;
}
}
}
}
T2H(NowTimes.DateString[13],0xc0);
T2H(NowTimes.DateString[14],0xc2);
T2H(NowTimes.DateString[15],0xc4);
T2H(NowTimes.DateString[16],0xc6);
}
void GetButton()
{
while(1)
{
if(BT1==1&&BT2==1&&BT3==1&&BT4==1){Buttons=0;break;}
if(BT1==0&&BT2==1&&BT3==1&&BT4==1){Buttons=1;break;}
if(BT1==1&&BT2==0&&BT3==1&&BT4==1){Buttons=2;break;}
if(BT1==0&&BT2==0&&BT3==1&&BT4==1){Buttons=3;break;}
if(BT1==1&&BT2==1&&BT3==0&&BT4==1){Buttons=4;break;}
if(BT1==0&&BT2==1&&BT3==0&&BT4==1){Buttons=5;break;}
if(BT1==1&&BT2==0&&BT3==0&&BT4==1){Buttons=6;break;}
if(BT1==0&&BT2==0&&BT3==0&&BT4==1){Buttons=7;break;}
if(BT1==1&&BT2==1&&BT3==1&&BT4==0){Buttons=8;break;}
if(BT1==0&&BT2==1&&BT3==1&&BT4==0){Buttons=9;break;}
}
while(BT1==0||BT2==0||BT3==0||BT4==0)
{
Delay(1);
}
}
void main()
{
Init();
Initial_DS1302();
Display(Nums);
while(1)
{
GetButton();
if(Buttons!=0)
{
switch(Buttons)
{
case 1:HasOpera=0;HasChange=0;ButtonCount+=1;if(ButtonCount>11){ButtonCount=0;}break;
case 2:HasOpera=1;break;
case 3:HasOpera=2;break;
case 4:break;
case 5:break;
case 6:break;
case 7:break;
case 8:break;
case 9:Old_State=!Old_State;Change7221State(Old_State);break;
}
}
DS1302_GetTime(&NowTimes);
DateToStr(&NowTimes);
Nums[0]=2;
Nums[1]=0;
Nums[2]=NowTimes.DateString[0];
Nums[3]=NowTimes.DateString[1];
Nums[4]=NowTimes.DateString[2];
Nums[5]=NowTimes.DateString[3];
Nums[6]=NowTimes.DateString[4];
Nums[7]=NowTimes.DateString[5];
Nums[8]=NowTimes.DateString[7];
Nums[9]=NowTimes.DateString[8];
Nums[10]=NowTimes.DateString[9];
Nums[11]=NowTimes.DateString[10];
Nums[12]=NowTimes.DateString[11];
Nums[13]=NowTimes.DateString[12];
Nums[14]=(Temperature/10);
Nums[15]=(Temperature%10);
Nums[16]=NowTimes.DateString[13];
Nums[17]=NowTimes.DateString[14];
Nums[18]=NowTimes.DateString[15];
Nums[19]=NowTimes.DateString[16];
Nums[20]=NowTimes.DateString[6];
Nums[21]=10;
Nums[22]=10;
Nums[23]=10;
Nums[24]=10;
Nums[25]=10;
switch(ButtonCount)
{
case 1:
TENums[0]=2;
TENums[1]=3;
if(HasOpera==1)
{
NowTimes.Year+=1;
if(NowTimes.Year>50){NowTimes.Year=0;}
T2H(NowTimes.Year,0x8c);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.Year-=1;
if(NowTimes.Year<0){NowTimes.Year=50;}
T2H(NowTimes.Year,0x8c);
HasChange=1;
}
HasOpera=0;
break;
case 2:
TENums[0]=4;
TENums[1]=5;
if(HasOpera==1)
{
NowTimes.Month+=1;
if(NowTimes.Month>12){NowTimes.Month=1;}
T2H(NowTimes.Month,0x88);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.Month-=1;
if(NowTimes.Month<1){NowTimes.Month=12;}
T2H(NowTimes.Month,0x88);
HasChange=1;
}
HasOpera=0;
break;
case 3:
TENums[0]=6;
TENums[1]=7;
if(HasOpera==1)
{
NowTimes.Day+=1;
if(NowTimes.Day>28&&NowTimes.Month==2&&NowTimes.Year%4!=0){NowTimes.Day=1;}
if(NowTimes.Day>29&&NowTimes.Month==2&&NowTimes.Year%4==0){NowTimes.Day=1;}
if(NowTimes.Day>30&&(NowTimes.Month==4||NowTimes.Month==6||NowTimes.Month==9||NowTimes.Month==11)){NowTimes.Day=1;}
if(NowTimes.Day>31){NowTimes.Day=1;}
T2H(NowTimes.Day,0x86);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.Day-=1;
if(NowTimes.Day<1){NowTimes.Day=25;}
T2H(NowTimes.Day,0x86);
HasChange=1;
}
HasOpera=0;
break;
case 4:
TENums[0]=8;
TENums[1]=9;
if(HasOpera==1)
{
NowTimes.Hour+=1;
if(NowTimes.Hour>23){NowTimes.Hour=0;}
T2H(NowTimes.Hour,0x84);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.Hour-=1;
if(NowTimes.Hour<0){NowTimes.Hour=23;}
T2H(NowTimes.Hour,0x84);
HasChange=1;
}
HasOpera=0;
break;
case 5:
TENums[0]=10;
TENums[1]=11;
if(HasOpera==1)
{
NowTimes.Minute+=1;
if(NowTimes.Minute>59){NowTimes.Minute=0;}
T2H(NowTimes.Minute,0x82);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.Minute-=1;
if(NowTimes.Minute<0){NowTimes.Hour=59;}
T2H(NowTimes.Minute,0x82);
HasChange=1;
}
HasOpera=0;
break;
case 6:
TENums[0]=12;
TENums[1]=13;
if(HasOpera==1)
{
NowTimes.Second+=1;
if(NowTimes.Second>59){NowTimes.Second=0;}
T2H(NowTimes.Second,0x80);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.Second-=1;
if(NowTimes.Second<0){NowTimes.Second=59;}
T2H(NowTimes.Second,0x80);
HasChange=1;
}
HasOpera=0;
break;
case 7:
TENums[0]=16;
TENums[1]=24;
if(HasOpera==1)
{
NowTimes.DateString[13]+=1;
if(NowTimes.DateString[13]>9){NowTimes.DateString[13]=0;}
T2H(NowTimes.DateString[13],0xc0);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.DateString[13]-=1;
if(NowTimes.DateString[13]<0){NowTimes.DateString[13]=9;}
T2H(NowTimes.DateString[13],0xc0);
HasChange=1;
}
HasOpera=0;
break;
case 8:
TENums[0]=17;
TENums[1]=24;
if(HasOpera==1)
{
NowTimes.DateString[14]+=1;
if(NowTimes.DateString[14]>9){NowTimes.DateString[14]=0;}
T2H(NowTimes.DateString[14],0xc2);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.DateString[14]-=1;
if(NowTimes.DateString[14]<0){NowTimes.DateString[14]=9;}
T2H(NowTimes.DateString[14],0xc2);
HasChange=1;
}
HasOpera=0;
break;
case 9:
TENums[0]=18;
TENums[1]=24;
if(HasOpera==1)
{
NowTimes.DateString[15]+=1;
if(NowTimes.DateString[15]>9){NowTimes.DateString[15]=0;}
T2H(NowTimes.DateString[15],0xc4);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.DateString[15]-=1;
if(NowTimes.DateString[15]<0){NowTimes.DateString[15]=9;}
T2H(NowTimes.DateString[15],0xc4);
HasChange=1;
}
HasOpera=0;
break;
case 10:
TENums[0]=19;
TENums[1]=24;
if(HasOpera==1)
{
NowTimes.DateString[16]+=1;
if(NowTimes.DateString[16]>9){NowTimes.DateString[16]=0;}
T2H(NowTimes.DateString[16],0xc6);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.DateString[16]-=1;
if(NowTimes.DateString[16]<0){NowTimes.DateString[16]=9;}
T2H(NowTimes.DateString[16],0xc6);
HasChange=1;
}
HasOpera=0;
break;
case 11:
TENums[0]=20;
TENums[1]=24;
if(HasOpera==1)
{
NowTimes.Week+=1;
if(NowTimes.Week>7){NowTimes.Week=1;}
T2H(NowTimes.Week,0x8A);
HasChange=1;
}
if(HasOpera==2)
{
NowTimes.Week-=1;
if(NowTimes.Week<1){NowTimes.Week=7;}
T2H(NowTimes.Week,0x8A);
HasChange=1;
}
HasOpera=0;
break;
default:TENums[0]=24;TENums[1]=25;break;
}
if(HasChange==0)
{
Nums[TENums[0]]=10;
Nums[TENums[1]]=10;
}
if(NowTimes.Second!=Old_Sec&&Old_State)
{
ReadTemp();
SLED=!SLED;
HasChange=!HasChange;
Old_Sec=NowTimes.Second;
}
Display(Nums);
if(NowTimes.Day!=Old_Day)
{
DayDiscount();
Old_Day=NowTimes.Day;
}
Delay(100);
}
}
復制代碼
作者:
對方是否大會
時間:
2017-1-27 16:04
51黑有你更精彩
作者:
對方是否大會
時間:
2017-1-27 16:05
經過測試果然能用,萬能的51黑啊
作者:
布宜諾斯艾利斯
時間:
2017-11-8 23:08
為什么用proteus仿真樓主的電路時四個按鍵沒有用,話說我最近也在做這個時鐘,同樣也是按鍵不起作用,不知道是怎么回事
作者:
yatou520
時間:
2017-11-10 09:07
課程設計我正在做這個,可是出現了好多自己還不能解決的問題
作者:
hacehi
時間:
2018-7-9 09:13
非常好的一個作品。樓主真棒
作者:
JasirJiang
時間:
2018-9-28 16:27
5黑幣,黑幣不好弄啊!下載試下功能看如何
作者:
HanQi.
時間:
2020-4-27 19:06
求大神幫助!!能否將倒計時改成陰歷月份、日期顯示,再加上一個鬧鐘定時電路,增加K5鍵?最近在學習你的設計,自己改了倒計時增加農歷和鬧鐘,但程序不知道怎么改,求幫忙,謝謝!!
作者:
HanQi.
時間:
2020-4-27 19:10
求大神幫助!!能否將倒計時改為農歷月份、日期的顯示,再增加鬧鐘報警電路和鬧鐘設置K5鍵?最近在學習您的設計,自己將倒計時改成農歷,增加了鬧鐘,但是程序不會改啊!求幫助!!謝謝!!!
作者:
落魄書生123456
時間:
2020-6-17 18:35
為啥我的仿真沒有顯示
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1