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

📄 sky_main.c

📁 公共广播系统:定时开机,定时广播,定时关机
💻 C
📖 第 1 页 / 共 4 页
字号:
			SingleData(col_x,page_num[i]);
		else
			SingleData(col_x,~(page_num[i]));
	}
	SetRAMAddr(page_y+1,col_x);
	for (i=16;i<32;i++) {
		if(flag==0)
			SingleData(col_x,page_num[i]);
		else
			SingleData(col_x,~(page_num[i]));
	}
}

void Display_Line(unsigned char num, unsigned char page_y_in, unsigned char len,bit flag)
{
	data UINT8 i;
	for(i=0;i<len;i++)
	{
		switch(num)
		{
			case 1:
				HzDisplay(menu1[i], page_y_in, i*16,flag);
				break;
			case 2:
				HzDisplay(menu2[i], page_y_in, i*16,flag);
				break;
			case 3:
				HzDisplay(menu3[i], page_y_in, i*16,flag);
				break;
			case 4:
				HzDisplay(menu4[i], page_y_in, i*16,flag);
				break;
			case 5:
				HzDisplay(menu5[i], page_y_in, i*16,flag);
				break;
			case 6:
				HzDisplay(menu6[i], page_y_in, i*16,flag);
				break;
			case 7:
				HzDisplay(menu7[i], page_y_in, i*16,flag);
				break;
			case 8:
				HzDisplay(menu8[i], page_y_in, i*16,flag);
				break;
			case 9:
				HzDisplay(menu9[i], page_y_in, i*16,flag);
				break;
			case 10:
				HzDisplay(menu10[i], page_y_in, i*16,flag);
				break;
			case 11:
				HzDisplay(menu11[i], page_y_in, i*16,flag);
				break;
		}
	}
}
void Display_Save(UINT8 row,UINT8 col)
{
	Msingle_font_pattern(Save[0],row,col,0);
	Msingle_font_pattern(Save[1],row,col+8,0);
	Msingle_font_pattern(Save[2],row,col+16,0);
	Msingle_font_pattern(Save[3],row,col+24,0);
	Delay1(50000);
	Msingle_font_pattern(space,row,col,0);
	Msingle_font_pattern(space,row,col+8,0);
	Msingle_font_pattern(space,row,col+16,0);
	Msingle_font_pattern(space,row,col+24,0);
}
void Num_Display(UINT8 num, unsigned char page_y_in, unsigned char col_x_in,bit flag)
{
	data UINT8 temp;
	temp=num/10;
	Msingle_font_pattern(Time_offset[temp],page_y_in,col_x_in,flag);
	temp=num%10;
	Msingle_font_pattern(Time_offset[temp],page_y_in,col_x_in+8,flag);
}
void Msingle_font_pattern(unsigned char *page_num, unsigned char page_y_in, unsigned char col_x_in,bit flag)
{
	data unsigned char i;
	data unsigned char page_y; 
	data unsigned char col_x; 
	
	page_y		= page_y_in;
	col_x		= col_x_in;
	SetRAMAddr(page_y,col_x);
	for (i=0;i<8;i++) {
		if(flag==0)
			SingleData(col_x,page_num[i]);
		else
			SingleData(col_x,~(page_num[i]));
	}
	SetRAMAddr(page_y+1,col_x);
	for (i=8;i<16;i++) {
		if(flag==0)
			SingleData(col_x,page_num[i]);
		else
			SingleData(col_x,~(page_num[i]));
	}
}

void Time_display(UINT8 row,UINT8 h,UINT8 m,UINT8 s,UINT8 n)
{
	HzDisplay(HZ[3],row,32,0);
	HzDisplay(HZ[4],row,64,0);
	HzDisplay(HZ[5],row,96,0);
	Num_Display(h,row,16,0);
	Num_Display(m,row,48,0);
	Num_Display(s,row,80,0);
	switch(n)
	{
		case 0:
			Num_Display(h,row,16,1);
			break;
		case 1:
			Num_Display(m,row,48,1);
			break;
		case 2:
			Num_Display(s,row,80,1);
			break;
	}
}


void Date_display(UINT8 w,UINT8 y,UINT8 m,UINT8 d,UINT8 n)
{
	HzDisplay(HZ[6],0,0,0);
	HzDisplay(HZ[7],0,16,0);
	HzDisplay(HZ[0],3,32,0);
	HzDisplay(HZ[1],3,64,0);
	HzDisplay(HZ[2],3,96,0);
	HzDisplay(WEEK1[w],0,32,0);
	Num_Display(20,3,0,0);
	Num_Display(y,3,16,0);
	Num_Display(m,3,48,0);
	Num_Display(d,3,80,0);
	switch(n)
	{
		case 0:
			Num_Display(y,3,16,1);
			break;
		case 1:
			Num_Display(m,3,48,1);
			break;
		case 2:
			Num_Display(d,3,80,1);
			break;
	}
}


/********************************************************************************************************/
/*    System Register of CPU Initialize                           */
/********************************************************************************************************/
void  CPUInitial(void)//CPU初始化
{
   	IE = 0x80;                                           
   	IP = 0x01;                                            
	P0 = 0xff;
	P1 = 0xFF;
	P2 = 0xff;
	P3 = 0xff;
	WDT=0x87;
}
void ClearWatchDog(void)
{
	WDT=0xc7;
	Delay1(200);
	WDT=0x87;
}

void Timer0_Init(void)//时钟0初始化
{
	TMOD=0x01;
   	TCON = 	0x00;                                           
	TL0  =  0xe5;
	TH0  =  0x3c;
	TR0  =  1	;
}

void Delay1(UINT16 time)
{
   UINT16 i;
   for(i=0;i<time;i++);
}

void OnOffContral(void)
{
	data UINT8 temp,i,sh,sm,ss,eh,em,es,w;
	bit ocflag;
	data int begin,end,mid;
	data UINT16 addr;

	for(i=0;i<15;i++)
	{
        temp=EEPROMByteRead0(0x01+i);
        Delay1(100);
        if(temp==0)
           w=1;    
        else
            w=Week;
		temp=EEPROMByteRead0(16+Week*15+i);
		Delay1(100);
		if(temp==0)
		{
			Contral8255(i,0);
			LedContral(i,0);
			Luopencloseflag[i]=0;
			continue;
		}
		ocflag=0;
		begin=0;
		end=60;
		mid=(begin+end)/2;
		ClearWatchDog();
		while(1)
		{
			addr=(15*60*w+60*i+mid)*6+0x80;
			sh=EEPROMByteRead0(addr);
			Delay1(100);
			sm=EEPROMByteRead0(addr+1);
			Delay1(100);
			ss=EEPROMByteRead0(addr+2);
			Delay1(100);
			eh=EEPROMByteRead0(addr+3);
			Delay1(100);
			em=EEPROMByteRead0(addr+4);
			Delay1(100);
			es=EEPROMByteRead0(addr+5);
			Delay1(100);
			if((Hour>sh||(Hour==sh && Minute>sm)||(Hour==sh && Minute==sm && Second>ss))&&( Hour<eh ||(Hour==eh && Minute<em) ||(Hour==eh && Minute==em && Second<es)))
			{
				ocflag=1;
				break;
			}
			else if(Hour<sh ||(Hour==sh && Minute<sm)||(Hour==sh && Minute==sm && Second<ss)) 
			{
				end=mid-1;
				mid=(begin+end)/2;
			}
			else if(Hour>eh || (Hour==eh && Minute>em)||(Hour==eh && Minute==em && Second>es))
			{
				begin=mid+1;
				mid=(begin+end)/2;
			}
			if(begin>end)
				break;
		}
		if(ocflag==1)
		{
			if(Luopencloseflag[i]==0)
			{
				BeepFlag=1;
				count1=0;
			}
			Contral8255(i,1);
			LedContral(i,1);
			Luopencloseflag[i]=1;
		}
		else 
		{
			Contral8255(i,0);
			LedContral(i,1);
			Luopencloseflag[i]=0;
		}
	}
}
void timer0(void) interrupt 1//时钟0中断取理
{
	static data UINT8 count=0;
	//data UINT8 i;

	count++;
	count2++;
	if(count2>=24000)
	{
		CloseFlag=0;
		count2=0;
	}
	if(count>=40)
	{
		count=0;
		SecondFlag=1;
		Second_moudel();
		count1++;
		if(count1>=25 && BeepFlag==1)
		{
			SPEAKER=SPEAKERON;
			BeepFlag=0;
		}
		else if(count1==31)
		{
			count1=0;
			SPEAKER=SPEAKEROFF;
		}
	}
  	TH0 = 0x3c;
   	TL0 = 0xe5;
	TR0 = 1;	
}

UINT8 KeyScan(void)//键盘扫描
{
    data UINT8 key_val;
    data UINT8 current_key,k;
	static data UINT8 flag=0;
	
    key_val =P3;
	key_val &=0x3b;
	if(key_val==0x3b)
	{
		if(CloseFlag==0)
		{
			//SingleCmd(DISPLAY_OFF);
			LCD_LED=LEDOFF;
		}
		return(0x00);
	}
	Delay1(500);
	key_val =P3;
	key_val &=0x3b;
	k=0;
	if(key_val==0x3b)
	{
		return(0x00);
	}
    while(1)
	{
		Delay1(400);
		current_key=P3;
    	current_key &=0x3b;
		k++;
		ClearWatchDog();
		if(current_key==0x3b) 
		{
			flag=0;
			break;
		}
		if(flag==0 && (k>250 && (current_key==0x33 || current_key==0x2b || current_key==0x1b)))
		{
			flag=1;
			break;
		}
		if(flag==1 && (k>50 && (current_key==0x33 || current_key==0x2b || current_key==0x1b)))
			break;
	}
	current_key =0x00;
	if(key_val == 0x3a) 	current_key = ESC;	//返回	
	else if(key_val == 0x39)  current_key = ENTER; //开关	
	else if(key_val == 0x33)    current_key = DOWN;//移动	
	else if(key_val == 0x2b)  current_key = MOVE; //确认菜单
	else if(key_val == 0x1b)  current_key = UP;//修改
	count2=0;
	if(current_key!=0 && Voice==1)
	{
		Beep1(1);
	}
	if(current_key!=0 && CloseFlag==0)
	{
		//SingleCmd(DISPLAY_ON);
		LCD_LED=LEDON;
		CloseFlag=1;
		changflag=1;
		return(0x00);
	}
	return(current_key);
}

void Second_moudel(void)//秒表
{
	Second=Second+1;
	if(Second==60)
	{
		Second=0;
		Minute++;
		MinuteFlag=1;
		if(Minute==60)
		{
			Minute=0;
			HourFlag=1;
			Hour++;
			if(Hour==24)
			{
				Hour=0;
				Date++;
				Week++;
				DateFlag=1;
				if(Week==7)
					Week=0;
				if(Month==4 || Month== 6 || Month==9 || Month==11)
				{
					if(Date>30)
					{
						Date=1;
						Month++;
						MonthFlag=1;
					}
				}
				else if(Month==2)
					{
						if(Year%4==0)
 					    {
							if(Date>29)
							{
								Date=1;
								Month++;
								MonthFlag=1;
							}
						}
						else
						{
							if(Date>28)
							{
								Date=1;
								Month++;
								MonthFlag=1;
							}
						}
					}
					else
					{
						if(Date>31)
						{
							Date=1;
							Month++;
							MonthFlag=1;
						}
					}
				if(Month>12)
				{
					Month=1;
					Year++;
					YearFlag=1;
					if(Year>99)
						Year=0;
				}
			}
		}
	}
}

void MenuDisplay(UINT8 class,UINT8 back)//菜单显示
{
	data UINT8 i,temp;
	if(class==2)
		temp=2;
	else
	   temp=3;
	for(i=1;i<=temp;i++)
	{
		if(back==i)
		{
			Display_Line(class*3+i,(i-1)*2,6,1);
		}
		else
		{
			Display_Line(class*3+i,(i-1)*2,6,0);
		}
	}
}

void MainMenu(void)//主菜单选择
{
	data UINT8 temp;
	bit flag=1;

	clearRAM(0,8);
	while(1)
	{
		temp=KeyScan();
		if(count2>2400)
		{
			Function=1;
			clearRAM(0,8);
			return;
		}
		ClearWatchDog();
		switch(temp)
		{
			case ENTER:
				Function=BackNum+1;
				clearRAM(0,8);
				return;
			case MOVE:
				BackNum++;
				if(BackNum>3)
					BackNum=1;
				flag=1;
				break;
			case ESC:
				Function=1;
				clearRAM(0,8);
				return;
			 default:
			 	break;
		}
		if(flag==1)
		{
			flag=0;
			MenuDisplay(0,BackNum);
		}
	}
}


UINT8 Weekjs(y,m,d)//星期计算
{
	data UINT8 i,w;
	w=6;
	for(i=0;i<y;i++)
	{
		if(i%4==0)
			w+=2;
		else
			w+=1;
	}
	for(i=1;i<m;i++)
	{
		if(i==4 || i==6 || i==9 || i==11)
			w+=2;
		else if(i==2)
			{
				if(y%4==0)
					w+=1;
			}
			else
				w+=3;
	}
	w+=d;
	w-=1;
	w%=7;
	return(w);
}
void DateTimeSet(void)//日期时间设置
{
	data UINT8 temp,num,week1,year1,month1,date1,hour1,minute1,second1;
	bit flag;

	flag=1;
	num=0;
	year1=Year;
	month1=Month;
	date1=Date;
	hour1=Hour;
	minute1=Minute;
	second1=Second;
	week1=Week;
	while(1)
	{
		temp=KeyScan();
		if(count2>2400)
		{
			Function=0;
			clearRAM(0,8);
			return;
		}
		ClearWatchDog();
		switch(temp)
		{
			case MOVE:
				num++;
				if(num>5)
					num=0;
				flag=1;
				break;
			case UP:
				switch(num)
				{
					case 0:
						year1+=1;
						year1%=100;
						flag=2;
						break;
					case 1:
						month1+=1;
						if(month1>12)
							month1=1;
						flag=2;
						break;
					case 2:
						date1+=1;
						flag=2;
						break;
					case 3:
						hour1+=1;
						if(hour1>23)
							hour1=0;
						flag=1;
						break;
					case 4:
						minute1+=1;
						if(minute1>59)
							minute1=0;
						flag=1;
						break;
					case 5:
						second1+=1;
						if(second1>59)
							second1=0;
						flag=1;
						break;
				}
				if(flag==2)
				{
					if(month1==4 || month1== 6 || month1==9 || month1==11)
					{
						if(date1>30)
							date1=1;
					}
					else if(month1==2)
						{
							if(year1 %4==0)
							{
								if(date1>29)
									date1=1;
							}
							else if(date1>28)
								{
									date1=1;
								}
						}
						else
						{
							if(date1>31)
								date1=1;
						}
					week1=Weekjs(year1,month1,date1);
				}
				flag=1;
				break;
			case DOWN:
				switch(num)
				{
					case 0:
						if(year1==0)
							year1=99;
						else
						{
							year1-=1;
						}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -