⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vc3476895557.txt

📁 X1226的读写子程序 以及LCD液晶显示程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
	
	
}

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 + -