找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2726|回复: 10
打印 上一主题 下一主题
收起左侧

为什么段选中加入delay运行会出错?

[复制链接]
跳转到指定楼层
楼主
ID:111874 发表于 2016-6-30 01:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么段选中加入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++;
}









分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2016-6-30 19:29 | 只看该作者
不会出错吧?

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

使用道具 举报

板凳
ID:111874 发表于 2016-6-30 20:32 | 只看该作者
ahshmj 发表于 2016-6-30 19:29
不会出错吧?

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

程序没问题,烧进单片机数码管显示成乱码
回复

使用道具 举报

地板
ID:128761 发表于 2016-6-30 23:10 | 只看该作者
不会出错吧?
回复

使用道具 举报

5#
ID:111874 发表于 2016-7-1 09:27 | 只看该作者

烧进去乱码
回复

使用道具 举报

6#
ID:71099 发表于 2016-7-1 11:31 | 只看该作者
是乱成什么样?发个图上来并注明原本是什么,这样比较好理解和修改
回复

使用道具 举报

7#
ID:115571 发表于 2016-7-1 14:04 | 只看该作者
你把对t的处理放在中断里处理试试看
回复

使用道具 举报

8#
ID:7485 发表于 2016-7-1 22:34 | 只看该作者
数码管的型号对否?
回复

使用道具 举报

9#
ID:111874 发表于 2016-7-2 11:13 | 只看该作者
ahshmj 发表于 2016-7-1 22:34
数码管的型号对否?

数码管的型号是正确的,不加DELAY就可以正确显示,加了就乱码了
回复

使用道具 举报

10#
ID:7485 发表于 2016-7-2 20:04 | 只看该作者
本帖最后由 ahshmj 于 2016-7-2 20:07 编辑

是锁存器输出吧?
因为你 位选 未关闭,也未改变,而你的段选数据已经改变,......
回复

使用道具 举报

11#
ID:61390 发表于 2016-7-20 18:57 来自手机 | 只看该作者
如10楼说的共阳管,位码高低电位反了!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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