鱼C论坛

 找回密码
 立即注册
查看: 274|回复: 1

51单片机代码问题

[复制链接]
发表于 2023-12-11 21:56:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <REGX52.H>


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

  4. #define uchar unsigned char  //???(?????,????,???????)?????uchar???unsigned char ???????uchar num???unsigned char num;
  5. #define uint unsigned int          //???(???????)
  6. uint num;  //????num

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

  12. void delay(uint z)  //????
  13. {
  14.    unsigned int x,y;
  15.    for(x = z;x>0;x--)
  16.            for(y=144;y>0;y--);
  17. }

  18. void main()           //???
  19. {       
  20.    while(1)   //?????
  21.    {
  22.            for(num=0;num<19;num++)        //16??????
  23.            {
  24.                    WE = 1;                   //??U8???(U8???)
  25.                    P0 = 0x00;           //??????,??8????
  26.                    WE = 0;                   //??U8???
  27.                    delay(1000);   //??????
  28.                              
  29.                    DU = 1;                   //??U9???(U9???)
  30.                    P0 = table[num]; //??????,???????
  31.                    DU = 0;                   //??U9???
  32.            }
  33.    }
  34. }

复制代码

为什么用keil会报错,怎么修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-11 22:01:17 | 显示全部楼层
这段代码是使用51单片机控制数码管显示从0到F的数字。但是代码中有一些问题。

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

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

接下来,需要将`table`数组声明为`code`类型,因为`code`表示该数组存储在程序存储器中,而不是RAM中。
  1. uchar code table[] = {  // 数码管0~F对应的段码
  2.     0x3f,0x06,0x5b,0x4f,
  3.     0x66,0x6d,0x7d,0x07,
  4.     0x7f,0x6f,0x77,0x7c,
  5.     0x39,0x5e,0x79,0x71
  6. };
复制代码

最后,你还需要在循环中使用`delay`函数进行延时,以控制数码管显示的速度。
  1. void main()
  2. {
  3.     while(1)
  4.     {
  5.         for(num=0;num<16;num++)  // 使用for循环遍历0~F
  6.         {
  7.             DU = 1;  // 打开数码管
  8.             P0 = table[num];  // 设置段码
  9.             delay(100);  // 延时
  10.             DU = 0;  // 关闭数码管
  11.             delay(100);  // 延时
  12.         }
  13.     }
  14. }
复制代码

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 08:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表