【STC89c52】要是谁能发现这程序的错误,不知道的不要发言

[复制链接]
5225|28
yewuyi 发表于 2011-7-29 10:55 | 显示全部楼层
LZ写这个标题不是在侮辱自己的娘亲吗?


什么世道,连这样的人都有?

建议LZ用力狂搧自己耳光10万次,如此亵渎自己的娘亲,让人匪夷所思。
linqing171 发表于 2011-7-29 12:12 | 显示全部楼层
硬件问题吧,连个图都没有。
不会你把串口输出用的IO也用来扫描按键了吧?
包子有包福 发表于 2011-8-1 00:42 | 显示全部楼层
开关好像没有去抖,不确定是不是这个,也可能我见的程序太少了,虽然标题…但到看到了,还是想说一句。o(∩_∩)o
 楼主| ningyinga 发表于 2011-8-3 17:36 | 显示全部楼层
我终于明白了,感谢大家的提醒,第二排键盘不能发送数据是因为把P3.1口拉低了,问题在于P3.1口有第二功能引脚TXD,此引脚只有在高电平下才能工作;而我一直把它拉低,所以即使检测到键盘按下也不能发送数据,所以在发送数据前还得把P3.1口拉高
正确程序如下:
unsigned char code table[]={
48,49,50,51,
52,53,54,55,
56,57,58,59};
void display();
void main()
{
        TMOD=0x20;
        TH1=0XE8;
        TL1=0XE8;
        TR1=1;
        SM0=0;
        SM1=1;
       
        while(1)
        {
                display();       
        }
}
void display()
{       
   
        P3=0xfe;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {  
                switch(temp)
                {
                        case 0xe0:num=1;break;
                        case 0xd0:num=2;break;
                        case 0xb0:num=3;break;
                        case 0x70:num=4;break;
                }
                while(temp!=0xf0)
                {
                        temp=P3;
                        temp=temp&0xf0;
                }
                P3=0xff;
            P1=table[num];
                SBUF=table[num];
                while(!TI);
                TI=0;
        }       
        P3=0xfd;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {  
                switch(temp)
                {
                        case 0xe0:num=5;break;
                        case 0xd0:num=6;break;
                        case 0xb0:num=7;break;
                        case 0x70:num=8;break;
                }
                while(temp!=0xf0)
                {
                        temp=P3;
                        temp=temp&0xf0;
                }
                P3=0xff;
            P1=table[num];
                SBUF=table[num];
                while(!TI);
                TI=0;
        }       

        P3=0xfb;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {  
                switch(temp)
                {
                        case 0xe0:num=9;break;
                        case 0xd0:num=10;break;
                        case 0xb0:num=11;break;
                        case 0x70:num=12;break;
                }
                while(temp!=0xf0)
                {
                        temp=P3;
                        temp=temp&0xf0;
                }
                if(num==9)
                {
                P3=0xff;
                SBUF=table[num];
                while(!TI);
                TI=0;       
                }
                else
                {
                        SBUF=49;
                        while(!TI);
                        TI=0;
                        P3=0xff;
                        SBUF=table[num-10];
                        while(!TI);
                        TI=0;
                }
        }
        P3=0xf7;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {  
                switch(temp)
                {
                        case 0xe0:num=13;break;
                        case 0xd0:num=14;break;
                        case 0xb0:num=15;break;
                        case 0x70:num=16;break;
                }
                while(temp!=0xf0)
                {
                        temp=P3;
                        temp=temp&0xf0;
                }
                SBUF=49;
                while(!TI);
                TI=0;
                P3=0xff;
                SBUF=table[num-10];
                while(!TI);
                TI=0;
        }               

}
hotpower 发表于 2011-8-3 17:42 | 显示全部楼层
没有程序的架构。
aihe 发表于 2011-8-3 19:54 | 显示全部楼层
我知道,我发言,就是不告诉你
yangdejin8 发表于 2011-8-7 21:43 | 显示全部楼层
icecut 发表于 2011-8-7 21:46 | 显示全部楼层
看了题目,我就来围观lz。。。问个问题还装大爷
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
0