以前搞的一个项目,现在拿出来分享一下代码(实物很久以前就损坏了)
单片机源程序如下:
- #include<stc15f2k60s2.h>
- #include<LQ12864.h>
- #include<ds1302.h>
- #include<ds18b20.h>
- sbit SetMode=P5^4;
- sbit SetTimes=P5^5;
- void delayk(unsigned int MS) //误差 0us
- {
- while(MS--)
- {
- unsigned char a,b;
- for(b=129;b>0;b--)
- for(a=45;a>0;a--);
- }
- }
- unsigned int tem;
- unsigned char GK;//水平测
- unsigned char model=0;
- unsigned char code Shuzi[]="0123456789:-";
- unsigned char TimeMode[9];
- unsigned char DateMode[11];
- unsigned char TempMode[6];
- unsigned char GKMode[3];
- unsigned char InitTime[7]={0,0,14,4,4,4,19};//秒分时日月周年
- unsigned int Celsius;
- void KeysCan()
- {
- if(!SetMode)
- {
- delayk(50);
- model++;
- if(model==7){model=0;}
- while(!SetMode);
- }
- }
- unsigned char Gaokao()
- {
- unsigned char temp;
- switch(InitTime[4])
- {
- case 4:temp=70-InitTime[3];break;
- case 5:temp=40-InitTime[3];break;
- case 6:temp=9-InitTime[3];break;
- }
- return(temp);
- }
- void TMPdisplay()
- {
- TempMode[0]=Shuzi[tem%1000/100];
- TempMode[1]=Shuzi[tem%100/10];
- TempMode[2]='.';
- TempMode[3]=Shuzi[tem%10];
- TempMode[4]='^';
- TempMode[5]='C';
- TempMode[6]='\0';
- OLED_P8x16Str(64,0,TempMode);
- }
- void SMG()
- {
- unsigned char a;
- a=read1302(Read_hour);
- InitTime[2]=((a>>4)*10+(a&0x0f));
- TimeMode[0]=Shuzi[a>>4];
- TimeMode[1]=Shuzi[a&0x0f];
- TimeMode[2]=Shuzi[10];
- a=read1302(Read_minute);
- InitTime[1]=((a>>4)*10+(a&0x0f));
- TimeMode[3]=Shuzi[a>>4];
- TimeMode[4]=Shuzi[a&0x0f];
- TimeMode[5]=Shuzi[10];
- a=read1302(Read_second);
- InitTime[0]=((a>>4)*10+(a&0x0f));
- TimeMode[6]=Shuzi[a>>4];
- TimeMode[7]=Shuzi[a&0x0f];
- TimeMode[8]='\0';
- a=read1302(Read_year);
- InitTime[6]=((a>>4)*10+(a&0x0f));
- DateMode[0]=Shuzi[2];
- DateMode[1]=Shuzi[0];
- DateMode[2]=Shuzi[a>>4];
- DateMode[3]=Shuzi[a&0x0f];
- DateMode[4]=Shuzi[11];
- a=read1302(Read_month);
- InitTime[4]=((a>>4)*10+(a&0x0f));
- DateMode[5]=Shuzi[a>>4];
- DateMode[6]=Shuzi[a&0x0f];
- DateMode[7]=Shuzi[11];
- a=read1302(Read_day);
- InitTime[3]=((a>>4)*10+(a&0x0f));
- DateMode[8]=Shuzi[a>>4];
- DateMode[9]=Shuzi[a&0x0f];
- DateMode[10]='\0';
- GK=Gaokao();
- GKMode[0]=Shuzi[GK/10];
- GKMode[1]=Shuzi[GK%10];
- GKMode[2]='\0';
- }
- void main()
- {
- OLED_Init();
- Draw_BMP(0,0,128,8,Zhangtianlan);
- delayk(300);
- OLED_CLS();
- OLED_P8x16Str(4,4,"Time:");
- for(model=0;model<8;model++)
- {
- OLED_P16x16Ch(16*model,6,model,CNY);
- }
- model=0;
- init_ds1302_io();
- while(1)
- {
- unsigned char b,c;
- TMPchange();
- for(c=0;c<15;c++)
- {
- KeysCan();
- if(!SetTimes)
- {
- delayk(20);
- switch(model)
- {
- case 0:InitTime[model]=0;SetTime(InitTime);break;
- case 1:InitTime[model]++; if(InitTime[model]==60){InitTime[model]=0;} SetTime(InitTime);break;
- case 2:InitTime[model]++; if(InitTime[model]==24){InitTime[model]=0;} SetTime(InitTime);break;
-
- case 3:InitTime[model]++;
- switch(InitTime[model+1])
- {
- case 2:if(InitTime[model]==29){InitTime[model]=1;}break;
- case 4:if(InitTime[model]==31){InitTime[model]=1;}break;
- case 6:if(InitTime[model]==31){InitTime[model]=1;}break;
- case 9:if(InitTime[model]==31){InitTime[model]=1;}break;
- case 11:if(InitTime[model]==31){InitTime[model]=1;}break;
- default:if(InitTime[model]==32){InitTime[model]=1;}break;
- }
- SetTime(InitTime);
- break;
- case 4:InitTime[model]++; if(InitTime[model]==13){InitTime[model]=1;} SetTime(InitTime);break;
- case 5:InitTime[model]++; if(InitTime[model]==8){InitTime[model]=1;} SetTime(InitTime);break;
- case 6:InitTime[model]++; if(InitTime[model]==100){InitTime[model]=0;} SetTime(InitTime);break;
- }
- while(!SetTimes);
- }
- SMG();
- b=read1302(Read_week);
- InitTime[5]=((b>>4)*10+(b&0x0f));
- switch(b)
- {
- case 1:OLED_P8x16Str(96,2,"Mon");break;
- case 2:OLED_P8x16Str(96,2,"Tue");break;
- case 3:OLED_P8x16Str(96,2,"Wed");break;
- case 4:OLED_P8x16Str(96,2,"Thu");break;
- case 5:OLED_P8x16Str(96,2,"Fri");break;
- case 6:OLED_P8x16Str(96,2,"Sat");break;
- case 7:OLED_P8x16Str(96,2,"Sun");break;
- }
- OLED_P8x16Str(52,4,TimeMode);
- OLED_P8x16Str(5,2,DateMode);
- switch(model+1)
- {
- case 1:OLED_P8x16Str(4,0,"SetSec\0");break;
- case 2:OLED_P8x16Str(4,0,"SetMin\0");break;
- case 3:OLED_P8x16Str(4,0,"SetHou\0");break;
- case 4:OLED_P8x16Str(4,0,"SetDay\0");break;
- case 5:OLED_P8x16Str(4,0,"SetMon\0");break;
- case 6:OLED_P8x16Str(4,0,"SetWek\0");break;
- case 7:OLED_P8x16Str(4,0,"SetYea\0");break;//break;
- }
- TMPdisplay();
- OLED_P8x16Str(96,6,GKMode);
- }
- tem=TMPget();
- }
- }
复制代码
所有程序51hei提供下载:
OLED-DS1302时钟 STC15版.zip
(83.98 KB, 下载次数: 45)
|