bit KEYFlag = 1 //指示按键状态,'1'为d起态,'0'按下态
/********************************
按键去抖
*********************************/
void KEYDelay()
{
unsigned char i = 200
while(i--)
}
/********************************
键翻译
*********************************/
unsigned char KEY_Tran(unsigned char Key)
{
switch(Key)
{
case 0xee: return 0break//根据按键编码返回对应的键值
case 0xde: return 1break
case 0xbe: return 2break
case 0x7e: return 3break
case 0xed: return 4break
case 0xdd: return 5break
case 0xbd: return 6break
case 0x7d: return 7break
case 0xeb: return 8break
case 0xdb: return 9break
case 0xbb: return 0x0abreak
case 0x7b: return 0x0bbreak
case 0xe7: return 0x0cbreak
case 0xd7: return 0x0dbreak
case 0xb7: return 0x0ebreak
case 0x77: return 0x0fbreak
default: break
}
}
/********************************
键扫描
*********************************/
unsigned char KEY_Scan()
{
unsigned char KEY_Value
P2 = 0x0f
KEY_Value = P2
P2 = 0xf0
KEY_Value |= P2
return KEY_Value
}
/********************************
查键
*********************************/
void KEY()
{
static bit KEYFlag = 1
static unsigned char KEYCode
if(KEYFlag)
{
if(KEY_Scan()!=0xff)
{
KEYCode = KEY_Scan()
KEYDelay()//有按键按下延时去抖
if(KEYCode==KEY_Scan())
{
//键号 = KEY_Tran(KEYCode)
//此处添加功能模块
KEYFlag = 0
}
}
}
else
{
if(KEY_Scan()==0xff)
{
KEYDelay()//按键d起延时去抖
if(KEY_Scan()==0xff)
KEYFlag = 1
}
}
}
呵呵,首先,verilog里面没有所谓的指令,那是汇编程序里面的东西。在always中,如果你写的程序只是用来仿真,允许有延时语句,直接回“#5”,就是延迟5个时间单位。
但如果你写的东西是要用来进行综合的,那就只能用计算器来延时了。当计算器计到某个值时,作为其它动作的条件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)