模数转换,数码管前两位亮度没最后一位高,相差比较多

[复制链接]
3148|4
 楼主| howard-ch 发表于 2011-7-29 15:22 | 显示全部楼层 |阅读模式
模数转换,数码管前两位亮度没最后一位高,相差比较多,怎么会这样呢?

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wr=P3^6;
sbit rd=P3^7;
void init();
void start();
uchar temp;bai,shi,ge;
//uint temp;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void display(uchar bai,uchar shi,uchar ge);
void delay(uint z)                                  //延时子程序
{                                 
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void main()
{
        init();
        while(1)
        {
                start();
                delay(10);
                rd=0;
                temp=P1;
                bai=temp/100;                                                                 //分离百位
                shi=temp%100/10;                                                         //分离十位
                ge=temp%10;                                                                         //分离个位
                display(bai,shi,ge);
                delay(10);
                rd=1;
                delay(10);
        }
}
void init()
{
        P0=0x7f;
}
void start()
{
        wr=1;
        wr=0;
        wr=1;
}
void display(uchar bai,uchar shi,uchar ge)                 //三位数的显示子程序
{
        dula=1;
        P0=table[bai];
        dula=0;
        wela=1;
        P0=0x7e;
        wela=0;
        delay(5);

        dula=1;
        P0=table[shi];
        dula=0;
        wela=1;
        P0=0x7d;
        wela=0;
        delay(5);

        dula=1;
        P0=table[ge];
        dula=0;
        wela=1;
        P0=0x7b;
        wela=0;
        delay(5);       
}
efen 发表于 2011-7-29 16:24 | 显示全部楼层
可能是数码管消隐的问题。电路图也应贴上麻,不然能看懂的还真是高手。
对这问题LZ自己也应偿试着解决麻,程序就是思考、反复调试、修改出来的
不然也只会落得个代码工人的下场,代码网上一大抄,却摸不着思路
还有,小弟我只是菜鸟,以上废话LZ爱听不听罢了
hwk612167 发表于 2011-7-29 19:10 | 显示全部楼层
保持每位显示的时间大致差不多,再加上每次改变位选时消影。
你这个很明显,前2位每位显示时间比最后一位的显示时间短很多
老鱼探戈 发表于 2011-7-29 19:15 | 显示全部楼层
时间太短,和最后一次差太远。
wang_2003 发表于 2011-8-2 09:09 | 显示全部楼层
  1. void delay(uint z) //延时子程序
  2. {
  3. uchar x,y;
  4. for(x=z;x>0;x--)
  5. for(y=110;y>0;y--);
  6. }

你把延时子程序改成这样试试看行不?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

137

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部