发新帖本帖赏金 4.00元(功能说明)我要提问
123
返回列表
打印
[STC单片机]

求助,数码管计数记着记着就停了

[复制链接]
楼主: chenjinyu
手机看帖
扫描二维码
随时随地手机跟帖
41
楼主,你误会我的意思了,你要在中断里面这么写,deng=~deng;看看他是不是一直闪烁,另外你要把a这个变量先屏蔽掉,观察灯的闪烁情况在测试。最稳妥的办法是,你说出你要实现的功能吧,不然你这样很浪费时间(你不会是软件工程师吧?)。

使用特权

评论回复
42
21ic小管家| | 2015-12-10 17:13 | 只看该作者
此打赏为十大热门打赏哦~详情请戳:https://bbs.21ic.com/icview-1219832-1-1.html

使用特权

评论回复
43
chenjinyu|  楼主 | 2015-12-10 17:41 | 只看该作者
flame123 发表于 2015-12-10 16:46
楼主,你误会我的意思了,你要在中断里面这么写,deng=~deng;看看他是不是一直闪烁,另外你要把a这个变量 ...

我要实现的功能就是让它计数啊

使用特权

评论回复
44
flame123| | 2015-12-10 18:11 | 只看该作者
chenjinyu 发表于 2015-12-10 17:41
我要实现的功能就是让它计数啊

你这个功能必须用到定时器,我给你参考下我临时写的程序。
//芯片为stc12c5a60s2,12T模式
#include<reg52.h>
typedef unsigned int uint_16;
typedef unsigned char uint_8;
sbit duan=P2^6;
sbit wei=P2^7;
sbit key = P3^2;
uint_16 num;
uint_8 keytmp;
uint_8 EXT0Flag = 0;
uint_8 code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管
void delay(uint_16 tmp)//延时1ms
{
        uint_16 i,j;
        for ( i = tmp; i > 0; --i)
                for(j = 110; j > 0; --j);
}
void display(uint_16 displaynum)
{
                P0=0xff;
       wei=1;
       P0=0xfb;
       wei=0;
       duan=1;
       P0=table[displaynum / 10];
       duan=0;
       delay(5);

       P0=0xff;
       wei=1;
       P0=0xfd;
       wei=0;
       duan=1;
       P0=table[displaynum % 10];
       duan=0;
       delay(5);
}
void SysInit()
{
        INT0 = 1;//下降沿有效
        EA = 1;
        EX0  = 0;
        IT0 = 1;
       
}
void keyInit()
{
        if(key == 1)keytmp = key;
}
void main(void)
{
        SysInit();
        keyInit();
        while(1)
        {
                if (key == 0)
                {
                        if(key != keytmp){EX0  = 1;EXT0Flag = 1;}
                }
                display(num);
        }
}
void EXT0() interrupt 0
{
        if(EXT0Flag == 1)num++;
        if (num == 100)
        {
                num = 0;
        }
}

使用特权

评论回复
45
flame123| | 2015-12-10 18:13 | 只看该作者
本帖最后由 flame123 于 2015-12-10 18:14 编辑

在上面的代码中,外部中断有效,但是你要想数码管自动加的话,还是得用定时器。因为外部中断只是一个触发的作用,他触发候所产生的后果,都是得靠你自己编写,并不是你产生中断了他就自己执行的。

使用特权

评论回复
46
leidong043| | 2015-12-10 22:37 | 只看该作者
程序卡住了。中断里那么长的延时吓死了。  数码管显示的亮度也有问题。
估计是程序卡住了。连数码管也不显示了。

使用特权

评论回复
47
hyl1615| | 2015-12-11 08:21 | 只看该作者
什么叫记着记着就停了?之前的计数值还会显示吗?

使用特权

评论回复
48
autopccopy| | 2015-12-11 09:07 | 只看该作者
本帖最后由 autopccopy 于 2015-12-11 09:09 编辑

LZ, stc15f204ea A版本外部中断有bug,见数据手册附录G, 已停产,可用stc15w404s替换。详见数据手册
http://www.****ducst/datasheet/ ... -series-chinese.pdf

及STC官网说明:http://www.****ducst

使用STC-ISP V6.85I 可参看【选型..】中找替换型号,并可查看【重要说明】查看厂家的提示。


(361)

stc15f204ea-bug1.jpg (100.27 KB )

stc15f204ea-bug1.jpg

stcmcu_com_memo1.jpg (138.27 KB )

stcmcu_com_memo1.jpg

stcmcu_select1.jpg (178.69 KB )

stcmcu_select1.jpg

stcmcu_memo1.jpg (149.23 KB )

stcmcu_memo1.jpg

STC15F204EA-series-chinese.part1.rar

1.39 MB

STC15F204EA-series-chinese.part2.rar

1.39 MB

STC15F204EA-series-chinese.part3.rar

789.66 KB

使用特权

评论回复
49
chenjinyu|  楼主 | 2015-12-11 09:46 | 只看该作者
hyl1615 发表于 2015-12-11 08:21
什么叫记着记着就停了?之前的计数值还会显示吗?

之前的计数值还是会显示的

使用特权

评论回复
50
JY-DX-JY| | 2015-12-11 09:51 | 只看该作者
楼主还没搞好吗?

使用特权

评论回复
51
JY-DX-JY| | 2015-12-11 13:22 | 只看该作者
autopccopy 发表于 2015-12-11 09:07
LZ, stc15f204ea A版本外部中断有bug,见数据手册附录G, 已停产,可用stc15w404s替换。详见数据手册!
http:/ ...

长知识了

使用特权

评论回复
52
chenjinyu|  楼主 | 2015-12-11 17:25 | 只看该作者
JY-DX-JY 发表于 2015-12-11 09:51
楼主还没搞好吗?

今天芯片连烧写都烧写不了了

使用特权

评论回复
53
JY-DX-JY| | 2015-12-11 17:28 | 只看该作者
你牛,把芯片都烧坏了。

使用特权

评论回复
54
chenjinyu|  楼主 | 2015-12-16 08:55 | 只看该作者
应该是外部中断不能用,我用查询法就可以用

使用特权

评论回复
发新帖 本帖赏金 4.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则