|
楼主 |
发表于 2011-7-31 16:14:54
|
显示全部楼层
回复【楼主位】liquanmin
-----------------------------------------------------------------------
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.7a Standard
Automatic Program Generator
?Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 2010/8/21
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega16
Program type : Application
Clock frequency : 8.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
unsigned int i=0;
unsigned char n=1,k1=0,k2=0,k3=0,k4=0,k5=0,m1=15,m2=5,m3=12,m4=20,m5=3;
unsigned char num1=0,num2=0,time_10s=0;
bit time_10s_ok=0;
unsigned char a11[]={18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44};//21居中
unsigned char a22[]={72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97}; //3竖23横
unsigned char a33[]={130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156};// 0横 22竖
unsigned char a44[]={175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213.214,215,216,217}; // 9竖32横
unsigned int a55[]={247,248,249,250,251,252,253,254}; //从小到大加紧
#define key_input1 PIND.6 // 按键输入口
#define key_input2 PIND.7 // 按键输入口
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
unsigned char read_key(void)
{
static unsigned char key_state = 0;
unsigned char key_press1, key_press2, key_return = 0;
key_press1 = key_input1; // 读按键I/O电平
key_press2 = key_input2; // 读按键I/O电平
switch (key_state)
{
case key_state_0: // 按键初始态
if (!(key_press1&key_press2)) key_state = key_state_1; // 键被按下,状态转换到键确认态
break;
case key_state_1: // 按键确认态
if (!(key_press1&key_press2))
{
if(!key_press1)
{ key_return = 1; // 按键仍按下,按键确认输出为"1" (1)
key_state = key_state_2; // 状态转换到键释放态
}
if(!key_press2)
{ key_return = 2; // 按键仍按下,按键确认输出为"1" (1)
key_state = key_state_2; // 状态转换到键释放态
}
}
else
key_state = key_state_0; // 按键已抬起,转换到按键初始态
break;
case key_state_2:
if (key_press1&key_press2) key_state = key_state_0; //按键已释放,转换到按键初始态
break;
}
return key_return;
}
void zhixing()
{switch(n)
{case 1:
{
if(i==1)PORTC=0x01;if(i==a11[k1])PORTC=0x00;
if(i==55)PORTC=0x02;if(i==a22[k2])PORTC=0x00;
if(i==110)PORTC=0x04;if(i==a33[k3])PORTC=0x00;
if(i==165)PORTC=0x08;if(i==a44[k4])PORTC=0x00;
if(i==225)PORTC=0x10;if(i==a55[k5])PORTC=0x00;
if(i==425)//{i=0;PORTC=0x00;if((k1++)==m1){k1=k1-1;n++;}}
{i=0;PORTC=0x00;
if(m1>=k1)
{if((k1++)==m1){k1=k1-1;n++;}}
else
{if((k1--)==m1){k1=k1+1;n++;}}
}
}break;
case 2:
{
if(i==1)PORTC=0x01;if(i==a11[k1])PORTC=0x00;
if(i==55)PORTC=0x02;if(i==a22[k2])PORTC=0x00;
if(i==110)PORTC=0x04;if(i==a33[k3])PORTC=0x00;
if(i==165)PORTC=0x08;if(i==a44[k4])PORTC=0x00;
if(i==225)PORTC=0x10;if(i==a55[k5])PORTC=0x00;
if(i==425)//{i=0;PORTC=0x00;if((k2++)==m2){k2=k2-1;n++;}}
{i=0;PORTC=0x00;
if(m2>=k2)
{if((k2++)==m2){k2=k2-1;n++;}}
else
{if((k2--)==m2){k2=k2+1;n++;}}
}
} break;
case 3:
{
if(i==1)PORTC=0x00;if(i==a11[k1])PORTC=0x00;
if(i==55)PORTC=0x02;if(i==a22[k2])PORTC=0x00;
if(i==110)PORTC=0x04;if(i==a33[k3])PORTC=0x00;
if(i==165)PORTC=0x08;if(i==a44[k4])PORTC=0x00;
if(i==225)PORTC=0x10;if(i==a55[k5])PORTC=0x00;
if(i==425)//{i=0;PORTC=0x00;if((k3++)==m3){k3=k3-1;n++;}}
{i=0;PORTC=0x00;
if(m3>=k3)
{if((k3++)==m3){k3=k3-1;n++;}}
else
{if((k3--)==m3){k3=k3+1;n++;}}
}
} break;
case 4:
{
if(i==1)PORTC=0x00;if(i==a11[k1])PORTC=0x00;
if(i==55)PORTC=0x02;if(i==a22[k2])PORTC=0x00;
if(i==110)PORTC=0x04;if(i==a33[k3])PORTC=0x00;
if(i==165)PORTC=0x08;if(i==a44[k4])PORTC=0x00;
if(i==225)PORTC=0x10;if(i==a55[k5])PORTC=0x00;
if(i==425)//{i=0;PORTC=0x00;if((k4++)==m4){k4=k4-1;}}
{i=0;PORTC=0x00; //n=1;
if(m4>=k4)
{if((k4++)==m4){k4=k4-1;n++;}}
else
{if((k4--)==m4){k4=k4+1;n++;}}
}
} break;
case 5:
{
if(i==1)PORTC=0x01;if(i==a11[k1])PORTC=0x00;
if(i==55)PORTC=0x02;if(i==a22[k2])PORTC=0x00;
if(i==110)PORTC=0x04;if(i==a33[k3])PORTC=0x00;
if(i==165)PORTC=0x08;if(i==a44[k4])PORTC=0x00;
if(i==225)PORTC=0x10;if(i==a55[k5])PORTC=0x00;
if(i==425)//{i=0;PORTC=0x00;if((k5++)==m5){k5=k5-1;}}
{i=0;PORTC=0x00; //n=1;
if(m5>=k5)
{if((k5++)==m5){k5=k5-1;n=1;}}
else
{if((k5--)==m5){k5=k5+1;n=1;}}
}
} break;
default:break;
}
}
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
i++;
zhixing();
if(++time_10s>=212)
{time_10s=0;
time_10s_ok=1;
}
}
void main(void)
{unsigned char key;
DDRD.6=0;
PORTD.6=1;
DDRD.7=0;
PORTD.7=1;
DDRC=0x1f;
TCCR0=0x0a;
TIMSK=0x02;
TCNT0=0x00;
OCR0=0x31;
#asm("sei")
/*while (1)
{ if(time_10s_ok)
{time_10s_ok=0;
key=read_key();
if(key==1)
{key=0;
num1++;num2=0;
if(num1==1)
{m1=5;m2=5;m3=6;m4=30;m5=3;}
if(num1==2)
{m1=10;m2=12;m3=6;m4=30;m5=3;}
if(num1==3)
{m1=15;m2=20;m3=30;m4=30;m5=3;}
if(num1==4)
{m1=20;m2=20;m3=24;m4=30;m5=3;}
if(num1==5)
{m1=25;m2=23;m3=20;m4=32;m5=1;}
if(num1>=6)
{m1=25;m2=23;m3=20;m4=32;m5=7;}
}
if(key==2)
{key=0;
num2++;num1=0;
if(num2==1)
{m1=25;m2=23;m3=24;m4=32;m5=7;}
if(num2==2)
{m1=25;m2=15;m3=24;m4=10;m5=7;}
if(num2==3)
{m1=25;m2=5;m3=24;m4=10;m5=7;}
if(num2==4)
{m1=25;m2=5;m3=6;m4=10;m5=7;}
if(num2>=5)
{m1=25;m2=5;m3=6;m4=30;m5=1;}
}
}
}
}*/
while (1)
{ if(time_10s_ok)
{time_10s_ok=0;
key=read_key();
if(key==1)
{key=0;
num1=1;
if(num1==1)
{m1=5;m2=5;m3=6;m4=30;m5=3;num1++;}
delay_ms(1000);
if(num1==2)
{m1=10;m2=12;m3=6;m4=30;m5=3;num1++;}
delay_ms(1000);
if(num1==3)
{m1=10;m2=20;m3=35;m4=30;m5=3;num1++;}
delay_ms(1000);
if(num1==4)
{m1=20;m2=20;m3=24;m4=30;m5=3;num1++;}
delay_ms(1000);
if(num1==5)
{m1=25;m2=23;m3=20;m4=32;m5=1;num1++;}
delay_ms(1000);
if(num1>=6)
{m1=25;m2=23;m3=20;m4=32;m5=7;num1=0;}
}
if(key==2)
{key=0;
num2=1;
if(num2==1)
{m1=25;m2=23;m3=24;m4=32;m5=7;num2++;}
delay_ms(1000);
if(num2==2)
{m1=25;m2=15;m3=24;m4=10;m5=7;num2++;}
delay_ms(1000);
if(num2==3)
{m1=25;m2=5;m3=24;m4=10;m5=7;num2++;}
delay_ms(1000);
if(num2==4)
{m1=25;m2=5;m3=6;m4=10;m5=7;num2++;}
delay_ms(1000);
if(num2==5)
{m1=25;m2=5;m3=6;m4=30;m5=7;num2++;}
delay_ms(1000);
if(num2>=6)
{m1=25;m2=5;m3=6;m4=30;m5=1;num2=0;}
}
}
}
} |
|