打印

8051四字在6个数码管上的流动显示,出现问题

[复制链接]
1685|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gxcmeluopeng|  楼主 | 2012-8-10 16:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar data buf[9]={10,10,10,10,10,8,0,5,1};
uchar code regcode[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                        0x7f,0x6f,0x00,0x7c,0x39,0x5e,0x79,0x71};
sbit duan=P2^6;
sbit wei=P2^7;
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
  for(j=110;j>0;j--);
}
void display (uchar data *p)
{
    uchar i,k;
k=0xfe;
for(i=0;i<6;i++)
{
  duan=1;
  P0=regcode[*p];
  duan=0;
  P0=0xff;
  wei=1;
  P0=k;
  wei=0;
  delay(4);
  p++;
  k=(k<<1)|0x01;
}
}
void tiaozheng()
{
uchar i,j;
j=buf[i];
for(i=0;i<5;i++)
{
  buf[i]=buf[i+1];
  buf[4]=j;
}
}
void main()
{
uint i;
while(1)
{
  for(i=0;i<50;i++)
  {
   display(buf+5);
   tiaozheng();
   }
}
}
无法实现流动,求助大虾,再此表示感谢

相关帖子

沙发
NE5532| | 2012-8-10 16:25 | 只看该作者
一行注释都不想写,程序能写好?

使用特权

评论回复
板凳
yiucing| | 2012-8-10 17:07 | 只看该作者
感觉有很多问题啊
1、tiaozheng函数只是调整buf[0]~buf[4],而buf[0]~buf[4]不都是10么
2、main函数里调用display(buf+5),传递参数buf+5,而display函数里要显示6位
void display (uchar data *p)
{
    for(i=0;i<6;i++)
    {
        ...
        p++;
        ...
    }
}
5+6=11,而buf数组大小只定义到9,这样不是越界了么
3、感觉display函数也有问题
。。。

使用特权

评论回复
地板
joyme| | 2012-8-10 17:45 | 只看该作者
很简单的功能,写得这么杂乱,你是想循环流动,还是往一个方向流动即从一边流出的字符是否要从另一边流入
用好索引,没有必要写TIAOZHENG这个函数的,另每个状态不延时,人眼能看出什么来?

使用特权

评论回复
5
dlyt_test001| | 2012-8-11 08:20 | 只看该作者
给程序加注释是好习惯。不为他人,也为自己以后能快速查找问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

5

帖子

1

粉丝