📄 leddisp.c
字号:
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 + -