普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2080|回复: 2

普中单片机51-A4板,问题请教!!

[复制链接]

1

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2021-5-8 10:07:20 | 显示全部楼层 |阅读模式
本帖最后由 weileai 于 2021-5-8 10:36 编辑

各位大佬,遇到一个问题,求帮助。求帮助。谢谢实验:点阵8*8,595芯片控制行,P0口控制列
问题如下:当我再给LED赋值(见程序红字部分)LED=0x01的时候,点阵可以正常运行(现象:右边第一列灯不亮,别的都亮,然后灭的这一列从右往左移动)。但是当我赋值LED=0xfe的时候,程序下载进去,点阵就不亮了。按我的设想现象应该是:只亮右边一列,然后,这一列从左往右循环移动。程序如下:#include"reg51.h"
#include"intrins.h"
#define LED P0

typedef unsigned int ui16;
typedef unsigned char uc8;

sbit RCLK=P3^5;
sbit SRCLK=P3^6;
sbit SER=P3^4;
uc8 ledNum;

void delay(ui16 i)
{
        while(i--);
}

void Hc595SendByte(uc8 dat)
{        uc8 a;

        RCLK=1;
        SRCLK=1;

        for (a=0;a<8;a++)
        {
                SER=dat>>7;          //从最高位开始传送
                dat<<=1;          //每次移一位

                SRCLK=0;  //在信号上升沿输入数据
                _nop_();
                _nop_();
                SRCLK=1;
        }
        RCLK=0;                //595并行输出脉冲
        _nop_();
        _nop_();
        RCLK=1;
}         


void main()
{        
        LED=0x01;  /P0口控制列,低电平有效 换成0xfe以后,led都不亮。
        ledNum=0xFF;  /行,高电平有效
        while(1)
        {        
                Hc595SendByte(ledNum);
                LED =_crol_(LED,1);
                delay(50000);

        }
}





回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2021-5-13 16:23:17 | 显示全部楼层
P0口比较特殊,建议用个变量进行赋值移位,然后赋值给P0即可   void main() {        uc8 aa;         aa=0x01;                  ledNum=0xFF;         while(1)         {                         Hc595SendByte(ledNum);                 aa =_crol_(aa,1);                 LED=aa;                 delay(50000);          } }
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-30 23:33 , Processed in 0.092086 second(s), 33 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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