鱼C论坛

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

51单片机代码问题

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

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

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

x
#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[num]; //??????,???????
                   DU = 0;                   //??U9???
           }
   }
}
为什么用keil会报错,怎么修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[num];  // 设置段码            delay(100);  // 延时            DU = 0;  // 关闭数码管            delay(100);  // 延时        }    }}
这样,就可以通过控制51单片机的P0口和P2口来显示从0到F的数字了。请注意,由于硬件原因,你可能需要将数码管的共阳引脚或共阴引脚连接到正确的IO口上。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 19:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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