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

📄 按键.c

📁 基于AVR单片机的热电偶测量系统源码
💻 C
📖 第 1 页 / 共 2 页
字号:
{ 
    uchar data=0,i; 
         
     mDS1302IO_Out; 
     reg+=1;//读标志 
     mSetDS1302IO; 
          
    mClrDS1302RST;
    wait; 
    mClrDS1302SCK;
    wait;
	wait;
    mSetDS1302RST;
    wait;
         
         for(i=0;i<8;i++) 
    {  
        if(reg&BIT(i))
                       mSetDS1302IO; 
        else          
                       mClrDS1302IO; 
        wait; 
        mSetDS1302SCK; 
        wait; 
        mClrDS1302SCK;
        wait; 
        
    } 
     
        mDS1302IO_In; 
       wait;
	   wait;
         
    for(i=0;i<8;i++) 
    {  
         if(mTestDS1302IO)
                     data |= BIT(i); 
         else            
                     data &= ~BIT(i); 
         mSetDS1302SCK; 
         wait; 
         mClrDS1302SCK;
         wait; 
    } 
       wait;
       mClrDS1302RST;
       wait;
     
        return(data); 
} 

void pDS1302_Init(void) 
{ 
    pDS1302_Write(mDS1302_CONTROL_Reg,0x00); //关闭写保护  
   // pDS1302_Write(mDS1302_SEC_Reg,0x80);     //暂停  
    pDS1302_Write(mDS1302_CHARGER_Reg,0x00); //涓流充电 A9  
   // pDS1302_Write(mDS1302_HOUR_Reg,0x14);    //时 
    //pDS1302_Write(mDS1302_MIN_Reg,0x25);     //分 
    //pDS1302_Write(mDS1302_SEC_Reg,0x20);     //秒 
    pDS1302_Write(mDS1302_CONTROL_Reg,0x80); //打开写保护 
} 


void Delay10ms(uchar count)
{
     uchar TimeCount;
	 uint j;
     TimeCount = count;
	 while(TimeCount > 0)
	 {
	     for(j=0;j<200;j++)
		 {;;}
		 TimeCount--;
	 }
}
void Com0_Init(void)                                    
{
     uint baud;
	 baud=0x33;
	 
	 UCSR0B = 0x00; 		  //设置波特率时关闭发送和接收
	 UBRR0H=(uchar)(baud>>8);
     UBRR0L=(uchar)baud;
	 
     UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);          // 8位数据+1位STOP位+无奇偶校验
     UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);           //允许发送和接收和接收终断使能
}


/*#pragma interrupt_handler ISR_Uart0_Rx:iv_USART0_RXC
uchar ISR_Uart0_Rx(void)
{   
	uchar temp;
	temp=UDR0;
	
	while (!(UCSR0A & (1<<UDRE0))); 	  
	 	UDR0 = temp;	
}
*/
//======================================================//
void Uart0_Transmit(uchar data)
{
	   while (!(UCSR0A & (1<<UDRE0))); 	  
	 	  UDR0 = data;
}



void inchour()	 //小时加1的子程序,在调整小时的状态下按下加1键调用到此程序
{
 time_array[1]++;
 if((time_array[0]==0x02)&&(time_array[1]==0x04))
		{
		 time_array[1]=0x00;
		 time_array[0]=0x00;
		 }
if((time_array[0]!=0x02)&&(time_array[1]==0x0A))
		 {
		  time_array[0]++;
		  time_array[1]=0x00;
		  }
         
         Draw_NtoArab(0x00,0x28,time_array[0]);
	     Draw_NtoArab(0x00,0x30,time_array[1]);
         
}


void incmin()	 //分钟加1的子程序,在调整分钟的状态下按下加1按键调用到此程序
{
 time_array[3]++;
 if(time_array[3]==0x0A)
 	{
	 time_array[3]=0x00;
	 time_array[2]++;
	 	if(time_array[2]==0x06)
		 	time_array[2]=0x00;
			}
         
		 Draw_NtoArab(0x00,0x40,time_array[2]);
	     Draw_NtoArab(0x00,0x48,time_array[3]); 
}

void dechour()				   //小时减1的子程序,在调整小时的状态下按下减1按键调用到此程序
{
 
 time_array[1]--;
 if((time_array[0]==0x00)&&(time_array[1]==-1))
	 {
	  time_array[1]=0x03;
	  time_array[0]=0x02;
	  }
if((time_array[0]!=0x00)&&(time_array[1]==-1))
	   {
	   	time_array[1]=0x09;
		time_array[0]--;
		}
     
	  Draw_NtoArab(0x00,0x28,time_array[0]);
	  Draw_NtoArab(0x00,0x30,time_array[1]);
}

void decmin()			   	 //分钟减1的子程序,在调整小时的状态下按下减1按键调用到此程序
{

 time_array[3]--;
 if(time_array[3]==-1)
 	{
	 time_array[3]=0x09;
	 time_array[2]--;
	 if(time_array[2]==-1)
	 	time_array[2]=0x05;
	}
         
	     Draw_NtoArab(0x00,0x40,time_array[2]);
	     Draw_NtoArab(0x00,0x48,time_array[3]); 
}	


void  canbi0()       //参比的正负设置
{  if(leftcount%2==0)
        Bmp8x16(0x04,0x38,zhenghao);
   else 
        Bmp8x16(0x04,0x38,fuhao);
        
}

void incanbizhengshu()	 //参比的整数加1
{
 canbi_array[2]++;
 if((canbi_array[1]==0x09)&&(canbi_array[2]==0x09))
		{
		 canbi_array[1]=0x00;
		 canbi_array[2]=0x00;
		 }
if((canbi_array[1]!=0x09)&&(canbi_array[2]==0x0A))
		 {
		  canbi_array[1]++;
		  canbi_array[2]=0x00;
		  }
         
         Draw_NtoArab(0x04,0x40,canbi_array[1]);
	     Draw_NtoArab(0x04,0x48,canbi_array[2]);
         
}

void incanbixiaoshu()	 //参比的小数加1
{
 canbi_array[4]++;
 if((canbi_array[3]==0x09)&&(canbi_array[4]==0x09))
		{
		 canbi_array[3]=0x00;
		 canbi_array[4]=0x00;
		 }
if((canbi_array[3]!=0x09)&&(canbi_array[4]==0x0A))
		 {
		  canbi_array[3]++;
		  canbi_array[4]=0x00;
		  }
         
         Draw_NtoArab(0x04,0x58,canbi_array[3]);
	     Draw_NtoArab(0x04,0x60,canbi_array[4]);
         
}

void decanbizhengshu()	 //参比的整数减1
{
 
 canbi_array[2]--;
 if((canbi_array[1]==0x00)&&(canbi_array[2]==-1))
	 {
	  canbi_array[1]=0x09;
	  canbi_array[2]=0x09;
	  }
if((canbi_array[1]!=0x00)&&(canbi_array[2]==-1))
	   {
	   	canbi_array[2]=0x09;
		canbi_array[1]--;
		}
        Draw_NtoArab(0x04,0x40,canbi_array[1]);
	    Draw_NtoArab(0x04,0x48,canbi_array[2]);
           
   	 
}

void decanbixiaoshu()	 //参比的小数减1
{
 
 canbi_array[4]--;
 if((canbi_array[3]==0x00)&&(canbi_array[4]==-1))
	 {
	  canbi_array[3]=0x09;
	  canbi_array[4]=0x09;
	  }
if((canbi_array[3]!=0x00)&&(canbi_array[4]==-1))
	   {
	   	canbi_array[4]=0x09;
		canbi_array[3]--;
		}
        Draw_NtoArab(0x04,0x58,canbi_array[3]);
	    Draw_NtoArab(0x04,0x60,canbi_array[4]);   	 
}


void data_init() 
 {
  unsigned char i;
  entercount=0;
  leftcount=0;
  rightcount=0;
  position1302=0;
  positioncanbi=0x02;
  for(i=1;i<5;i++)
  canbi_array[i]=0x00;
   }

unsigned char getkey(void)
{
	 unsigned char keycode;
	 if ((PINB&0XF4)!=0XF4)
	 {
	   Delay10ms(35);
	  if((PINB&0XF4)!=0XF4)
	   {
	     	keycode=PINB&0XF4;
			while((PINB&0XF4)!=0XF4);
		}
	}
	return keycode; 
}

unsigned char getkeylock(void)
{
	unsigned char keycode;
	while((PINB&0xf4)==0xf4);
	Delay10ms(35);
	if((PINB&0xf4)!=0xf4)
	{
	    keycode=PINB&0XF4;
		while((PINB&0XF4)!=0XF4);
	}
	return keycode;
}
	
void anjian(void)
{
 unsigned char i,key,hour,min,sec;
 data_init();
 Draw_NtoArab(0x04,0x40,canbi_array[1]);
 Draw_NtoArab(0x04,0x48,canbi_array[2]);
 Draw_NtoArab(0x04,0x58,canbi_array[3]);
 Draw_NtoArab(0x04,0x60,canbi_array[4]);
 while(1)
 {
	   hour=pDS1302_Read(mDS1302_HOUR_Reg); //时 
       min=pDS1302_Read(mDS1302_MIN_Reg);  //分 
       sec=pDS1302_Read(mDS1302_SEC_Reg);  //秒 
	   time_array[0]=hour>>4;
	   time_array[1]=hour&0x0f;
	   time_array[2]=min>>4;
	   time_array[3]=min&0x0f;
	   time_array[4]=sec>>4;
	   time_array[5]=sec&0x0f;
	   Draw_NtoArab(0x00,0x28,time_array[0]);
	   Draw_NtoArab(0x00,0x30,time_array[1]);
	   Draw_NtoArab(0x00,0x40,time_array[2]);
	   Draw_NtoArab(0x00,0x48,time_array[3]);
	   Draw_NtoArab(0x00,0x58,time_array[4]);
	   Draw_NtoArab(0x00,0x60,time_array[5]);	      
     
//////////////////////键盘部分的程序////////////////////////////
	   key=getkey();
		if(key==enter)
		    {
			if(entercount==0)
			     {
				 Draw_NtoArab_rev(0x00,0x28,time_array[0]);
				 Draw_NtoArab_rev(0x00,0x30,time_array[1]);
				        while(1)
				        {
				          key=getkeylock();
				          if(key==enter)
						{
						hh=(time_array[0]<<4)|time_array[1];
						mm=(time_array[2]<<4)|time_array[3];
		                pDS1302_Write(mDS1302_CONTROL_Reg,0x00);
		                wait;
                        pDS1302_Write(mDS1302_HOUR_Reg,hh);
		                pDS1302_Write(mDS1302_MIN_Reg,mm);
		                pDS1302_Write(mDS1302_CONTROL_Reg,0x80);
		                wait;
						entercount++;
				        break;
						}
				          else if(key==up)
				        	{
				        		if(position1302==zuo)
				        			inchour();
				        		else
				        			incmin();
				        	}
				          else if(key==down)
				        	{
				        		if(position1302==zuo)
				        			dechour();
				        		else
				        			decmin();
				        		
				        	}
				          else if(key==left)
				        	{
				        		position1302=zuo;
				        		Draw_NtoArab_rev(0x00,0x28,time_array[0]);
				        		Draw_NtoArab_rev(0x00,0x30,time_array[1]);					        		
				        		Draw_NtoArab(0x00,0x40,time_array[2]);
				        		Draw_NtoArab(0x00,0x48,time_array[3]);			        		      		
				        	}
				          else
				        	{
				        		position1302=zhong;
							    Draw_NtoArab_rev(0x00,0x40,time_array[2]);
				        		Draw_NtoArab_rev(0x00,0x48,time_array[3]);				        		
				        		Draw_NtoArab(0x00,0x28,time_array[0]);
				        		Draw_NtoArab(0x00,0x30,time_array[1]);
				        	}						
				        }				       
				    }
		      else 		//进入参比设置
			{
			    Draw_NtoArab_rev(0x04,0x40,canbi_array[1]);
			    Draw_NtoArab_rev(0x04,0x48,canbi_array[2]);		 
			       while(1)
				  {
				     key=getkeylock();
				        if(key==enter)
				             {
							  Draw_NtoArab(0x04,0x40,canbi_array[1]);
			                  Draw_NtoArab(0x04,0x48,canbi_array[2]);
							  Draw_NtoArab(0x04,0x58,canbi_array[3]);
			                  Draw_NtoArab(0x04,0x60,canbi_array[4]);
							  canbianjian=canbi_array[1]*1000+canbi_array[2]*100+canbi_array[3]*10+canbi_array[4];
				    	      break;
							  }
				    	else if(key==up)
				        	{
				        		if(positioncanbi==can1)
				        			incanbizhengshu();
				        		else
				        			incanbixiaoshu();
				        	}
				        else if(key==down)
				        	{
				        		if(positioncanbi==can1)
				        			decanbizhengshu();
				        		else
				        			decanbixiaoshu();				        		
				        	}
				        else if(key==left)
				        	{
				        		positioncanbi=can1;
				        		Draw_NtoArab_rev(0x04,0x40,canbi_array[1]);
				        		Draw_NtoArab_rev(0x04,0x48,canbi_array[2]);				        		
				        		Draw_NtoArab(0x04,0x58,canbi_array[3]);
				        		Draw_NtoArab(0x04,0x60,canbi_array[4]);				        		      		
				        	}
				        else
				        	{
				        		positioncanbi=can2;
							    Draw_NtoArab_rev(0x04,0x58,canbi_array[3]);
				        		Draw_NtoArab_rev(0x04,0x60,canbi_array[4]);				        		
				        		Draw_NtoArab(0x04,0x40,canbi_array[1]);
				        		Draw_NtoArab(0x04,0x48,canbi_array[2]);			        		
				        	}			    	
				    	}
				    	entercount=0;
				   }
			}
	   }
}

uint read_max6675(void)
{
     uchar i;
     uint  x=0; 
	 clr_sck;
     wait;
     clr_cs6675;
     wait; 
     set_sck; 
     wait;
for(i=0;i<16;i++)   //读取转换结果的12位
      {
        wait;
	    clr_sck;
        if(PINB&0x08)
        x|=(1<<(15-i));
        wait;
	    set_sck;
      }
	
	x=(x&0x7fff)>>3; 
	set_cs6675;  
       return x; 
}

void max6675_display(uint x)
{      
       uint temp[5]={0,0,0,0,0};
       uint n=0,m=0;
       m=10237.5*x/4095;
       temp[0]=m/10000;
       n=m-temp[0]*10000;
       temp[1]=n/1000;
       n=n-temp[1]*1000;
       temp[2]=n/100;
       n=n-temp[2]*100;
       temp[3]=n/10;
       n=n-temp[3]*10;
       temp[4]=n/1;
       Draw_NtoArab(0x02,0x10,temp[0]);
       Draw_NtoArab(0x02,0x18,temp[1]);
       Draw_NtoArab(0x02,0x20,temp[2]);
       Draw_NtoArab(0x02,0x28,temp[3]);
       Draw_NtoArab(0x02,0x38,temp[4]);
}

void wendu6675(void)
{     uint t;
      Delay10ms(100);
 while(1)
      {
	  t=read_max6675();
          max6675_display(t);
	  Delay10ms(100);
	  }
}
 
void main()
{
	//uint abc;
	Initial_MCU();	//初始化mcu
	Initial_LCD();	//初始化LCD
	//pDS1302_Init(); 
    Clear_DDRAM(0x00,0x07); //清除lcd的所有显示内容
	Draw_Menu_Interface();	//绘制主菜单
	wendu6675();
	//abc=read_max6675();
	//ds1302display();
	//Com0_Init();
     //anjian();
}
/*-----------------------------------------------------------------*-
  --------------------END OF FILE------------------------------------
 -*-----------------------------------------------------------------*/

⌨️ 快捷键说明

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