找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10189|回复: 8
收起左侧

数码管显示0-99 显示过程不停得闪烁到了99溢出

  [复制链接]
ID:102056 发表于 2016-10-13 22:17 | 显示全部楼层 |阅读模式
QQ截图20161013221215.png QQ截图20161013221247.png
#include<reg52.h>
sbit WEI = P1^6;     //位选
sbit DU = P1^7;     //段选
unsigned char  DISP_smg[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
#define uchar unsigned char //  8bit, 0 ~     255
#define uint  unsigned int  // 16bit, 0 ~  65,535
void delayms(uint m)    // 11.0592MHz 晶振ms延时,偏差小于1%
{
    uint i, j;
    for(i=m; i>0; i--)
        for(j=114; j>0; j--);
}




void main()
{
   unsigned char C0 = 0;
   unsigned char i = 0;
   DU = 0;
   P0 = 0x00;
   DU = 1;
   
        while(1)
        {
                for(i = 0; i < 10; i++)                //循环10次
                {
                    WEI = 1;
                    P0 = 0x7f;
                    WEI = 0;               
                    DU = 1;
                    P0 =  DISP_smg[ i];

                    delayms(400);              
                    WEI = 1;
                    P0 = 0xbf;
                    WEI = 0;
                    DU = 1;
                    P0        =  DISP_smg[C0];
                    delayms(400);        
                    if(i==8)
                    {
                      C0 = C0+1;
                    }
                 


      }        
            
   }
}

数码管显示00-99,显示过程不停得闪烁到了99溢出,延时怎样修改和到了99怎样暂停或者返回到00.

回复

使用道具 举报

ID:142666 发表于 2016-10-13 23:55 | 显示全部楼层
闪烁是延时问题,99返回0,设置变量就可以。
回复

使用道具 举报

ID:138155 发表于 2016-10-14 10:59 | 显示全部楼层
要暂停功能必须要用个开关
回复

使用道具 举报

ID:142703 发表于 2016-10-14 13:11 | 显示全部楼层
1。闪烁到99,还是不断加1显示到99,定义一个变量不断加1,再拆分两位分别显示,变量加到99就不加就停了,大于99令变量等0就回零啊
回复

使用道具 举报

ID:102056 发表于 2016-10-14 17:30 | 显示全部楼层
wuyibin2003 发表于 2016-10-14 10:59
要暂停功能必须要用个开关

这个可以,方法一.按键按下去暂停数字不变,松手按键弹起又从暂停的数字继续计数。方法二.按一次暂停,按第二次继续计数。但是不知道怎么写暂停这个程序。
回复

使用道具 举报

ID:44900 发表于 2016-10-14 18:08 | 显示全部楼层

赞楼主
回复

使用道具 举报

ID:142399 发表于 2016-10-14 22:52 | 显示全部楼层
我正在写这个项目,正好借鉴下!&#128522;&#128522;&#128522;
回复

使用道具 举报

ID:111634 发表于 2016-10-15 08:15 | 显示全部楼层
实例93  99.9秒秒表
该案例可参考或移植


fosc=6MHz,按8-15电路,要求一键三用:按第一次,秒表运行计时,最大计时99.9s,超过复0按第二次,秒表停运行,但保持最后显示秒数。按第三次,秒表清0


Proteus仿真一下,确认有效。


以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版

若需99.99秒,硬件电路增加一位595。软件程序增加0.01s10ms)计数器,并修改相应计数显示程序。

书中电路和程序设计有详细说明,程序语句条条有注解。


电路设计

设计99.9秒秒表电路如图8-15所示,该电路与上例相似,删除3位显示、2个校正按键和4个秒闪烁发光二极管,就组成了99.9秒秒表电路。

80C51RXD端与控制秒十位输出显示的74HC595 DS端连接,595串行输出端QS与下一片595串行输入端DS端连接,595并行输出端Q0Q7与数码管笔段agDp端连接,依次输出3位秒数据;小数点固定在第2位,通过电阻接地;TXD端与3595 CLK端连接,串行输出时钟脉冲,控制595串行移位;P1.73595 RCK端连接,控制输出触发595片内缓冲寄存器中数据进入输出寄存器的正脉冲;int0与K0连接,按下K0,触发int0中断,控制秒表快速响应,立即计时。



1.gif

74HC595特性已在实例30中介绍,此处不再赘述。
Proteus仿真
按实例1所述Proteus仿真步骤,打开Proteus ISIS软件,按表8-7选择和放置元器件,并连接线路,画出Proteus仿真电路如图8-16所示。
2.gif










鼠标左键双击Proteus ISIS仿真电路中AT89C51,装入Keil调试后自动生成的Hex文件。

全速运行后,3LED显示00.0,然后计时运行。

按第一次K0(不闭锁),秒表按0.1s快速计时运行。最大计时99.9s,超过复0

需要说明的是,本例选用的BUTTON按键有两种运行功能:有锁运行和无锁运行。作有锁运行时,鼠标左键单击按键图形中小红圆点,单击第一次闭锁,第二次开锁。作无锁运行时,鼠标左键单击按键图形中键盖帽“   ”,单击一次,键闭合后弹开一次,不闭锁。

按第二次K0(不闭锁),秒表停运行,但保持最后显示秒数。

按第三次K0(不闭锁),秒表显示清0

终止程序运行,可按停止按钮。


回复

使用道具 举报

ID:94642 发表于 2016-10-15 09:26 | 显示全部楼层
学习,楼主加油
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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