找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1001|回复: 7
打印 上一主题 下一主题
收起左侧

请问这个单片机代码哪里错了?

[复制链接]
跳转到指定楼层
楼主
#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, 下载次数: 16)

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

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

捕获.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 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 , 实际需要多少,自己调整
         }
}

如上, 如果你是要做流水灯,这就是全部代码了。
回复

使用道具 举报

板凳
ID:826942 发表于 2021-10-4 22:41 来自手机 | 只看该作者
你是要干嘛?是要点亮led1234四个灯延迟一段时间再点亮led5678再延迟循环吗?你这是应该是赋值不对,最好是给整个P0吗?
回复

使用道具 举报

地板
ID:826942 发表于 2021-10-4 22:42 来自手机 | 只看该作者
最好是给整个P0赋值来控制简单些
回复

使用道具 举报

5#
ID:826942 发表于 2021-10-4 22:50 来自手机 | 只看该作者
我猜你的显示是LED4亮然后延迟LED8亮,因为你赋值是整体赋值,后面的会覆盖前面的,如果非要你这样的话那么应该把几个值按位或上
回复

使用道具 举报

6#
ID:824490 发表于 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;
回复

使用道具 举报

7#
ID:578842 发表于 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,另外,编程注意格式,否则乱麻一堆
回复

使用道具 举报

8#
ID:883031 发表于 2021-10-5 16:59 | 只看该作者
一个问题,你发了3/4个帖子,基本的编程逻辑都没有。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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