注册 登录
编程论坛 单片机编程

P3复制0XF0 这样对的吗?

zjbook 发布于 2016-01-25 08:20, 6667 次点击
各位高手老师,P3=0xf0; temp=P3;  //赋值给P3口
        temp=temp&0xf0;// 与的值
        if(temp!=0xf0)      是否相等??我在程序里,注解了下·~~~我不是非常明白
 请各位老师,点评一下~~~~~,这程序是  网上某写的。但程序 运行正常~~~,但是键盘释放检测 ,没有~~~

#include<reg52.h>
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit dula=P2^6;  //段声明
sbit wela=P2^7;// 位声明
uchar disnum,temp,key,num;
uchar code table_du[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};

delay(uchar);
uchar keyscan();//键盘程序

void main() //主函数
{   
    disnum=16;
    wela=1;
    P0=0XFE;
    wela=0;
    while(1)
    {
    num=keyscan();   
    P0=table_du[num];
    dula=1;
    dula=0;
   
    }
   
}

uchar keyscan() //键盘扫描程序
{
    P3=0xf0;         //定义个变量
        temp=P3;  //赋值给P3口
        temp=temp&0xf0;// 与的值
        if(temp!=0xf0)// 确定不等于0xf0,但实际是相等的,
        {           //实际他应该退出的呀?  
(因为是相等的,退出!各位高手老师,这样写对的吗?)    帮我分析下,
//谢谢!!!!!
            delay(10);    //延时10秒,去抖
            if(temp!=0xf0) //再次确定不相等,执行下一条指令
            {
                temp=P3;
                temp=temp|0X0f;
                P3=temp;
                key=P3;
                switch(key)
                {
                    case 0xee:disnum=0;
                            break;
                    case 0xde:disnum=1;
                            break;
                    case 0xbe:disnum=2;
                            break;
                    case 0x7e:disnum=3;
                            break;
                    case 0xed:disnum=4;
                            break;
                    case 0xdd:disnum=5;
                            break;
                    case 0xbd:disnum=6;
                            break;
                    case 0x7d:disnum=7;
                            break;
                    case 0xeb:disnum=8;
                            break;
                    case 0xdb:disnum=9;
                            break;
                    case 0xbb:disnum=10;
                            break;
                    case 0x7b:disnum=11;
                            break;
                    case 0xe7:disnum=12;
                            break;
                    case 0xd7:disnum=13;
                            break;
                    case 0xb7:disnum=14;
                            break;
                    case 0x77:disnum=15;
                            break;
                }
            }
        }
return disnum;  //返回值
}

delay(uchar x)//延时函数
{
    uchar a,b;
    for(a=x;a>0;a--)
        for(b=200;b>0;b--);

}
4 回复
#2
zjbook2016-01-25 21:56
没人关注 菜鸟的 问题吗?各位老师。。。。
#3
hjxlj2016-01-26 18:02
你keyscan函数代码能不能写全了?
#4
zjbook2016-01-26 22:40
已经写全了,也正常使用啊~~     这样的编程代码是否正确?
#5
zjbook2016-01-26 22:41
或者说~~以后也能否这样做,求高手 老师指点。。。。弊端 有哪些?
1