标题: 为什么段选中加入delay运行会出错? [打印本页]

作者: 丶盗版哥    时间: 2016-6-30 01:08
标题: 为什么段选中加入delay运行会出错?
为什么段选中加入delay运行会出错?求解惑在子函数void sanmiao(uchar bai,uchar shi,uchar ge)中加注释的地方

#include <reg52.h>
#define uchar unsigned char
#define        uint unsigned int
uchar t = 0;
uchar bai,shi,ge;
sbit dula = P2^6;
sbit wela = P2^7;
void delay(uint z);
void sanmiao(uchar bai,uchar shi,uchar ge);
uchar code table[]={
                                        0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,
                                        0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,
                                        0x39, 0x5e, 0x79, 0x71
                                  };
void main(void)
{
        uchar temp = 0;
        wela = 0;
        dula = 0;
        TMOD = 0X01;
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;
        TR0 = 1;
        ET0 = 1;
        EA = 1;
        while(1)
        {
                if(t == 20)
                {
                        t = 0;
                        temp++;
                        if (temp == 100)
                                temp = 0;  
                        bai = temp/100;
                        shi = temp%100/10;
                        ge = temp%10;
                }
                sanmiao(bai,shi,ge);       
        }
}
void delay(uint z)//延时程序
{
        uchar i,j;
        for(i=z;i>0;i--)
                for(j=110;j>0;j--);
}
//显示动态扫描三个数码管
void sanmiao(uchar bai,uchar shi,uchar ge)
{
       

        dula = 1;
        P0 = table[bai];
        dula = 0;
        //delay(1);        //段选加上延时函数后为什么会出错??
        wela = 1;
        P0 = 0xfe;
        wela = 0;
        delay(5);

       

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

       

        dula = 1;
        P0 = table[ge];
        dula = 0;
        //delay(1);
        wela = 1;
        P0 = 0xfb;
        wela = 0;
        delay(5);
}
void timer0() interrupt 1
{
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;
        t++;
}










作者: ahshmj    时间: 2016-6-30 19:29
不会出错吧?

但是 Z和 i 的数据类型不一样,虽说没有报错,但应该是相同为好。
作者: 丶盗版哥    时间: 2016-6-30 20:32
ahshmj 发表于 2016-6-30 19:29
不会出错吧?

但是 Z和 i 的数据类型不一样,虽说没有报错,但应该是相同为好。

程序没问题,烧进单片机数码管显示成乱码
作者: 1391773246    时间: 2016-6-30 23:10
不会出错吧?
作者: 丶盗版哥    时间: 2016-7-1 09:27
1391773246 发表于 2016-6-30 23:10
不会出错吧?

烧进去乱码
作者: geminiguy_07    时间: 2016-7-1 11:31
是乱成什么样?发个图上来并注明原本是什么,这样比较好理解和修改

作者: qwopzxnm    时间: 2016-7-1 14:04
你把对t的处理放在中断里处理试试看

作者: ahshmj    时间: 2016-7-1 22:34
数码管的型号对否?
作者: 丶盗版哥    时间: 2016-7-2 11:13
ahshmj 发表于 2016-7-1 22:34
数码管的型号对否?

数码管的型号是正确的,不加DELAY就可以正确显示,加了就乱码了
作者: ahshmj    时间: 2016-7-2 20:04
本帖最后由 ahshmj 于 2016-7-2 20:07 编辑

是锁存器输出吧?
因为你 位选 未关闭,也未改变,而你的段选数据已经改变,......
作者: jwjjwj123    时间: 2016-7-20 18:57
如10楼说的共阳管,位码高低电位反了!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1