单片机按键程序,新手,请大虾们请教

laowo4019 2010-10-02 08:25:29
就是 TH0 = (65535 - DELAY_TIME) >> 8;
TL0 = (65535 - DELAY_TIME) & 0xff;
为什么在中断函数和main函数里都出现,有什么意义吗?
还有我知道这是这是是取高低八位,但不知道是什么意思,后面那个可以&0x0f吗?
如果方便的话把这程序都给解释了。

#include<reg52.h>
#include<absacc.h>

#define DELAY_TIME 20000
sbit LED_BIT = P1^6;
unsigned char key_h,key_v,key_tmp,key_val,last_key_val;
void tc0_srv(void) interrupt 1
{
TH0 = (65535 - DELAY_TIME) >> 8;
TL0 = (65535 - DELAY_TIME) & 0xff;

key_val = 0;
for(key_h = 4;key_h < 8;key_h ++)
{
P0 = (1 << key_h);//对应行拉高
P2 = 0x88;
P3 &= ~(1 << 6);
P3 |= (1 << 6);

P2 = 0x90;
P3 &= ~(1 << 7);
P0 |= 0xf0;
key_tmp = P0 & 0xf0;
P3 |= (1 << 7);

if(key_tmp)//有按键按下
{
for(key_v = 4;key_v < 8;key_v ++)
{
if(key_tmp & (1 << key_v))//第key_v位为1
{
key_val = (key_h - 4) * 4 + (key_v - 4) + 1;
break;
}
}
}
if(key_val) break;
}
if(last_key_val != key_val)
{
last_key_val = key_val;
}
else
{
if(last_key_val)//有按键被可靠按下
{
P0 = key_val;
LED_BIT = 1;
LED_BIT = 0;
}
}
}

void init_tc0(void)
{
TMOD = 1;
TH0 = (65535 - DELAY_TIME) >> 8;
TL0 = (65535 - DELAY_TIME) & 0xff;
ET0 = 1;
TR0 = 1;
}

void main(void)
{
init_tc0();
EA = 1;
P0 = 0;
LED_BIT = 1;
LED_BIT = 0;
while(1);
}
...全文
60 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
laowo4019 2010-10-03
  • 打赏
  • 举报
回复
那发到哪里去?这是我刚申请的,不太懂,麻烦告诉下……
xxmiiiiiiiiii 2010-10-02
  • 打赏
  • 举报
回复
发错地方了吧

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧