复试项目1--蓝桥杯&电子钟

项目描述:

使用51单片机为MCU,外设模块有DS18B20、DS1302、数码管和LED灯。通过按键设置和切换时间、日期,同时具有闹钟和温度检测功能。

责任描述:

负责编写并调试代码,并负责硬件电路的焊接,电路焊接完成后对电路的各个外设模块分别进行调试,然后系统地调试代码并下载到51单片机中,直到完成整个功能。

一、硬件框图:

                              

二、功能描述:

1、初始化

(1)关闭蜂鸣器、继电器等无关外设;

(2)设备初始化时钟为23时59分50秒,闹钟提醒时间0时0分0秒。

2、显示功能

(1)时间显示格式

(2)温度显示格式

3、按键功能

(1)按键S7定义为“时钟设置按键”,通过该按键可切换选择待调整的时、分、秒,当前选择的显示单元以1秒为间隔亮灭,时、分、秒的调整需注意数据的边界属性。

(2)按键S6定义为“闹钟设置”按键,通过该按键可进入闹钟时间设置功能,数码管显示当前设置的闹钟时间。

(3)按键S5定义为“加”按键,在“时钟设置”或“闹钟设置”状态下,每次按下当前选择的单元(时、分或秒)增加1个单位。

(4)按键S4定义为“减”按键,在“时钟设置”或“闹钟设置”状态下,每次按下当前选择的单元(时、分或秒)减少1个单位。

(5)按键功能说明:

按键S4、S5的“加”、“减”功能只在“时钟设置”或“闹钟设置”状态下有效;

在“时钟显示”状态下,按下S4按键,显示温度数据,松下按键,返回“时钟显示”界面。

4、闹钟提醒功能

(1)指示灯L1以0.2秒为间隔闪烁,持续5秒钟;

(2)闹钟提示状态,按下任意按键,关闭闪烁提示功能。

三、分析以及解决方案

在所有的分析开始之前,先来说说本设计所用的底层芯片,分别是DS1302和DS18B20,看看两者的用法。

1、DS1302

(1)自己懒得总结,找了篇好文章。。。       ==》DS1302总结

(2)关于DS1302是否为SPI接口还是IIC接口   ==》接口方式

(3)初始化时间

2、DS18B20

关于DS18B20,又找了几篇总结文章。。。

==》DS18B20基本操作

==》DS18B20进阶操作

==》DS18B20详细原理

3、操作分析

(1)关于通过S7按键可切换选择待调整的时、分、秒,当前选择的显示单元以1秒为间隔亮灭,时、分、秒的调整需注意数据的边界属性

运用标志位,就可以让按键具有设置时分秒的功能。

                          

由于当初始化时间设置完成后,时间就会1秒1秒地走,以秒为依据,将秒除以2,如果能整除,就显示时、分或秒;如果不能整除,就让数码管熄灭。这样看起来,当前选择的单元以1秒为间隔亮灭。

(2)关于通过S6按键设置闹钟

            

与设置时钟类似,这里要特别注意一下标志位的设置。

(3)关于S5按键“加”,S4按键“减”

首先要注意这个问题,就是在时间设置上,准备两个数组,一个数组用来初始化时间,一个数组用来设置时间。

                              

以加为例,要注意时间设置的边界值,另外,当时间设置好后,注意初始化。

(4)在“时钟显示”状态下,按下S4按键,显示温度数据,松下按键,返回“时钟显示”界面。

这句话该怎么理解呢,这里涉及到一个长按键的思想

                                                 

                          

                                        

                      从代码可知,长按键的思想就是先设置一个阈值,也就是 timestr[ ] 里面设置的1000,然后再设置一个因按键而改变的变量,也就是这里的 keydowntime[ ], 当按键按下后,keydowntime[ ] 一次增加200,如果 keydowntime[ ] 里面的数值没有超过设置的阈值1000,那么就执行按键的动作;如果   keydowntime[ ]   里面的数值超过设置的阈值1000,那么从超过阈值那刻开始,按键的动作照样执行,阈值也开始增加,但是阈值增加速度远远小于设置的变量的增加速度,这样,因按键产生的动作也会一直执行。

(5)细节问题

                                                                   

DS1302输出数据为十六进制,要转化为十进制。

用上文来记叙当时刚进实验室考核所做的实物-电子钟,以及19年参加蓝桥杯所准备的题目-电子钟。

下面附加上蓝桥杯整个源代码:

                                                            

main.c代码:

#include "system.h"
#include "seg.h"
#include "key.h"
#include "ds18b20.h"
#include "ds1302.h"

extern u8 yi,er,san,si,wu,liu,qi,ba,time[7],set=0;
extern bit clock_set=0;
extern bit clock_show=1;	//时钟显示标志位
extern bit alarm_show=0;	//闹钟显示标志位
extern u8 alarm_set=0;	//闹钟设置时分秒标志位
u8 alarm[7];	//闹钟设置
bit led1=0;		//提示闹钟的时间到了
bit led_shanshuo=0;	//led闪烁
bit led_flag=0;	//限制指示灯持续5秒后的其他动作
bit wendu_flag=0;	//温度读取标志位
bit wendu_show=0;	//温度显示标志位

u8 temperature;

void Timer0Init(void)		//2毫秒@11.0592MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x9A;		//设置定时初值
	TH0 = 0xA9;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	EA=1;
	ET0=1;
}


void main()
{
	All_Init();
	Timer0Init();
	Ds1302_Init();
	while(1)
	{
		ledshow();
		keydriver();
		readtime();
		if(wendu_flag==1)
		{
			wendu_flag=0;
			temperature=temperature_change();
		}
		
		if(time[2]==alarm[2] && time[1]==alarm[1] && time[0]==alarm[0])
		{
			if(led_flag==0)	//该标志位的作用是放置闹钟过了5秒之后还有其他的动作
			{
				led1=1;
			}
		}
		
		if(clock_show==1 && wendu_show==0)
		{
		if(clock_set==0)
		{
			yi=time[2]/10;er=time[2]%10;san=10;
			si=time[1]/10;wu=time[1]%10;liu=10;
			qi=time[0]/10;ba=time[0]%10;
		}
		
		else if(clock_set==1)
		{
			if(set==0)
			{
				if(time[0]%2 == 0)
				{
					yi=time[2]/10;er=time[2]%10;san=10;
					si=time[1]/10;wu=time[1]%10;liu=10;
					qi=time[0]/10;ba=time[0]%10;
				}
				else if(time[0]%2 != 0)
				{
					yi=11;er=11;san=10;
					si=time[1]/10;wu=time[1]%10;liu=10;
					qi=time[0]/10;ba=time[0]%10;
				}
			}
			
			else if(set==1)
			{
				if(time[0]%2 == 0)
				{
					yi=time[2]/10;er=time[2]%10;san=10;
					si=time[1]/10;wu=time[1]%10;liu=10;
					qi=time[0]/10;ba=time[0]%10;
				}
				else if(time[0]%2 != 0)
				{
					yi=time[2]/10;er=time[2]%10;san=10;
					si=11;wu=11;liu=10;
					qi=time[0]/10;ba=time[0]%10;
				}
			}
			
			else if(set==2)
			{
				if(time[0]%2 == 0)
				{
					yi=time[2]/10;er=time[2]%10;san=10;
					si=time[1]/10;wu=time[1]%10;liu=10;
					qi=time[0]/10;ba=time[0]%10;
				}
				else if(time[0]%2 != 0)
				{
					yi=time[2]/10;er=time[2]%10;san=10;
					si=time[1]/10;wu=time[1]%10;liu=10;
					qi=11;ba=11;
				}
			}
			}
		}
		
		else if(alarm_show==1 && wendu_show==0)
		{
			if(alarm_set==1)
			{
				if(time[0]%2 == 0)
				{
					yi=alarm[2]/10;er=alarm[2]%10;san=10;
					si=alarm[1]/10;wu=alarm[1]%10;liu=10;
					qi=alarm[0]/10;ba=alarm[0]%10;
				}
				else if(time[0]%2 != 0)
				{
					yi=11;er=11;san=10;
					si=alarm[1]/10;wu=alarm[1]%10;liu=10;
					qi=alarm[0]/10;ba=alarm[0]%10;
				}
			}
			
			else if(alarm_set==2)
			{
				if(time[0]%2 == 0)
				{
					yi=alarm[2]/10;er=alarm[2]%10;san=10;
					si=alarm[1]/10;wu=alarm[1]%10;liu=10;
					qi=alarm[0]/10;ba=alarm[0]%10;
				}
				else if(time[0]%2 != 0)
				{
					yi=alarm[2]/10;er=alarm[2]%10;san=10;
					si=11;wu=11;liu=10;
					qi=alarm[0]/10;ba=alarm[0]%10;
				}
			}
			
			else if(alarm_set==3)
			{
				if(time[0]%2 == 0)
				{
					yi=alarm[2]/10;er=alarm[2]%10;san=10;
					si=alarm[1]/10;wu=alarm[1]%10;liu=10;
					qi=alarm[0]/10;ba=alarm[0]%10;
				}
				else if(time[0]%2 != 0)
				{
					yi=alarm[2]/10;er=alarm[2]%10;san=10;
					si=alarm[1]/10;wu=alarm[1]%10;liu=10;
					qi=11;ba=11;
				}
			}
		}
		
		else if(wendu_show==1)
		{
			yi=11;er=11;san=11;si=11;wu=11;
			liu=temperature/10;qi=temperature%10;ba=12;
		}
	}
}

void Timer0() interrupt 1
{
	static u16 led1_count=0,lednum_count=0;
	static wendu_count=0;
	wendu_count++;
	if(wendu_count==100)
	{
		wendu_count=0;
		wendu_flag=1;
	}
	
	else if(led1==1)
	{
		led1_count++;
		lednum_count++;
		if(led1_count==100)
		{
			led1_count=0;
			if(led_shanshuo==0)
			{
				led_shanshuo=1;
				P2=(P2&0x1f)|0x80;
				P0=0xfe;
				P2&=0x1f;
			}
			else if(led_shanshuo==1)
			{
				led_shanshuo=0;
				P2=(P2&0x1f)|0x80;
				P0=0xff;
				P2&=0x1f;
			}
			if(lednum_count==2500)
			{
				lednum_count=0;
				led_flag=1;
				led1=0;
				P2=(P2&0x1f)|0x80;
				P0=0xff;
				P2&=0x1f;
			}
		}
	}
	ledscan();
	keyscan();
}

system.c代码: 

#include"system.h"
void All_Init()
{
	P2=(P2&0x1f)|0xa0;     //关闭继电器、蜂鸣器
	P0=0x00;
	P2=(P2&0x1f)|0xe0;     //关闭数码管
	P0=0xff;
	P2=(P2&0x1f)|0x80;     //关闭LED灯
	P0=0xff;
	P2&=0x1f;
}

seg.c代码: 

#include "seg.h"

u8 yi,er,san,si,wu,liu,qi,ba;
u8 code ledchar[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xc6}; //0-9,-,灭,C
u8 ledbuff[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};

void ledscan()
{
	static u8 index=0;
	P2=(P2&0x1f)|0xe0;
	P0=0xff;
	P2=(P2&0x1f)|0xc0;
	P0=0x01<<index;
	P2=(P2&0x1f)|0xe0;
	P0=ledbuff[index];
	index++;
	index&=0x07;
}

void ledshow()
{ 
	ledbuff[0]=ledchar[yi];  ledbuff[1]=ledchar[er];
	ledbuff[2]=ledchar[san]; ledbuff[3]=ledchar[si];
	ledbuff[4]=ledchar[wu];  ledbuff[5]=ledchar[liu];
	ledbuff[6]=ledchar[qi];  ledbuff[7]=ledchar[ba];
}

key.c代码: 

#include "key.h"
#include "ds1302.h"

extern u8 yi,er,san,si,wu,liu,qi,ba;
extern bit clock_set;	//时钟设置标志位
extern bit clock_show;	//时钟显示标志位
extern bit alarm_show;	//闹钟显示标志位
extern bit led1;		//提示闹钟的时间到了
extern bit led_flag;	//限制指示灯持续5秒后的其他动作
extern bit wendu_show;
extern u8 set;	//时钟设置时分秒标志位
extern u8 alarm_set;	//闹钟设置时分秒标志位
extern u8 time[7],time_init[7];	//时钟设置的初始值以及设置值
extern u8 alarm[7];	//闹钟设置
u8 keysta[4]={1,1,1,1};
u8 keycodemap[4]={1,2,3,4};
u8 keydowntime[]={0,0,0,0};

void keydriver()
{
	u8 i;
	static u8 backup[]={1,1,1,1};
	static u8 timestr[]={1000,1000,1000,1000};
	for(i=0;i<4;i++)
	{
		if(keysta[i]!=backup[i])
		{
			if(backup[i] != 0)
			{
				keyaction(keycodemap[i]);
			}
			backup[i]=keysta[i];
		}
		
		else if(keydowntime[i]>timestr[i])
		{
			if(i==3)
			{
				keyaction(keycodemap[i]);
				timestr[i] += 4;
			}
		}
	}
}

void keyscan()
{
	u8 i;
	static u8 keybuff[]={0xff,0xff,0xff,0xff};
	keybuff[0]=(keybuff[0]<<1)|S7;
	keybuff[1]=(keybuff[1]<<1)|S6;
	keybuff[2]=(keybuff[2]<<1)|S5;
	keybuff[3]=(keybuff[3]<<1)|S4;
	for(i=0;i<4;i++)
	{
		if(keybuff[i]==0xff)
		{
			keysta[i]=1;
			keydowntime[i]=0;
			if(i==3)
			{
				wendu_show=0;
			}
		}
		else if(keybuff[i]==0x00)
		{
			keysta[i]=0;
			keydowntime[i] += 200;
		}
		else
		{}
	}
}

void keyaction(u8 keycode)
{
	if(keycode==1)
	{
		if(led1==1)	//闹钟时间到了
		{
			led1=0;
			led_flag=1;
			P2=(P2&0x1f)|0x80;
			P0=0xff;
			P2&=0x1f;
		}
		
		else if(clock_show==1)
		{
			if(clock_set==0)	//如果在非时钟设置界面,切换到时钟设置界面
			{
				clock_set=1;
			}
			else if(clock_set==1)
			{
				if(set==0)	//当前在设置小时,按一下设置分钟
				{
					set=1;
				}
				else if(set==1)	//当前在设置分钟,按一下设置秒
				{
					set=2;
				}
				else if(set==2)	//当前设置秒,按一下设置完成,且标志位指向设置小时
				{
					set=0;
					clock_set=0;
				}
			}
		}
	}
	
	if(keycode==2)
	{
		if(led1==1)	//闹钟时间到了
		{
			led1=0;
			led_flag=1;
			P2=(P2&0x1f)|0x80;
			P0=0xff;
			P2&=0x1f;
		}
		
		else if(clock_set==0)	//如果在非时钟设置界面
		{
			clock_show=0;	//时钟不显示
			alarm_show=1;	//闹钟显示
			if(alarm_set==0)
			{
				alarm_set=1;
			}
			else if(alarm_set==1)
			{
				alarm_set=2;
			}
			else if(alarm_set==2)
			{
				alarm_set=3;
			}
			else if(alarm_set==3)
			{
				alarm_set=0;
				clock_show=1;
				alarm_show=0;
			}
		}
	}
	
	if(keycode==3)
	{
		if(led1==1)	//闹钟时间到了
		{
			led1=0;
			led_flag=1;
			P2=(P2&0x1f)|0x80;
			P0=0xff;
			P2&=0x1f;
		}
		
		else if(clock_show==1)	//在时钟显示界面
		{
			if(clock_set == 1)
			{
				if(set == 0)
				{
					time[2]++;
					if(time[2] == 24)
					{
						time[2]=23;
					}
					time_init[2]=time[2];
					time_init[2]=time[2];
					time_init[2]=time[2];
					Ds1302_Init();
				}
			
			else if(set == 1)
			{
				time[1]++;
				if(time[1] == 60)
				{
					time[1]=59;
				}
				time_init[1]=time[1];
				time_init[1]=time[1];
				time_init[1]=time[1];
				Ds1302_Init();
			}
			
			else if(set == 2)
			{
				time[0]++;
				if(time[0] == 60)
				{
					time[2] = 59;
				}
				time_init[0]=time[0];
				time_init[0]=time[0];
				time_init[0]=time[0];
				Ds1302_Init();
			}
		}
	}
		else if(alarm_show==1)	//在闹钟显示界面
		{
			if(alarm_set==1)
			{
				alarm[2]++;
				if(alarm[2]==24)
				{
					alarm[2]=23;
				}
			}
			
			else if(alarm_set==2)
			{
				alarm[1]++;
				if(alarm[1]==60)
				{
					alarm[1]=59;
				}
			}
			
			else if(alarm_set==3)
			{
				alarm[0]++;
				if(alarm[0]==60)
				{
					alarm[2]=59;
				}
			}
		}
}
	
	if(keycode == 4)
	{
		if(led1==1)	//闹钟时间到了
		{
			led1=0;
			led_flag=1;
			P2=(P2&0x1f)|0x80;
			P0=0xff;
			P2&=0x1f;
		}
		
		if(clock_set==0 && alarm_set==0)
		{
			wendu_show=1;
		}
		
		else if(clock_show==1)
		{
			if(clock_set == 1)
			{
				if(set == 0)
				{
					if(time[2] > 0)
					{
						time[2]--;
					}
					time_init[2]=time[2];
					time_init[2]=time[2];
					time_init[2]=time[2];
					Ds1302_Init();
				}
			
				else if(set == 1)
				{
					if(time[1] > 0)
					{
						time[1]--;
					}
					time_init[1]=time[1];
					time_init[1]=time[1];
					time_init[1]=time[1];
					Ds1302_Init();
				}
			
			else if(set == 2)
			{
				if(time[0] > 0)
				{
					time[0]--;
				}
				time_init[0]=time[0];
				time_init[0]=time[0];
				time_init[0]=time[0];
				Ds1302_Init();
			}
		}
	}
		
	else if(alarm_show==1)
	{
		if(alarm_set == 1)
		{
			if(alarm[2] > 0)
			{
				alarm[2]--;
			}
		}
			
		else if(alarm_set == 2)
		{
			if(alarm[1] > 0)
			{
				alarm[1]--;
			}
		}
			
		else if(alarm_set == 3)
		{
			if(alarm[0] > 0)
			{
				alarm[0]--;
			}
		}
	}
}
}

ds1302.c代码: 

 #include "ds1302.h"

u8 time_init[]={50,59,23,20,3,2,18}; //秒,分钟,小时,日,月,星期,年
u8 time[7];

void Ds1302_Writebyte(u8 dat)
{
	u8 i;
	for(i=0;i<8;i++)
	{
		SCLK=0;
		SDA=dat&0x01;
		SCLK=1;
		dat>>=1;
	}
}

void Ds1302_Write(u8 add,u8 dat)
{
	CE=0;
	SCLK=0;
	CE=1;
	Ds1302_Writebyte(add);
	dat=((dat/10)<<4)|(dat%10);  //把十进制数转化为二进制,将其写入
	Ds1302_Writebyte(dat);
}

u8 Ds1302_Read(u8 add)
{
	u8 i,dat,dat1,dat2;
	CE=0;
	SCLK=0;
	CE=1;
	Ds1302_Writebyte(add);
	for(i=0;i<8;i++)
	{
		SCLK=0;
		dat>>=1;  //dat从高位开始读起
		if(SDA)
		{
			dat|=0x80;
		}
		SCLK=1;
	}
	SDA=0;
	dat1=dat/16;
	dat2=dat%16;
	dat=dat1*10+dat2;
	return dat;
}

void Ds1302_Init()
{
	u8 i,add=0x80;
	Ds1302_Write(0x8e,0x00);   //关闭写保护
	for(i=0;i<7;i++)
	{
		Ds1302_Write(add,time_init[i]);
		add+=2;
	}
	Ds1302_Write(0x8e,0x80);
}

void readtime()
{
	u8 i,add=0x81;
	Ds1302_Write(0x8e,0x00);
	for(i=0;i<7;i++)
	{
		time[i]=Ds1302_Read(add);
		add+=2;
	}
	Ds1302_Write(0x8e,0x00);
}

ds18b20.c代码: 

#include "ds18b20.h"

void Delay100us()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	i = 2;
	j = 15;
	do
	{
		while (--j);
	} while (--i);
}

void Delay500us()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	i = 6;
	j = 93;
	do
	{
		while (--j);
	} while (--i);
}

void Ds18b20_Init()
{
	DQ=0;
	Delay500us();
	DQ=1;
	Delay500us();
}

void Ds18b20_Write(u8 dat)
{
	u8 i;
	for(i=0;i<8;i++)
	{
		DQ=0;
		DQ=dat&0x01;
		Delay100us();
		dat>>=1;
		DQ=1;
	}
}

u8 Ds18b20_Read()
{
	u8 i,dat;
	for(i=0;i<8;i++)
	{
		DQ=0;
		dat>>=1;
		DQ=1;
		if(DQ==1)
		{
			dat=dat|0x80;
		}
		Delay100us();
	}
	return dat;
}

u8 temperature_change()
{
	u8 high,lower,temp;
	Ds18b20_Init();
	Ds18b20_Write(0xcc);  //允许总线控制器不用提供64位ROM编码就使用储存器操作命令,
	                      //在单点总线情况下可以节约时间。
	Ds18b20_Write(0x44);  //启动一次温度转换而无需其他数据
	Ds18b20_Init();
	Ds18b20_Write(0xcc);
	Ds18b20_Write(0xbe);  //读取暂存器的内容
	lower=Ds18b20_Read();
	high=Ds18b20_read();
	temp=(high<<4)|(lower>>4);
	return temp;
}

 system.h代码:

#ifndef __SYSTEM_H
#define __SYSTEM_H

#include<stc15f2k60s2.h>
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
void All_Init();

#endif

seg.h代码: 

#ifndef __SEG_H
#define __SEG_H

#include "system.h"

void ledscan();
void ledshow();

#endif

key.h代码:

#ifndef __KEY_H
#define __KEY_H

#include "system.h"

sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;

void keydriver();
void keyscan();
void keyaction(u8 keycode);

#endif

ds1302.h代码: 

#ifndef __DS1302_H
#define __DS1302_H

#include "system.h"
sbit SCLK=P1^7;
sbit SDA=P2^3;
sbit CE=P1^3;

void Ds1302_Writebyte(u8 dat);
void Ds1302_Write(u8 add,u8 dat);
u8 Ds1302_Read(u8 add);
void Ds1302_Init();
void readtime();

#endif

ds18b20.h代码: 

#ifndef __DS18B20_H
#define __DS18B20_H

#include "system.h"
sbit DQ=P1^4;
void Delay100us();
void Delay500us();
void Ds18b20_Init();
void Ds18b20_Write(u8 dat);
u8 Ds18b20_read();
u8 temperature_change();

#endif

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340