一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 2489|回复: 11

[其他综合] c语言数组移位

[复制链接]
发表于 2013-10-27 19:27 | 显示全部楼层 |阅读模式
各位高手:你们好!
请教一个问题。最近学习c语言搞一个数码管显示,想把数码管位选数组内容一组一组的向左移动。以下是编写的程序,编译通过。软件仿真不行,求教。在这里先谢谢了!
/*********
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchra code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar LED_W[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void Delay(uint i)  //延时子程序
{
uint x,j;
for(j=0;j<i;j++)
  for(x=0;x<148;x++)
  };
void Change_W(void)  //移位子程序
{
  uchar i,tenp;
  tenp = LED_W[0];
   for(i=0;i<7;i++);
   {
    LED_W[i] = LED_W[i+1];
     }
     LED_W[7] = tenp;
}
void main()            //主程序
{
uchar i, j;
while(1)
{
   for(j=0;j<40;j++);
   {
   for(i=0;i<8;i++);
   {
    P0 = 0;
    P2 = LED_W[i];
    P0 = table[i];
    Delay(2);
    }
    }
    Change_W();
    }
}
发表于 2013-10-27 21:01 | 显示全部楼层
貌似问题描述有点不清楚
回复

使用道具 举报

发表于 2013-10-27 23:26 | 显示全部楼层
大概看了下,思路貌似没问题,至于仿真不行,那就是你驱动的问题了,什么叫调试,调试,懂么!~
回复

使用道具 举报

发表于 2013-10-28 08:37 | 显示全部楼层
稍看一下,你的程序编译肯定没有通过,存在许多错误.
回复

使用道具 举报

发表于 2013-10-28 10:31 | 显示全部楼层
4楼,你既然看出来了,给指正一下。我是菜鸟表示没看懂 哈哈
回复

使用道具 举报

发表于 2013-10-28 10:31 | 显示全部楼层
unchar i;
for(i=0;i<8;i++)
{
    LED_W[i]=LED_W[i+1];
}

是这个意思么
回复

使用道具 举报

发表于 2013-10-28 10:45 | 显示全部楼层
什么叫“软件仿真不行”???
回复

使用道具 举报

发表于 2013-10-28 11:07 | 显示全部楼层
额,LZ这循环写得...C语言没及格哦~

你这样写:
for(i=0;i<7;i++);
{
循环内容;
}
根本就没有循环,花括号内的循环内容只会执行一次。

为什么呢:
因为你的for()后面多了个“;”,for循环的实际上就是;(空语句)。
循环完了后,i变成7,这时再顺序执行到{}里的内容。这时数组下标是7和7+1,数组越界破坏存在uchar LED_W[]后面的那个存储单元内容,程序产生未知效果(有一定可能直接跑飞或死机,但很可能什么问题都看不到,但整体程序变得不可靠)

你的Delay应是复制别人的,那里的写法是正确的。
回复

使用道具 举报

 楼主| 发表于 2013-10-28 11:08 | 显示全部楼层
用proteus仿真软件
回复

使用道具 举报

 楼主| 发表于 2013-10-28 11:11 | 显示全部楼层
意思是每循环一次,数码管的位选数组向左移动一组。
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-1 04:22 , Processed in 0.039637 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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