123
返回列表 发新帖我要提问本帖赏金: 4.00元(功能说明)

[STC单片机] 求助,数码管计数记着记着就停了

[复制链接]
flame123 发表于 2015-12-10 16:46 | 显示全部楼层
楼主,你误会我的意思了,你要在中断里面这么写,deng=~deng;看看他是不是一直闪烁,另外你要把a这个变量先屏蔽掉,观察灯的闪烁情况在测试。最稳妥的办法是,你说出你要实现的功能吧,不然你这样很浪费时间(你不会是软件工程师吧?)。
21ic小管家 发表于 2015-12-10 17:13 | 显示全部楼层
此打赏为十大热门打赏哦~详情请戳:http://bbs.21ic.com/icview-1219832-1-1.html
 楼主| chenjinyu 发表于 2015-12-10 17:41 | 显示全部楼层
flame123 发表于 2015-12-10 16:46
楼主,你误会我的意思了,你要在中断里面这么写,deng=~deng;看看他是不是一直闪烁,另外你要把a这个变量 ...

我要实现的功能就是让它计数啊
flame123 发表于 2015-12-10 18:11 | 显示全部楼层
chenjinyu 发表于 2015-12-10 17:41
我要实现的功能就是让它计数啊

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

  28.        P0=0xff;
  29.        wei=1;
  30.        P0=0xfd;
  31.        wei=0;
  32.        duan=1;
  33.        P0=table[displaynum % 10];
  34.        duan=0;
  35.        delay(5);
  36. }
  37. void SysInit()
  38. {
  39.         INT0 = 1;//下降沿有效
  40.         EA = 1;
  41.         EX0  = 0;
  42.         IT0 = 1;
  43.        
  44. }
  45. void keyInit()
  46. {
  47.         if(key == 1)keytmp = key;
  48. }
  49. void main(void)
  50. {
  51.         SysInit();
  52.         keyInit();
  53.         while(1)
  54.         {
  55.                 if (key == 0)
  56.                 {
  57.                         if(key != keytmp){EX0  = 1;EXT0Flag = 1;}
  58.                 }
  59.                 display(num);
  60.         }
  61. }
  62. void EXT0() interrupt 0
  63. {
  64.         if(EXT0Flag == 1)num++;
  65.         if (num == 100)
  66.         {
  67.                 num = 0;
  68.         }
  69. }
flame123 发表于 2015-12-10 18:13 | 显示全部楼层
本帖最后由 flame123 于 2015-12-10 18:14 编辑

在上面的代码中,外部中断有效,但是你要想数码管自动加的话,还是得用定时器。因为外部中断只是一个触发的作用,他触发候所产生的后果,都是得靠你自己编写,并不是你产生中断了他就自己执行的。
leidong043 发表于 2015-12-10 22:37 | 显示全部楼层
程序卡住了。中断里那么长的延时吓死了。  数码管显示的亮度也有问题。
估计是程序卡住了。连数码管也不显示了。
hyl1615 发表于 2015-12-11 08:21 | 显示全部楼层
什么叫记着记着就停了?之前的计数值还会显示吗?
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)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| chenjinyu 发表于 2015-12-11 09:46 | 显示全部楼层
hyl1615 发表于 2015-12-11 08:21
什么叫记着记着就停了?之前的计数值还会显示吗?

之前的计数值还是会显示的
JY-DX-JY 发表于 2015-12-11 09:51 | 显示全部楼层
楼主还没搞好吗?
JY-DX-JY 发表于 2015-12-11 13:22 | 显示全部楼层
autopccopy 发表于 2015-12-11 09:07
LZ, stc15f204ea A版本外部中断有bug,见数据手册附录G, 已停产,可用stc15w404s替换。详见数据手册!
http:/ ...

长知识了
 楼主| chenjinyu 发表于 2015-12-11 17:25 | 显示全部楼层
JY-DX-JY 发表于 2015-12-11 09:51
楼主还没搞好吗?

今天芯片连烧写都烧写不了了
JY-DX-JY 发表于 2015-12-11 17:28 | 显示全部楼层
你牛,把芯片都烧坏了。
 楼主| chenjinyu 发表于 2015-12-16 08:55 | 显示全部楼层
应该是外部中断不能用,我用查询法就可以用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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