|
给51黑电子论坛的朋友们分享一个数码管万年历程序,MAX7221芯片驱动,下面是原理图:
所有资料下载:
带倒计时版的万年历.rar
(143.86 KB, 下载次数: 156)
下面是部分源程序:
- #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);
- }
- }
复制代码
|
|