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

📄 hulandengm16.c

📁 这是带四乘四按键的程序,带LCD显示,可以控制灯饰单色,七彩变化,调光的程序,用AVRM16写的程序
💻 C
📖 第 1 页 / 共 4 页
字号:
			  }
			 else
			  {
			   scan=0;
			  }
            for(i=scan,j=0;i<16;i++,j++)
			 {
			  disp_ram[i*4]=pgm_read_byte(shaomiao+16+j);
			 }
			for(i=scan,j=15;i>0;i--,j--)
			 {
			  disp_ram[i*4-4]=pgm_read_byte(shaomiao+16+j);
			 }
			for(i=0;i<16;i++)
			 {
			  disp_ram[i*4+1]=disp_ram[i*4];
			  disp_ram[i*4+2]=disp_ram[i*4];
			  disp_ram[i*4+3]=disp_ram[i*4];
			 }
			
			TCNT1L=data.byte[0];
            TCNT1H=data.byte[1];
			break;
    
	 case 4: if(scan==0)
	          {
			   scan=1;
			  }
			 else
			  {
			   scan=0;
			  }
			 for(i=0,j=0;i<16;i++,j+=2)
			  {
			   disp_ram[i*4]=pgm_read_byte(xiaoguo+scan*32+j);
			   disp_ram[i*4+1]=pgm_read_byte(xiaoguo+scan*32+j+1);
			  }
			 for(i=0,j=0;i<16;i++,j+=2)
			  {
			   disp_ram[i*4+2]=pgm_read_byte(xiaoguo+2*32+j);
			   disp_ram[i*4+3]=pgm_read_byte(xiaoguo+2*32+j+1);
			  }
			 TCNT1L=data.byte[0];
             TCNT1H=data.byte[1];
			 break;
			 
	
	}
   }
 }

void update_color(void)
 {
  switch(color)                                   //更新当前颜色
    {
	 case 1:
             LCM12864_Disp_Char_x_16(1,16,4,64,1); 
             break; 
   
     case 2:
             LCM12864_Disp_Char_x_16(1,16,4,64,2); 
             break;  
 
	 case 3:
             LCM12864_Disp_Char_x_16(1,16,4,64,3); 
             break; 
			 
     case 4:
             LCM12864_Disp_Char_x_16(1,16,4,64,18); 
             break; 
			 
	 case 5:
             LCM12864_Disp_Char_x_16(1,16,4,64,19); 
             break; 
			 
	 case 6:
             LCM12864_Disp_Char_x_16(1,16,4,64,20); 
             break; 
			 
     case 7:
             LCM12864_Disp_Char_x_16(1,16,4,64,21); 
             break; 
    }
}


void update_type(void)
 {
  switch(type)
    {
	 case 0:                                             //PH7.62
	         LCM12864_Disp_Char_x_16(1,8,0,56,13);
             LCM12864_Disp_Char_x_16(1,8,0,64,14);
             LCM12864_Disp_Char_x_16(1,8,0,72,12);
             LCM12864_Disp_Char_x_16(1,8,0,80,7);
             LCM12864_Disp_Char_x_16(1,8,0,88,11);
             LCM12864_Disp_Char_x_16(1,8,0,96,6);
			 LCM12864_Disp_Char_x_16(1,8,0,104,2);
			 LCM12864_Disp_Char_x_16(1,8,0,112,12);
			 break;
	 case 1:                                             //PH16 全彩
	         LCM12864_Disp_Char_x_16(1,8,0,56,13);
             LCM12864_Disp_Char_x_16(1,8,0,64,14);
	         LCM12864_Disp_Char_x_16(1,8,0,72,1);
             LCM12864_Disp_Char_x_16(1,8,0,80,6);
             LCM12864_Disp_Char_x_16(1,16,0,88,10);
			 LCM12864_Disp_Char_x_16(1,16,0,104,17);
             break;
			 
	 case 2:                                             //数码管
	         LCM12864_Disp_Char_x_16(1,8,0,56,12);
	         LCM12864_Disp_Char_x_16(1,16,0,64,14);
             LCM12864_Disp_Char_x_16(1,16,0,80,15);
			 LCM12864_Disp_Char_x_16(1,16,0,96,16);
			 LCM12864_Disp_Char_x_16(1,8,0,112,12);
			 LCM12864_Disp_Char_x_16(1,8,0,120,12);
			 break;
			 
	 case 3:                                             //7.62双色
	         LCM12864_Disp_Char_x_16(1,8,0,56,7);
             LCM12864_Disp_Char_x_16(1,8,0,64,11);
             LCM12864_Disp_Char_x_16(1,8,0,72,6);
             LCM12864_Disp_Char_x_16(1,8,0,80,2);
             LCM12864_Disp_Char_x_16(1,16,0,88,43);
             LCM12864_Disp_Char_x_16(1,16,0,104,5);
			 break;
  }
 }


void update_mode_default(void)
 {
   switch(mode)
    {
	 case 0:
             LCM12864_Disp_Char_x_16(1,16,2,64,10);   //全亮
             LCM12864_Disp_Char_x_16(1,16,2,88,11); 
			 LCM12864_Disp_Char_x_16(1,8,2,104,12);
			 break;
			 
	 case 1:LCM12864_Disp_Char_x_16(1,16,2,64,12);   //扫描1
             LCM12864_Disp_Char_x_16(1,16,2,88,13);
			 LCM12864_Disp_Char_x_16(1,8,2,104,1);
             break;
			 
     case 2:LCM12864_Disp_Char_x_16(1,16,2,64,12);   //扫描2
             LCM12864_Disp_Char_x_16(1,16,2,88,13); 
			 LCM12864_Disp_Char_x_16(1,8,2,104,2);
             break;
			 
	 case 3:LCM12864_Disp_Char_x_16(1,16,2,64,12);   //扫描3
             LCM12864_Disp_Char_x_16(1,16,2,88,13); 
			 LCM12864_Disp_Char_x_16(1,8,2,104,3);
             break;
			 
     case 4:LCM12864_Disp_Char_x_16(1,16,2,64,22);   //效果
	         LCM12864_Disp_Char_x_16(1,16,2,88,23);  
			 LCM12864_Disp_Char_x_16(1,8,2,104,12);
			 break;
	}
 }

void update_mode(void)
 {
  switch(mode)
	 {
	  case 0: LCM12864_Disp_Char_x_16(1,16,2,64,10);   //全亮
               LCM12864_Disp_Char_x_16(1,16,2,88,11); 
			   LCM12864_Disp_Char_x_16(1,8,2,104,12);
			   break;
			   
	  case 1: LCM12864_Disp_Char_x_16(1,16,2,64,44);   //渐变
               LCM12864_Disp_Char_x_16(1,16,2,88,45); 
			   LCM12864_Disp_Char_x_16(1,8,2,104,12);
			   break;
			   
	  case 2: LCM12864_Disp_Char_x_16(1,16,2,64,46);   //自动
               LCM12864_Disp_Char_x_16(1,16,2,88,47); 
			   LCM12864_Disp_Char_x_16(1,8,2,104,1);
			   break;
			   
	  case 3: LCM12864_Disp_Char_x_16(1,16,2,64,46);   //自动
               LCM12864_Disp_Char_x_16(1,16,2,88,47); 
			   LCM12864_Disp_Char_x_16(1,8,2,104,2);
			   break;
	 }
 }

//更新默认模式下的显示数据
void update_default()
 { 
  if(type==2)
   {
    update_mode();
   }
  else
   {
    update_mode_default();
   }
  update_type();
  update_color();
   
 }
 

//更新设置模式1下的显示数据 
void update_set1()
 {
  if(show<4)
   {
 	
    LCM12864_Disp_Char_x_16(1,8,0,0,12);
    LCM12864_Disp_Char_x_16(1,8,0,32,1);        //速度设置
    LCM12864_Disp_Char_x_16(1,8,0,40,11);
    LCM12864_Disp_Char_x_16(1,16,0,48,29);
    LCM12864_Disp_Char_x_16(1,16,0,64,30);
    LCM12864_Disp_Char_x_16(1,16,0,80,27);
    LCM12864_Disp_Char_x_16(1,16,0,96,28);
 
    LCM12864_Disp_Char_x_16(1,8,2,0,12); 
    LCM12864_Disp_Char_x_16(1,8,2,32,2);       //亮度设置 
    LCM12864_Disp_Char_x_16(1,8,2,40,11);
    LCM12864_Disp_Char_x_16(1,16,2,48,11);
    LCM12864_Disp_Char_x_16(1,16,2,64,30);
    LCM12864_Disp_Char_x_16(1,16,2,80,27);
    LCM12864_Disp_Char_x_16(1,16,2,96,28);
  
    LCM12864_Disp_Char_x_16(1,8,4,0,12);
    LCM12864_Disp_Char_x_16(1,8,4,32,3);      //级连屏数设置
    LCM12864_Disp_Char_x_16(1,8,4,40,11);
    LCM12864_Disp_Char_x_16(1,16,4,48,31);
    LCM12864_Disp_Char_x_16(1,16,4,64,32);
    LCM12864_Disp_Char_x_16(1,16,4,80,33);
    LCM12864_Disp_Char_x_16(1,16,4,96,34);
   }
  if((show<7)&&(show>3))
   {
	
    LCM12864_Disp_Char_x_16(1,8,0,0,12);
    LCM12864_Disp_Char_x_16(1,8,0,32,4);        //颜色数量设置
    LCM12864_Disp_Char_x_16(1,8,0,40,11);
    LCM12864_Disp_Char_x_16(1,16,0,48,4);
    LCM12864_Disp_Char_x_16(1,16,0,64,5);
    LCM12864_Disp_Char_x_16(1,16,0,80,14);
    LCM12864_Disp_Char_x_16(1,16,0,96,0);
	
	LCM12864_Disp_Char_x_16(1,8,2,0,12); 
    LCM12864_Disp_Char_x_16(1,8,2,32,5);       //灰度级数
    LCM12864_Disp_Char_x_16(1,8,2,40,11);
    LCM12864_Disp_Char_x_16(1,16,2,48,48);
    LCM12864_Disp_Char_x_16(1,16,2,64,30);
    LCM12864_Disp_Char_x_16(1,16,2,80,31);
    LCM12864_Disp_Char_x_16(1,16,2,96,34);
  
    LCM12864_Disp_Char_x_16(1,8,4,0,12);
    LCM12864_Disp_Char_x_16(1,8,4,32,6);      //暂未使用
    LCM12864_Disp_Char_x_16(1,8,4,40,11);
    LCM12864_Disp_Char_x_16(1,16,4,48,39);
    LCM12864_Disp_Char_x_16(1,16,4,64,40);
    LCM12864_Disp_Char_x_16(1,16,4,80,41);
    LCM12864_Disp_Char_x_16(1,16,4,96,42);
   }
  LCM12864_Disp_Char_x_16(1,16,6,0,35);
  LCM12864_Disp_Char_x_16(1,16,6,16,36);     //选择
  
  LCM12864_Disp_Char_x_16(1,16,6,96,37);
  LCM12864_Disp_Char_x_16(1,16,6,112,38);   //返回
  
  switch(show%3)                             //显示 "箭头"
   {
    case 1: LCM12864_Disp_Char_x_16(1,8,0,0,15);
	         break;
			 
	case 2: LCM12864_Disp_Char_x_16(1,8,2,0,15);
	         break;
		
	case 0:LCM12864_Disp_Char_x_16(1,8,4,0,15);
	         break;
   }
 }
 
void menu_two()
 {
  switch(show)
   {
    case 51:   LCM12864_Disp_Char_x_16(1,16,0,32,29);
               LCM12864_Disp_Char_x_16(1,16,0,48,30);
               LCM12864_Disp_Char_x_16(1,16,0,64,27);
               LCM12864_Disp_Char_x_16(1,16,0,80,28);    //速度设置
			   
			   LCM12864_Disp_Char_x_16(1,16,4,32,29);
               LCM12864_Disp_Char_x_16(1,16,4,48,30);
			   LCM12864_Disp_Char_x_16(1,8,4,64,10);
			   LCM12864_Disp_Char_x_16(1,8,4,80,speed);
			   break;
			   
	case 52:            
               LCM12864_Disp_Char_x_16(1,16,0,32,11);       //亮度设置 
               LCM12864_Disp_Char_x_16(1,16,0,48,30);
               LCM12864_Disp_Char_x_16(1,16,0,64,27);
               LCM12864_Disp_Char_x_16(1,16,0,80,28);
			   
			   LCM12864_Disp_Char_x_16(1,16,4,32,11);
               LCM12864_Disp_Char_x_16(1,16,4,48,30);
			   LCM12864_Disp_Char_x_16(1,8,4,64,10);
			   LCM12864_Disp_Char_x_16(1,8,4,80,brightness);
			   break;
			   
    case 53:  
	           LCM12864_Disp_Char_x_16(1,16,0,32,31);       //级连屏数
               LCM12864_Disp_Char_x_16(1,16,0,48,32);
               LCM12864_Disp_Char_x_16(1,16,0,64,33);
               LCM12864_Disp_Char_x_16(1,16,0,80,34);
			   
			    LCM12864_Disp_Char_x_16(1,16,4,16,31);
			   LCM12864_Disp_Char_x_16(1,16,4,32,32);
               LCM12864_Disp_Char_x_16(1,16,4,48,34);
			   LCM12864_Disp_Char_x_16(1,8,4,64,10);
			   LCM12864_Disp_Char_x_16(1,8,4,80,disp_number);
			   break;
			   
	case 54:  
	           LCM12864_Disp_Char_x_16(1,16,0,32,4);       //颜色数
               LCM12864_Disp_Char_x_16(1,16,0,48,5);
               LCM12864_Disp_Char_x_16(1,16,0,64,14);
               LCM12864_Disp_Char_x_16(1,16,0,80,0);
			   
			   LCM12864_Disp_Char_x_16(1,16,4,32,14);
               LCM12864_Disp_Char_x_16(1,16,4,48,0);
			   LCM12864_Disp_Char_x_16(1,8,4,64,10);
			   LCM12864_Disp_Char_x_16(1,8,4,80,color_amount);
			   break;
			   
	case 55:  
	           LCM12864_Disp_Char_x_16(1,16,0,32,48);       //灰度级数
               LCM12864_Disp_Char_x_16(1,16,0,48,30);
               LCM12864_Disp_Char_x_16(1,16,0,64,31);
               LCM12864_Disp_Char_x_16(1,16,0,80,34);
			   
			   LCM12864_Disp_Char_x_16(1,16,4,16,48);
               LCM12864_Disp_Char_x_16(1,16,4,32,30);
			   LCM12864_Disp_Char_x_16(1,8,4,48,10);
			   if(gray_scale_set/1000==0)
			    {
				 LCM12864_Disp_Char_x_16(1,8,4,64,12);  //屏蔽数字前面的0
				}
			   else
			    {
			     LCM12864_Disp_Char_x_16(1,8,4,64,gray_scale_set/1000);
				}
			   if((gray_scale_set/100%10==0)&&(gray_scale_set/1000==0))
			    {
				 LCM12864_Disp_Char_x_16(1,8,4,72,12);  //屏蔽数字前面的0
				}
			   else
			    {
			     LCM12864_Disp_Char_x_16(1,8,4,72,gray_scale_set/100%10);
			    }
			   LCM12864_Disp_Char_x_16(1,8,4,80,gray_scale_set/10%10);
			   LCM12864_Disp_Char_x_16(1,8,4,88,gray_scale_set%10);
			   break;
    }
 }
 
void disp_update()
  {
   switch(disp_set)
    {
	 case 0:update_default();
	         break;
			 
	 case 1:update_set1();
	         break;
	 
	 case 2:menu_two();
	         LCM12864_Disp_Char_x_16(1,8,6,0,12);
			 LCM12864_Disp_Char_x_16(1,8,6,8,12);
			 LCM12864_Disp_Char_x_16(1,8,6,16,12);
			 LCM12864_Disp_Char_x_16(1,8,6,24,12);  //屏蔽"选择"
			 
			 LCM12864_Disp_Char_x_16(1,16,6,96,37);
             LCM12864_Disp_Char_x_16(1,16,6,112,38);   //返回
	         break;
	}
	
  }
 
void disp_default()
 {
  LCM12864_Disp_Char_x_16(1,16,0,16,6);
 LCM12864_Disp_Char_x_16(1,16,0,32,7);
 LCM12864_Disp_Char_x_16(1,8,0,48,10);
 LCM12864_Disp_Char_x_16(1,16,4,16,4);
 LCM12864_Disp_Char_x_16(1,16,4,32,5);
 LCM12864_Disp_Char_x_16(1,16,4,88,5);
 LCM12864_Disp_Char_x_16(1,8,4,48,10);
 LCM12864_Disp_Char_x_16(1,16,2,16,8);
 LCM12864_Disp_Char_x_16(1,16,2,32,9);
 
 LCM12864_Disp_Char_x_16(1,16,6,0,27);
 LCM12864_Disp_Char_x_16(1,16,6,16,28);  //设置(左键标志)
 
 LCM12864_Disp_Char_x_16(1,8,2,48,10);
 } 
 
void color_set(void)
 {
  switch(color) 
   {
    case 1: color=4; break;
	
	case 2: color=5; break;
	
	case 3: color=6; break;
	
	case 4: color=2; break;
	
	case 5: color=3; break;
	
	case 6: color=7; break;
	
	case 7: color=1; break;
   }
 }
 
void send_long_frame(void)
 {
  disp_number*=5;
  send_frame();
  disp_number/=5;
 }

void led()
 {
  if(temp_gray>0)
	{
	 CBI_OE;
	 temp_gray--;
	}
  else
   {
     SBI_OE;
   }
  if(time1_count>0)
   {
     time1_count--;
   }
  else
   { 
     time1_count=gray_scale_set;
     temp_gray=gray_scale;
   }
} 
 
 
 
int main(void)
{
 unsigned int count;
 Port_init();
 LCM12864_Init();
 disp_ram_init();
 disp_default();
 disp_update();
 time1_init();
 time0_init();
 sei();
 while(1)
  {
   key();
    if((type==2)&&(mode==1))
     {
	  for(gray_scale=0;gray_scale<gray_scale_set;gray_scale++)
	   {
	    key();
	    for(count=0;count<speed*300;count++)
	     {
	      led();
	     }
	   }
	  for(gray_scale=gray_scale_set;gray_scale>0;gray_scale--)
	   {
	    key();
	    for(count=0;count<speed*300;count++)
	     {
	      led();
	     }
	   }
	 }
	 
    if((type==2)&&(mode==3))
     {
	  color_set();
	  send_long_frame();
	  if(disp_set==0)    //设置时屏蔽更新数据 以防显示错乱
	   {
		update_color();
	   }
	  for(gray_scale=0;gray_scale<gray_scale_set;gray_scale++)
	   {
	    key();
	    for(count=0;count<speed*300;count++)
	     {
	      led();
	     }
	   }
	   
	  for(gray_scale=gray_scale_set;gray_scale>0;gray_scale--)
	   {
	    key();
	    for(count=0;count<speed*300;count++)
	     {
	      led();
	     }
	   }
	 } 
  }
}


⌨️ 快捷键说明

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