• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

矩阵键盘的一个程序有个地方看不懂?这是确定按键位置的代码,这

kegumingxin 2016-12-30 浏览量:1298
矩阵键盘的一个程序有个地方看不懂?这是确定按键位置的代码,这里没理解是什么意思
P3=0xf0;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
temp=temp|0X0f;
P3=temp;
key=P3;
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • P3=0xf0; //設P3值
    temp=P3; //讀取P3的值,寫入temp,這裡最好宣告成volatile,否則優化時會變成temp=P3=0xf0
    temp=temp&0xf0; //and運算,取出有效位,高4位
    if(temp!=0xf0) //判斷是否相等於0xf0,即有按鍵按下時,temp值會改變
    {
    delay(10); //去抖動
    if(temp!=0xf0) //再次判斷是否相等於0xf0,經過第二次判斷,都不相等於0xf0,即為有效輸入
    {
    temp=P3; //讀取P3的值
    temp=temp|0X0f; //設置低4位為1,高4位不變,即前面兩次if判斷要的高4位
    P3=temp; //設定P3的值

    key=P3; //讀取P3的值給,key變數,同理這裡會優化變成key=P3=temp

    以上分析希望對您有用

    • 发布于 2016-12-30
    • 举报
    • 评论 1
    • 1
    • 0
kegumingxin 回复了 MOP:注解的好详细呀,万分感谢 回复

其他答案 数量:1
  • 就本段程序我这样理解:

    1、P3是一个IO口寄存器,

         P3= 0xf0;理解为设置P3口(输出)输出寄存器的值并输出。

        temp=P3;理解为读P3口(输入)寄存器输入值。

    2、这个判断按键的IO为P3的高四位。按下俺家IO口为0,未按下为1.

    按上面的条件,这段程序很好理解,先读高四位是不是有按键按下:

    P3=0xf0;   
    temp=P3;
    temp=temp&0xf0;

    判断是否有按键按下:

    if(temp!=0xf0)

    延时去抖动判断按键按下:

    delay(10);
    if(temp!=0xf0)

    读取键值:

    temp=P3;
    temp=temp|0X0f;
    P3=temp;
    key=P3;

    当然这段程序个人感觉是有点问题的。

    • 发布于2017-01-04
    • 举报
    • 评论 2
    • 1
    • 0
kegumingxin 回复了 waszhang :你也注解的很不错呀,你们2者之间,我只能选一个,好难选呀 回复
kegumingxin 回复了 waszhang :不好意思啊,谁先解决,就选谁了,希望下次见到你的时候,要快 回复

相关问题

问题达人换一批

矩阵键盘的一个程序有个地方看不懂?这是确定按键位置的代码,这