|
#include <iom16v.h>
/***********************************************************************/
void delay_ms(unsigned int i) /*晶振为8M*143-2*/
{
for(i=1;i<(unsigned int)1142;i++)
{;}
}
void delay(unsigned int n)
{
unsigned int a ;
for(a=0;a<n;a++){;}
delay_ms(a);
}
/********************************************************************/
/*延时程序*/
unsigned char keypressed() /*判断是否有键按下,有键按下返回1,否则返回0*/
{
DDRC=0; /*设置为输出入口*/
PORTC=0xff; /*设置有键按下,端口被拉底置0*/
if(PINC!=0xff) /*如果pc端口不是全1,就说明是有键按下*/
return 1;
else
return 0;
}
/*扫描键值*/ /*行扫描的原理:使列为低电平,没有键按下行电平为高 */
unsigned char keyscan(void)
{
int keycode[][8]={0x08,0x10,0x11,0x12,0x113,0x14,0x15,0x1c,
0x16,0x17,0x18,0x1f,0x19,0x1a,0x1b,0x1e,
0x0f,0x00,0x03,0x09,0x02,0x01,0x1d,0x07,
};
int key[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfd,0xfb,0xf7};
unsigned int keycan;
delay_ms(10); /*消抖*/
if(keypressed()==1) /*查键值*/
{
int i,j,n,m,tempc,tempb;
DDRB=0;
PORTB=0x07;
tempb=PINB;
DDRC=0;
PORTC=0xff;
tempc=PINC;
for(i=0;i<8;i++)
{
tempc=key;
if(tempc==PINC)
{
n=i;
continue;
}
}
if((PINB&0xff)==0x03)m=0;
else if((PINB&0xff)==0x05)m=1;
else if((PINB&0xff)==0x06)m=2;
do{
}while((keyressed())==1); /*等待释放*/
keycan==keycode[m][n];
delay_ms(5);
}
return keycan;
}
/***************************************************************************/
/*主要程序*/
void main()
{
unsigned int keycan;
keycan=0x08;
if((keyressed())==1)
{
switch(keycan)
{
case 0x08: //VOLUME Control up
{DDRD=0xff;
PORTD=0xff;
}
}
}
}
编译后出现以下语句!!!
我是用ICCAVR 7软件
C:\icc\bin\imakew -f a3.mak
iccavr -o a3 -LC:\icc\lib\ -g -Wl-W -bfunc_lit:0.0x2000 -dram_end:0x25f -bdata:0x60.0x25f -dhwstk_size:16 -fihx_coff -S2 @a3.lk
unknown file type @a3.lk, passed to linker
!ERROR unknown file type '@a3.lk'
C:\icc\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1
什么意思!能帮我解决一下吗??? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|