标题: 请问这个单片机代码哪里错了? [打印本页]

作者: jerry1203    时间: 2021-10-4 20:34
标题: 请问这个单片机代码哪里错了?
#include <reg51.h>
void delay(unsigned char i)
{
        unsigned char j,k;
        for(k=0;k<i;k++)
        for(j=0;j<255;j++);
}
void main()
{
unsigned char led1,led2,led3,led4,led5,led6,led7,led8;
unsigned char P1_0=P1^0,P1_1=P1^1,P1_2=P1^2,P1_3=P1^3,P1_4=P1^4,P1_5=P1^5,P1_6=P1^6,P1_7=P1^7;
led1=0x02;
led2=0x08;
led3=0x20;
led4=0x80;
led5=0x01;
led6=0x04;
led7=0x10;
led8=0x40;
while(1){
P1_0=led1;
P1_1=led2;
P1_2=led3;
P1_3=led4;
delay(200);
P1_4=led5;
P1_5=led6;
P1_6=led7;
P1_7=led8;
delay(200);
}
}


屏幕截图 2021-10-04 203219.png (203.33 KB, 下载次数: 35)

屏幕截图 2021-10-04 203219.png

捕获.PNG (79.44 KB, 下载次数: 60)

捕获.PNG

作者: 188610329    时间: 2021-10-4 22:34
严格来讲,你这代码应该出了 delay 就没对的地方……

先根据你的代码和电路图,猜测你要做流水灯,代码如下:

#include <reg51.h>
#include <INTRINS.H>
void delay(unsigned char i)
{
        unsigned char j,k;
        for(k=0;k<i;k++)
        for(j=0;j<255;j++);
}
void main()
{
        P1 = 0xFE;         //阴控亮一灯
//      P1 = 0x01;         //阳控亮一灯

        while(1)
        {
                 _cror_(P1,1);                   //右移一位
//                _crol_(P1,1);                  //左移一位
                  delay(200);                    //这个照抄的你的delay , 实际需要多少,自己调整
         }
}

如上, 如果你是要做流水灯,这就是全部代码了。
作者: 0711zhao    时间: 2021-10-4 22:41
你是要干嘛?是要点亮led1234四个灯延迟一段时间再点亮led5678再延迟循环吗?你这是应该是赋值不对,最好是给整个P0吗?
作者: 0711zhao    时间: 2021-10-4 22:42
最好是给整个P0赋值来控制简单些
作者: 0711zhao    时间: 2021-10-4 22:50
我猜你的显示是LED4亮然后延迟LED8亮,因为你赋值是整体赋值,后面的会覆盖前面的,如果非要你这样的话那么应该把几个值按位或上
作者: 名字不是重点    时间: 2021-10-5 00:18
你的led_1到led_8定义和赋值都是“unsigned char”类型,
但在使用时,却赋值给了“bit”类型:

unsigned char  led1 是8bit,而P1_0=P1^0是的1bit,却要让P1_0=led1;你是要闹哪样?

如楼上所说,应该要整个P1口输出:P1=led1;
作者: wps10025    时间: 2021-10-5 07:20
unsigned char P1_0=P1^0,P1_1=P1^1,P1_2=P1^2,P1_3=P1^3,P1_4=P1^4,P1_5=P1^5,P1_6=P1^6,P1_7=P1^7;
位声明用sbit,另外,编程注意格式,否则乱麻一堆
作者: cn_zhx    时间: 2021-10-5 16:59
一个问题,你发了3/4个帖子,基本的编程逻辑都没有。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1