OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4820|回复: 3

51单片机8*8点阵,我自己能调试出来,但有两个实验现象看不懂,求助?

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-6-18
在线时间
5 小时
发表于 2019-7-13 16:48:12 | 显示全部楼层 |阅读模式
12金钱
本帖最后由 MLXGZZZ 于 2019-7-13 16:52 编辑

程序使点阵的第一行第一列亮起,代码图片如下(图1)。前提是循环变量i要定义为外部变量,或者静态局部变量,如果定义为局部变量不加Static关键字的话,程序就会出现错误,如图2和3所示,变成了倒数第一行和倒数第一列15个灯灭,其余亮。图2和3的区别是,图2主函数中不加delay,图2第一行第一列的灯特别亮,其余暗,图3主函数中加delay,亮度都一样,我想了好久也想不出来。    求解:为什么i的位置和类型不一样,导致的结果不一样。
          delay为什么能造成图2和3不一样。
#include "reg52.h"
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit CLK=P3^5;   //移位寄存器时钟
sbit LE=P3^6;    //锁存寄存器时钟
sbit DI=P3^4;   //串行数据输入

void delay(unsigned int i)
{
        unsigned int m,n;
        for(m=i;m>0;m--)
                for(n=90;n>0;n--);
}
//u8 i;
void send_byte(u8 DAT)
{
        u8 dat;
        //u8 i;
        static u8 i;
        dat=DAT;
        for(i=0;i<8;i++)
        {
                CLK=0;
                LE=0;
                if(dat&0x80)
                        DI=1;
                else
                        DI=0;
                dat=_crol_(dat,1);
                CLK=1;
        }
        LE=1;
}

void main()
{
        send_byte(0xfe);
        //delay(100);
        send_byte(0x80);
}

图1

图1

1.png

图3

图3



最佳答案

查看完整内容[请看2#楼]

你这应该看看点阵的驱动IC的工作原理,局部变量不会有问题的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2019-7-13 16:48:13 | 显示全部楼层
你这应该看看点阵的驱动IC的工作原理,局部变量不会有问题的
回复

使用道具 举报

4

主题

116

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3799
金钱
3799
注册时间
2017-11-15
在线时间
314 小时
发表于 2019-7-16 12:17:33 | 显示全部楼层
第一个灯较与其它的灯亮的时间长了,你要想想是哪里导致这个情况。
www.littlebutler.top
回复

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-7-16
在线时间
6 小时
发表于 2019-7-16 18:28:26 | 显示全部楼层
在你的程序里面,延时函数和点阵扫描函数都用到了i,如果不使用静态变量,两个i就会发生矛盾,所以,你把延时的i改成a,b,c或者其他的就好了。还有你的扫描函数其实有点冗长,dat完全可以不用的。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 12:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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