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

📄 leddisp.c

📁 显示驱动程序(由8*8点阵块组成一个大点阵显示屏
💻 C
📖 第 1 页 / 共 3 页
字号:
 DDRC  = 0xFF;
 PORTD = 0xFF;
 DDRD  = 0xFF;
}

//TIMER0 initialisation - prescale:1024
// WGM: Normal
// desired value: 20mSec
// actual value: 19.968mSec (0.2%)
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 TCNT0 = 0x64; //set count
 OCR0  = 0x9C;  //set compare
 TCCR0 = 0x05; //start timer
}

#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{unsigned char j,dat;unsigned char hour_min_sec[128]={0,0};unsigned int i;
 TCNT0 = 0x64; //reload counter value
 data_high=0x00;
 data_low=0x00; 

 //==================================================================

/*
if(key_busy==1)		//显示固定信息闲
{			
key_busy=0; 										//显示固定信息忙
switch (key_ind_en)
{
case 1:// 
 					 {
					 for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi1[i]; //把显示点阵放入显示区
					 }
					 
break;
case 2:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi2[i]; //把显示点阵放入显示区
					 }
break;
case 3:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi3[i]; //把显示点阵放入显示区
					 }
break;
case 4:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi4[i]; //把显示点阵放入显示区
					 }				
break;
case 5:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi5[i]; //把显示点阵放入显示区
					 }
break;
case 6:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi6[i]; //把显示点阵放入显示区
					 }
break;
case 7:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi7[i]; //把显示点阵放入显示区
					 }						 
break;
case 8:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi8[i]; //把显示点阵放入显示区
					 }
break;
case 9:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi9[i]; //把显示点阵放入显示区
					 }
break;					 
case 10:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi10[i]; //把显示点阵放入显示区
					 }						
default :
break;
}
}					 
*/
 //==================================================================*/
 
ms++;
if(ms==5)
{ms=0;
sec++;
if(sec==60)
  {
  sec=0;
  min++;
  if(min==60)
     {
	 min=0;
	 hour++;
	 if(hour=24)
	 hour=0;
	 }
  }
if(key_inc_en==0)// 
 					 {key_inc_en==2;
					  for(i=0;i<257;i++)
					  led_disp_buff[i]=hanziku1[i]; //把显示点阵放入显示区
					 }  
 if(key_inc_en==1)//
 {
  					 j=0;
 					  for(i=0;i<16;i++)
  					  {
  					  led_disp_buff[j++]=ascziku[(hour/10)*16+i]; //把显示点阵放入显示区
  					  led_disp_buff[j++]=ascziku[(hour%10)*16+i]; //把显示点阵放入显示区
  					  }   
 					   for(i=0;i<16;i++)
  					   {
  					   led_disp_buff[j++]=ascziku[160+i]; //把显示点阵放入显示区
  					   led_disp_buff[j++]=ascziku[(min/10)*16+i]; //把显示点阵放入显示区
  					   } 
  					   for(i=0;i<16;i++)
  					   {
  					   led_disp_buff[j++]=ascziku[(min%10)*16+i]; //把显示点阵放入显示区
  					   led_disp_buff[j++]=ascziku[160+i]; //把显示点阵放入显示区
  					   } 
  					   for(i=0;i<16;i++)
  					   {
  					   led_disp_buff[j++]=ascziku[(sec/10)*16+i]; //把显示点阵放入显示区
  					   led_disp_buff[j ++]=ascziku[(sec%10)*16+i]; //把显示点阵放入显示区
  					   }
 }  

}      
  
}

void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 timer0_init(); 
 
 MCUCR = 0x00; 
 MCUCSR = 0x80;
 MCUCSR = 0x80;
 GICR  = 0x00;
 TIMSK = 0x01; //timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialised
}
void delay1s(void) 	   	   			  //演示程序
{unsigned int i;
for(i=0;i<10;i++);
}
void led_disp_circle(void) 			  	//LED显示程序
{unsigned char i,dat;
 if(led_disp_add>=64)
 {led_disp_add=0;led_disp_num=0;}
 data_high=0x00;
 data_low=0x00; 
 led_address=led_disp_add;
  for(i=0;i<2;i++)
 {
 data_high=led_disp_buff[led_disp_num];
 data_low=led_disp_buff[led_disp_num+1];
 delay1s();
 data_high=0x00;
 data_low=0x00;
 }
 led_disp_num+=2;
 led_disp_add++;
}

void key_scan(void)
{unsigned int i;
 clr_key;
 if(key_inc==0)						 		//按键4				 
 {
  			   key_hit_times++;
 				 if(key_hit_times==500)
 					{key_hit_times=0;disp_message_turn_en=0;
					key_inc_en++;
 					if(key_inc_en!=1)key_inc_en=0;	//显示汉字
 					else key_inc_en=1;				//显示时间
					}
 }
else if(key_ind==0)	 	 								//按键3
 {
  			   key_hit_times++;
 				 if(key_hit_times==500)
 					{key_hit_times=0;key_inc_en=2;key_ine_en=1;
					key_busy=1;//key_busy=1显示固定信息闲
					key_ind_en++;
 					if(key_ind_en>=11)key_ind_en=0;
					}
 }
else if(key_ine==0)	 							   //按键2
 {
  			   key_hit_times++;
 				 if(key_hit_times==500)
 					{key_hit_times=0;disp_message_turn=0;key_inc_en=2;
					key_ine_en++;
 					if(key_ine_en==3)key_ine_en=0;//显示左移
					}
 }
else if(key_inf==0)	 	 									//按键1
 {	 
  			   key_hit_times++;
 				 if(key_hit_times==500)
 					{key_hit_times=0;key_inc_en=2;disp_message_turn_en=0;
 					key_inc_en=0;key_ind_en=0;key_ine_en=0;//恢复开始信息显示
					for(i=0;i<255;i++)
					led_disp_buff[i]=hanziku1[i]; //把显示点阵放入显示区					
					}
 } 
}
void message_disp(void)
{unsigned int i;
if(key_busy==1)		//显示固定信息闲
{			
key_busy=0; 										//显示固定信息忙
switch (key_ind_en)
{
case 1:// 
 					 {
					 for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi1[i]; //把显示点阵放入显示区
					 }
					 
break;
case 2:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi2[i]; //把显示点阵放入显示区
					 }
break;
case 3:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi3[i]; //把显示点阵放入显示区
					 }
break;
case 4:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi4[i]; //把显示点阵放入显示区
					 }				
break;
case 5:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi5[i]; //把显示点阵放入显示区
					 }
break;
case 6:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi6[i]; //把显示点阵放入显示区
					 }
break;
case 7:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi7[i]; //把显示点阵放入显示区
					 }						 
break;
case 8:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi8[i]; //把显示点阵放入显示区
					 }
break;
case 9:// 
 					 {
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi9[i]; //把显示点阵放入显示区
					 }
break;					 
case 10:// 
 					 {
					 key_ind_en=0;
					  for(i=0;i<257;i++)
					 led_disp_buff[i]=xinzi_hanzi10[i]; //把显示点阵放入显示区
					 }						
default :
break;
}
}	
}
//
void main(void)
{unsigned int i,j;
 init_devices();
 led_disp_add=0; led_disp_num=0; offset=0; offset_time=0;delay_disp_led=0;
 disp_led_en=0; hour=16;min=30;sec=0;ms=0;key_hit_times=0;key_busy=0;
 //insert your functional code here...
  for(i=0;i<512;i++)
 led_disp_buff[i]=0x00; //把显示点阵放入显示区
 for(i=0;i<257;i++)
 led_disp_buff[i]=hanziku1[i]; //把显示点阵放入显示区
 while(1)
 {
 led_disp_circle();
 key_scan();
 led_disp_circle();
 if(key_ine_en==1&key_inc_en!=1)// 
 		 {
		  delay_disp_led++;
		  if(delay_disp_led==400)
		 {
		 left_move();delay_disp_led=0;
		 if(disp_message_turn_en=1)
		 {
		 disp_message_turn++;
		 if(disp_message_turn==64)
		 	{key_busy=1;key_ind_en++;disp_message_turn=0;}
		 }
		 } 
   		}
/*else if(key_ine_en==2&key_inc_en!=1)// 
 		 {   
		  delay_disp_led++;
		   if(delay_disp_led==100)
		  {right_move();delay_disp_led=0;}
		} */
led_disp_circle();		
message_disp();		
	}
}		 					 					  

⌨️ 快捷键说明

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