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

📄 24m点阵时钟.c

📁 基于C51的点阵时钟显示仿真电路和源码
💻 C
📖 第 1 页 / 共 4 页
字号:
}
//显示诗歌
void Show_Song(){
	uchar i;
	Put_Song(8,0);
	Move_Up();
	for(i=0;i<3;i++){
		Put_Song(0,i*8);
		Put_Song(8, (i+1)*8);
		Move_Up();
		}
	Put_Song(0, 3*8);
	Put_Tdispram(8);
	Move_Up();
}

	
//======================
//*滚动显示所有信息*
//======================
void Show_All_Info(){
	Put_Adispram(8);
	Move_Down();	//切换效果
	
	Put_Adispram(0);
	Put_Ydispram(8);	//XXXX年
	Show_All_Word();
	
	Put_Ydispram(0);	//XXXX年
	Put_Ddispram(8);
	Show_All_Word();

	Put_Ddispram(0);
	Put_Kdispram(8);
	Show_All_Word();

	
	Read_Temperature();
	Disp_Temperature();
	Put_Kdispram(0);
	Put_Tdispram(8);
	Show_All_Word();

	Read_Temperature();
	Disp_Temperature();
	Put_Tdispram(0);
	Put_sTEMP(8);
	Show_All_Word();

	Read_TIME();
	Put_sTEMP(0);
	Put_Tdispram(8);
	Move_Up();
	
}

	
/*us级延时函数                                        */
/*******************************************************************/

void Delay(unsigned int num)
{
  num = num*2; 
  while( --num ) ;
}

/*初始化ds1820                                      */
/*******************************************************************/
Init_DS18B20(void)
{  
     DQ = 1 ;      //DQ复位
     Delay(8) ;    //稍做延时

     DQ = 0 ;      //单片机将DQ拉低
     Delay(90) ;   //精确延时 大于 480us

     DQ = 1 ;       //拉高总线
     Delay(8) ;

     presence = DQ ;    //如果=0则初始化成功 =1则初始化失败
     Delay(100) ;
     DQ = 1 ; 
     
     return(presence) ; //返回信号,0=presence,1= no presence
}


/* 读一个字节                     */
/*******************************************************************/
 ReadOneChar(void)
{
unsigned char i = 0 ;
unsigned char dat = 0 ;

for (i = 8 ; i > 0 ; i--)
  {
    DQ = 0 ; // 给脉冲信号
    dat >>= 1 ;
    DQ = 1 ; // 给脉冲信号

    if(DQ)
     dat |= 0x80 ;
    Delay(4) ;
  }

    return (dat) ;
}

/* 写一个字节                                         */
/*******************************************************************/
 WriteOneChar(unsigned char dat)
{
  unsigned char i = 0 ;
  for (i = 8 ; i > 0 ; i--)
  {
    DQ = 0 ;
    DQ = dat&0x01 ;
    Delay(5) ;

    DQ = 1 ;
    dat>>=1 ;
  }
}

/* 读取温度                            */
/*******************************************************************/
 Read_Temperature(void)
{
     Init_DS18B20() ;
  
     WriteOneChar(0xCC) ;  // 跳过读序号列号的操作
     WriteOneChar(0x44) ;  // 启动温度转换

     Init_DS18B20() ;
     WriteOneChar(0xCC) ;  //跳过读序号列号的操作
     WriteOneChar(0xBE) ;  //读取温度寄存器

     temp_data[0] = ReadOneChar() ;   //温度低8位
     temp_data[1] = ReadOneChar() ;   //温度高8位 
}

/* 数据转换与温度显示                                              */
/*******************************************************************/
 void Disp_Temperature()
{
  temp_ram[4]=temp_data[0]&0x0f ;
  temp_ram[0]=ditab[temp_ram[4]]+0x30 ;     //查表得小数位的值
  
  temp_ram[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;
  temp_ram[3]=temp_ram[4]/100+0x30 ;
  temp_ram[1]=temp_ram[4]%100 ;
  temp_ram[2]=temp_ram[1]/10+0x30 ;
  temp_ram[1]=temp_ram[1]%10+0x30 ;

    if(temp_ram[3]==0x30)        //高位为0,不显示
   { 
     temp_ram[3]=0x20 ;              
     if(temp_ram[2]==0x30)      //次高位为0,不显示
     temp_ram[2]=0x20 ;
   }

} 
/*
void start_time(){
	Time.Year = 0x10;
	Time.Month = 0x7;
	Time.Day = 0x23;
	Time.Hour = 0x21;
	Time.Minute = 0x58;
	Time.Second = 0x0;
	Time.Week = 0x5;
}*/

//=================
//****校时函数****
//=================
void Change_Time(){
	//
	MSG_MV = MSG_MV_L;
	move_times = 0;
	start_word=0;
	TMP_TIME = Time.Hour;
	TR1 = 1;		//开启定时器1闪烁
	do{
		switch(CHANGE){
				case CHG_HOUR:
				case CHG_MIN:
				case CHG_SEC:
					Put_Tdispram(0);
					break;
				case CHG_MON:
				case CHG_DAY:
					Put_Ddispram(0);
					break;
				case CHG_WEEK:
					Put_Kdispram(0);
					break;
				case CHG_YEAR:
					Put_Ydispram(0);
					break;
				default:
					break;
				}	
		Show_sWord();
		//if(!key_done)
		//	ReadKey1();
		}while(ReadKey1() != KEY3_S && exit < 10);		//MSG_KEY
	Change_obj();	//保证退出校时无隐身
	HIDE = 0;
	key_done = 0;
	//key_done = 1;	//按键事件处理完成
	TR1 = 0;		//关闭定时器1闪烁					
	
}
//==================
//****对象切换****
//==================
void Change_obj(){
	switch(CHANGE){
				case CHG_HOUR:
					if(Time.Hour == 0xcc)
						Time.Hour = TMP_TIME;
					TMP_TIME = Time.Minute;
					break;
				case CHG_MIN:
					if(Time.Minute == 0xcc)
						Time.Minute = TMP_TIME;
					TMP_TIME = Time.Second;
					break;
				case CHG_SEC:
					if(Time.Second == 0xcc)
						Time.Second = TMP_TIME;
					TMP_TIME = Time.Month;
					break;
				case CHG_MON:
					if(Time.Month == 0xcc)
						Time.Month = TMP_TIME;
					TMP_TIME = Time.Day;
					break;
				case CHG_DAY:
					if(Time.Day == 0xcc)
						Time.Day = TMP_TIME;
					TMP_TIME = Time.Week;
					break;
				case CHG_WEEK:
					if(Time.Week == 0xcc)
						Time.Week = TMP_TIME;
					TMP_TIME = Time.Year;
					break;
				case CHG_YEAR:
					if(Time.Year == 0xcc)
						Time.Year = TMP_TIME;
					TMP_TIME = Time.Hour;
					break;
				default:
					break;
				}
}
//==================
//****加加函数****
//功能: 0x19 ++  =0x20
//==================
uchar Add_num(char *num){
	++(*num);
	if(((*num) & 0x0f) == 0x0a){
		*num += 0x10;
		*num &= 0xf0;
		}
	return *num;
}
//==================
//****校时加加****
//==================
void Add_Time(){
	switch(CHANGE){
				case CHG_HOUR:
					if(HIDE){
						if(Add_num(&TMP_TIME) == 0x24)
							TMP_TIME= 0;
						}
					else{
						if(Add_num(&Time.Hour) == 0x24)
							Time.Hour = 0;
						}
					break;
				case CHG_MIN:
					if(HIDE){
						if(Add_num(&TMP_TIME) == 0x60)
							TMP_TIME= 0;
						}
					else{
						if(Add_num(&Time.Minute) == 0x60)
							Time.Minute= 0;
						}
					break;
				case CHG_SEC:
					if(HIDE){
						if(Add_num(&TMP_TIME) == 0x60)
							TMP_TIME= 0;
						}
					else{
						if(Add_num(&Time.Second) == 0x60)
							Time.Second = 0;
						}
					break;
				case CHG_MON:
					if(HIDE){
						if(Add_num(&TMP_TIME) == 0x13)
							TMP_TIME= 0;
						}
					else{
						if(Add_num(&Time.Month) == 0x13)
							Time.Month= 1;
						}
					break;
				case CHG_DAY:
					if(HIDE){
						if(Add_num(&TMP_TIME) == 0x32)
							TMP_TIME= 0;
						}
					else{
						if(Add_num(&Time.Day) == 0x32)
							Time.Day= 0;
						}
					break;
				case CHG_WEEK:
					if(HIDE){
						if(Add_num(&TMP_TIME) == 0x08)
							TMP_TIME= 1;
						}
					else{
						if(Add_num(&Time.Week) == 0x08)
							Time.Week= 1;
						}
					break;
				case CHG_YEAR:
					if(HIDE){
						if(Add_num(&TMP_TIME) == 0xa0)
							TMP_TIME = 0;
						}
					else{
						if(Add_num(&Time.Year) == 0xa0)
							Time.Year = 0;
						}
					//if(Add_num(&Time.Year) == 0x24)
					//	Time.Year= 0;
					break;
				default:
					break;
				}
}
//==================
//****减减函数****
//功能: 0x20 --  =0x19
//==================
uchar Cut_num(char *num){
	--(*num);
	if(((*num)&0x0f) == 0x0f){
		//*num -= 0x10;
		*num &= 0xf9;
	}
	//if((*num == 0xf9) 
		//*num = 0x99;
	return *num;
}
//==================
//****校时减减****
//==================
void Cut_Time(){
	switch(CHANGE){
				case CHG_HOUR:
					if(HIDE){
						if(Cut_num(&TMP_TIME) == 0xf9)
							TMP_TIME= 0x23;
						}
					else{
						if(Cut_num(&Time.Hour) == 0xf9)
							Time.Hour = 0x23;
						}
					break;
				case CHG_MIN:
					if(HIDE){
						if(Cut_num(&TMP_TIME) == 0xf9)
							TMP_TIME= 0x59;
						}
					else{
						if(Cut_num(&Time.Minute) == 0xf9)
							Time.Minute= 0x59;
						}
					break;
				case CHG_SEC:
					if(HIDE){
						if(Cut_num(&TMP_TIME) == 0xf9)
							TMP_TIME= 0x59;
						}
					else{
						if(Cut_num(&Time.Second) == 0xf9)
							Time.Second = 0x59;
						}
					break;
				case CHG_MON:
					if(HIDE){
						if(Cut_num(&TMP_TIME) == 0xf9)
							TMP_TIME= 0x12;
						}
					else{
						if(Cut_num(&Time.Month) == 0xf9)
							Time.Month= 0x12;
						}
					break;

⌨️ 快捷键说明

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