📄 vc3476895557.txt
字号:
}
void print(unsigned char addr,unsigned char number,unsigned char dotornot)
{
unsigned char temp;
temp=addr;
if (number<0 || number>9 )
{
return;
}
if (dotornot==HAVEDOT)
{
temp=temp|0x01;//0b00000001;
}
switch(number) {
case 0:
temp=temp|0x06;//0b00000110;
CS_0;
_sendsinglebyte(temp,DATAFLAG);
temp=0xac; //0b10101100;
_sendbyte(temp);
CS_1;
break;
case 1:
temp=temp|0x06;//0b00000110;
CS_0;
_sendsinglebyte(temp,DATAFLAG);
CS_1;
break;
case 2:
temp=temp|0x40;//0b00000100;
CS_0;
_sendsinglebyte(temp,DATAFLAG);
temp=0xE4;//0b11100100;
_sendbyte(temp);
CS_1;
break;
case 3:
temp=temp|0x06;//0b00000110;
CS_0;
_sendsinglebyte(temp,DATAFLAG);
temp=0xE0; //0b11100000;
_sendbyte(temp);
CS_1;
break;
case 4:
temp=temp|0x06;//|0b00000110;
CS_0;
_sendsinglebyte(temp,DATAFLAG);
temp=0x48;//0b01001000;
_sendbyte(temp);
CS_1;
break;
case 5:
temp=temp|0x02;//0b00000010;
CS_0;
_sendsinglebyte(temp,DATAFLAG);
temp=0xE8;//0b11101000;
_sendbyte(temp);
CS_1;
break;
case 6:
temp=temp|0x02;//0b00000010;
CS_0;
_sendsinglebyte(temp,DATAFLAG);
temp=0xec;//0b11101100;
_sendbyte(temp);
CS_1;
break;
case 7:
temp=temp|0x06;//0b00000110;
CS_0;
_sendsinglebyte(temp,DATAFLAG);
temp=0x80;//0b10000000;
_sendbyte(temp);
CS_1;
break;
case 8:
temp=temp|0x06;//0b00000110;
CS_0;
_sendsinglebyte(temp,DATAFLAG);
temp=0xEC;//0b11101100;
_sendbyte(temp);
CS_1;
break;
case 9:
temp=temp|0x06;//0b00000110;
CS_0;
_sendsinglebyte(temp,DATAFLAG);
temp=0xE8;//0b11101000;
_sendbyte(temp);
CS_1;
break;
default:
break;
}
}
void printnumber(unsigned char index, unsigned char number, unsigned char dotornot)
{
unsigned char addr;
if (index>8 || index<=0 || number<0 || number>9)
{
return;
}
switch(index) {
case 1:
addr=0xe8;//0B11101000;
break;
case 2:
addr=0xD0;//0b11010000;
break;
case 3:
addr=0xb0;//0b10110000;
break;
case 4:
addr=0x98;//0b10011000;
break;
case 5:
addr=0x78;//0b01111000;
break;
case 6:
addr=0x60;//0b01100000;
break;
case 7:
addr=0x40;//0b01000000;
break;
case 8:
addr=0x28;//0b00101000;
break;
default:
break;
}
print(addr,number,dotornot);
}
void printcolon(unsigned char index)
{
unsigned char addr;
if (index>=1 && index<=3)
{
switch(index) {
case 1:
addr=0xe9;//0b11001001;
break;
case 2:
addr=0x91;//0b10010001;
break;
case 3:
addr=0x59;//0b01011001;
break;
default:
break;
}
sendsinglebyte(addr,DATAFLAG);
}
}
void printdate(unsigned char year, unsigned char month, unsigned char day)
{
unsigned char shi,ge;
printnumber(1,2,HAVENODOT);
printnumber(2,0,HAVENODOT);
if (year!=fyear && year>=0 && year<=99)
{
clear(3);
clear(4);
shi=year/10;
ge=year-(shi*10);
printnumber(3,shi,HAVENODOT);
printnumber(4,ge,HAVEDOT);
}
if (month!=fmonth && month>=1 && month<=12)
{
clear(5);
clear(6);
shi=month/10;
ge=month-(shi*10);
printnumber(5,shi,HAVENODOT);
printnumber(6,ge,HAVEDOT);
}
if (day!=fday && day>=1 && day<=31)
{
clear(7);
clear(8);
shi=day/10;
ge=day-(shi*10);
printnumber(7,shi,HAVENODOT);
printnumber(8,ge,HAVEDOT);
}
fyear=year;
fmonth=month;
fday=day;
}
void printmark(unsigned char index)
{
unsigned char addr;
if (index>=4 && index<=6)
{
switch(index) {
case 4:
addr=0xa2;//0b10100010;
break;
case 5:
addr=0x82;//0b10000010;
break;
case 6:
addr=0x6a;//0b01101010;
break;
default:
break;
}
sendsinglebyte(addr,DATAFLAG);
}
}
void printdata(int integer, unsigned char dicamil, unsigned char markornot)
{
unsigned char ge,shi,bai,qian;
qian=(unsigned char)(integer/1000);
bai=(unsigned char)((integer-(qian*1000))/100);
shi=((unsigned char)(integer-(qian*1000)-(bai*100)))/10;
ge=(unsigned char)(integer-(qian*1000)-(bai*100)-(shi*10));
clearall();
if (integer>=1000 && integer<=2000)
{
if (markornot==HAVEMARK)
{
printmark(4);
}
printnumber(5,qian,HAVENODOT);
printnumber(6,bai,HAVENODOT);
printnumber(7,shi,HAVENODOT);
printnumber(8,ge,HAVENODOT);
}
if (integer>=100 && integer<=999)
{
if (markornot==HAVEMARK)
{
printmark(4);
}
printnumber(5,bai,HAVENODOT);
printnumber(6,shi,HAVENODOT);
printnumber(7,ge,HAVEDOT);
printnumber(8,dicamil,HAVENODOT);
}
if (integer>=10 && integer<=99)
{
if (markornot==HAVEMARK)
{
printmark(5);
}
printnumber(6,shi,HAVENODOT);
printnumber(7,ge,HAVEDOT);
printnumber(8,dicamil,HAVENODOT);
}
if (integer>=0 && integer<=9)
{
if (markornot==HAVEMARK)
{
printmark(6);
}
printnumber(7,ge,HAVEDOT);
printnumber(8,dicamil,HAVENODOT);
}
}
void printtime(unsigned char hour, unsigned char minute, unsigned char second)
{
unsigned char shi,ge;
unsigned char i;
if (hour!=fhour && hour>=0 && hour<=23)
{
clear(3);
clear(4);
shi=hour/10;
ge=hour-(shi*10);
printnumber(3,shi,HAVENODOT);
printnumber(4,ge,HAVENODOT);
}
if (minute!=fminute && minute>=0 && minute<=60)
{
clear(5);
clear(6);
shi=minute/10;
ge=minute-(shi*10);
printnumber(5,shi,HAVENODOT);
printnumber(6,ge,HAVENODOT);
}
if (second!=fsecond && second>=0 && second<=60)
{
clear(7);
clear(8);
shi=second/10;
ge=second-(shi*10);
printnumber(7,shi,HAVENODOT);
printnumber(8,ge,HAVENODOT);
}
for (i=2;i<=3;i++)
{
printcolon(i);
}
fhour=hour;
fminute=minute;
fsecond=second;
}
void Time_Flicker(unsigned int index ,unsigned char Current_Time)
{
unsigned char ge,shi,i;
shi=Current_Time/10;
ge=Current_Time-shi*10;
for(i=0;i<100;i++) //闪烁 100次,或者有中断时跳出
{
clear(index);
clear(index+1);
Delay(200);
printnumber(index,shi,HAVENODOT);
printnumber(index+1,ge,HAVENODOT);
Delay(200);
if(P2IFG)
break;
}
}
void incYears(void)
{
Read_Rtc_One(0x35);
if(Temp_Time<15) /* 年计数小于15,年值加1*/
Temp_Time++;
else
Temp_Time=0x05; //年值等于15,年值为5
Temp_Time=DectoBcd(Temp_Time);
Write_Rtc_One(0x35,Temp_Time);
}
void incMonths(void)
{
Read_Rtc_One(0x34);
if(Temp_Time<12) /* 月计数小于12,月值加1*/
Temp_Time++;
else
Temp_Time=0; //月值等于12,月值为1
Temp_Time=DectoBcd(Temp_Time);
Write_Rtc_One(0x34,Temp_Time);
}
void incDays(void)
{
Read_Rtc_One(0x33);
if(Temp_Time<31) /* 日计数小于31,日值加1*/
Temp_Time++;
else
Temp_Time=1; //日值等于31,日值为0
Temp_Time=DectoBcd(Temp_Time);
Write_Rtc_One(0x33,Temp_Time);
}
void incHours(void)
{
Read_Rtc_One(0x32);
if(Temp_Time<23) /* 时计数小于23,时值加1*/
Temp_Time++;
else
Temp_Time=0; //时值等于31,时值为0
Temp_Time=DectoBcd(Temp_Time);
Temp_Time=Temp_Time|0x70;
Write_Rtc_One(0x32,Temp_Time);
}
void incMinutes(void)
{
Read_Rtc_One(Temp_Time);
if(Temp_Time<59 ) /* 分计数小于59,分值加1*/
Temp_Time++;
else
Temp_Time=0; //分值等于59,分值为0
Temp_Time=DectoBcd(Temp_Time);
Write_Rtc_One(0x31,Temp_Time);
}
void incSecond(void)
{
Read_Rtc_One(0x30);
if(Temp_Time<59 ) /* 秒计数小于59,秒值加1*/
Temp_Time++;
else
Temp_Time=0; //秒值等于59,秒值为0
Temp_Time=DectoBcd(Temp_Time);
Write_Rtc_One(0x30,Temp_Time);
}
void DispCurrentData(void) //显示当前数值
{
}
void DispYMD(void) //显示年月日
{
Read_Rtc(0x30);
printdate(rtc_buffer[5],rtc_buffer[4],rtc_buffer[3]);
}
void DispHMS(void) //显示时分秒
{
Read_Rtc(0x30);
printtime(rtc_buffer[2],rtc_buffer[1],rtc_buffer[0]);
}
interrupt [PORT2_VECTOR] void Port2(void)
{
unsigned volatile int i;
for (i = 0x3000; i>0 ; i--); //Debounce
if(P2IFG & PB_DATA) //显示当前数值
{
DispCurrentData();
}
else if( P2IFG & PB_FUN) //FUN=0,显示年,月,日;FUN=1时,显示,时分秒
{
if(FUN<1)
{
FUN++;
DispHMS(); //显示,时分秒
}
else
{
FUN=0; //显示年,月,日
DispYMD();
}
}
else if(P2IFG&PB_ALT) //选择要修改位,
{
if(POINT<3)
{
POINT++;
}
else
{POINT=0;}
if(FUN)
{
switch(POINT) {
case 0:
DispHMS(); // 闪烁显示要修改的小时
Time_Flicker(3,rtc_buffer[2]);
break;
case 1:
DispHMS(); //显示要修改的分钟
Time_Flicker(5,rtc_buffer[1]);
break;
case 2:
DispHMS(); //显示要修改的秒
Time_Flicker(7,rtc_buffer[0]);
break;
}
}
else
{
switch(POINT) {
case 0:
DispYMD(); //显示要修改的年
Time_Flicker(3,rtc_buffer[5]);
break;
case 1:
DispYMD(); //显示要修改的月
Time_Flicker(5,rtc_buffer[4]);
break;
case 2:
DispYMD(); //显示要修改的天
Time_Flicker(7,rtc_buffer[3]);
break;
}
}
}
else if(P2IFG&PB_INC)
{
if(FUN)
{
switch(POINT) {
case 0:
incHours(); //小时加1
DispHMS();
Time_Flicker(3,rtc_buffer[2]);
break;
case 1:
incMinutes(); //分钟加1
DispHMS();
Time_Flicker(5,rtc_buffer[1]);
break;
case 2:
incSecond(); //秒加1
Time_Flicker(7,rtc_buffer[0]);
DispHMS();
break;
}
}
else
{
switch(POINT) {
case 0:
incYears(); //年+1
DispYMD();
Time_Flicker(3,rtc_buffer[5]);
break;
case 1:
incMonths(); //月+1
DispYMD();
Time_Flicker(5,rtc_buffer[4]);
break;
case 2: // 天+1
incDays();
DispYMD();
Time_Flicker(7,rtc_buffer[3]);
break;
}
}
}
P2IFG = 0;
}
void main(void )
{
Delay(5);
P3DIR|=BIT1+BIT3;
Delay(5);
Init();
Read_Rtc(0x30);
Delay(3);
while(1)
{;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -