lsmCC 发表于 2023-12-11 21:56:51

51单片机代码问题

#include <REGX52.H>


sbit WE = P2^7;                //?????????? ??? WE???? ????? P2^7????         ??U8???????
sbit DU = P2^6;                //?????????? ??? DU???? ????? P2^7????         ??U9???????

#define uchar unsigned char//???(?????,????,???????)?????uchar???unsigned char ???????uchar num???unsigned char num;
#define uint unsigned int          //???(???????)
uint num;//????num

uchar code table[] = {       //??0~f???
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void delay(uint z)//????
{
   unsigned int x,y;
   for(x = z;x>0;x--)
           for(y=144;y>0;y--);
}

void main()           //???
{       
   while(1)   //?????
   {
           for(num=0;num<19;num++)        //16??????
           {
                   WE = 1;                   //??U8???(U8???)
                   P0 = 0x00;           //??????,??8????
                   WE = 0;                   //??U8???
                   delay(1000);   //??????
                             
                   DU = 1;                   //??U9???(U9???)
                   P0 = table; //??????,???????
                   DU = 0;                   //??U9???
           }
   }
}


为什么用keil会报错,怎么修改

FishC 发表于 2023-12-11 22:01:17

这段代码是使用51单片机控制数码管显示从0到F的数字。但是代码中有一些问题。

首先,需要包含`reg51.h`头文件,这样才能正确使用51单片机的寄存器定义和函数。

#include <reg51.h>

其次,`sbit`是位定义关键字,用来指定某一位的操作。但是,在该代码中使用了`P2^7`和`P2^6`进行位操作,这是错误的写法。正确的写法是使用位运算符`<<`进行位偏移。

sbit WE = P2^7;
sbit DU = P2^6;

接下来,需要将`table`数组声明为`code`类型,因为`code`表示该数组存储在程序存储器中,而不是RAM中。

uchar code table[] = {// 数码管0~F对应的段码
    0x3f,0x06,0x5b,0x4f,
    0x66,0x6d,0x7d,0x07,
    0x7f,0x6f,0x77,0x7c,
    0x39,0x5e,0x79,0x71
};

最后,你还需要在循环中使用`delay`函数进行延时,以控制数码管显示的速度。

void main()
{
    while(1)
    {
      for(num=0;num<16;num++)// 使用for循环遍历0~F
      {
            DU = 1;// 打开数码管
            P0 = table;// 设置段码
            delay(100);// 延时
            DU = 0;// 关闭数码管
            delay(100);// 延时
      }
    }
}

这样,就可以通过控制51单片机的P0口和P2口来显示从0到F的数字了。请注意,由于硬件原因,你可能需要将数码管的共阳引脚或共阴引脚连接到正确的IO口上。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 51单片机代码问题