关于51单片机位定义的问题

2019-03-24 19:37发布

下面是我在自己买的51开发板上编写的一个程序,程序实现的功能比较简单,就是在数码管上显示矩阵键盘(4X4键盘,依次编码为1~16)上按下的键值的平方值。其中P2^4~P2^7为8段数码管的位选,P0口为8段数码管的段选,P1^0~P1^3为键盘的列线,P1^4~P1^7为键盘的行线。用定时器0来刷新4位8段数码管的显示。 #include<reg52.h>
#include<intrins.h> #define uchar unsigned char
#define uint unsigned int uchar table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x84,0x8e};
uchar j=0,k=0x7f,m=0,b=0xef,a[4]={0};
uint i=0;
sbit line1=P1^0;
sbit line2=P1^1;
sbit line3=P1^2;
sbit line4=P1^3; void delay(uchar z)
{
 uchar x,y;
 for(x=z;x>0;x--)
  for(y=250;y>0;y--);
} void time0_initial()
{
 TMOD=0x01;
 TH0=(65535-1000)/256;
 TL0=(65535-1000)%256;
 EA=1;
 ET0=1;
 TR0=1;
} void main()
{
 time0_initial();
 AC=1;
 i=0;
 while(1)
 {
  for(m=0;m<4;m++)
  {
   P1=_crol_(b,m);
   if(line1==0)
   {
    delay(2);
    if(line1==0)
    {
     i=m*4+1;
     i=i*i;
     while(!line1);
     delay(2);
    }
   }
   if(line2==0)
   {
    delay(2);
    if(line2==0)
    {
     i=m*4+2;
     i=i*i;
     while(!line2);
     delay(2);
    }
   } 
   if(line3==0)
   {
    delay(2);
    if(line3==0)
    {
     i=m*4+3;
     i=i*i;
     while(!line3);
     delay(2);
    }
   }
   if(line4==0)
   {
    delay(2);
    if(line4==0)
    {
     i=m*4+4;
     i=i*i;
     while(!line4);
     delay(2);
    }
   }
  }
 }
} void time0() interrupt 1
{
 TH0=(65535-1000)/256;
 TL0=(65535-1000)%256;
 a[0]=i/1000;
 a[1]=i/100%10;
 a[2]=i/10%10;
 a[3]=i%10;
 j++;
 if(j==4)
  j=0;
 P2=_cror_(k,j);
 P0=table[a[j]];  
} 此时的程序是正确的。 编程过程中遇到的问题就是没有进行以下所示的位定义 sbit line1=P1^0;
sbit line2=P1^1;
sbit line3=P1^2;
sbit line4=P1^3; 而是直接在程序中使用P1^0~P1^3,结果程序就运行不正常,苦思良久,未果,望请各位前辈高手们指点指点。   [ 本帖最后由 若如 于 2011-11-9 20:03 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
若如
1楼-- · 2019-03-26 12:31
我传上来的这个程序是经过我改正后的,是正确的程序,可是如果把关于P1^0~P1^3的位定义去掉,直接在程序中使用P1^0这种形式程序就不能正常工作了(编译的时候还是不会提示错误)。
若如
2楼-- · 2019-03-26 14:26
你的这个解释应该是最合理的,谢了!
谢谢分享
3楼-- · 2019-03-26 17:53
我都不好意思了。 现在才明白你问的是什么。第一次回答问题。  没挨骂  哈哈。  
j1a2s3o4n
4楼-- · 2019-03-26 21:01
不能是语法错误,语法错误编译时会出错的
若如
5楼-- · 2019-03-26 22:25
那你还那么多的芯币,羡慕啊。
若如
6楼-- · 2019-03-27 00:13
 精彩回答 2  元偷偷看……

一周热门 更多>