找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1890|回复: 6
收起左侧

这个在这个单片机程序怎么不闪烁,使用中断和定时器使这两数码管闪烁

[复制链接]
ID:568017 发表于 2019-6-20 16:09 | 显示全部楼层 |阅读模式
图片1.png



单片机源程序如下:
  1. #include "reg52.h"                        

  2. typedef unsigned int u16;         
  3. typedef unsigned char u8;

  4. sbit LSA1 = P1^0;
  5. sbit LSA2 = P1^1;

  6. u8 n=0;
  7. u8 cnt=0;

  8. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


  9. void delay(u16 i)
  10. {
  11.         while(i--);      
  12. }


  13. void DigDisplay()
  14. {
  15.         u8 i;
  16.         if(n==1)
  17.         {
  18.                 for(i=0;i<2;i++)
  19.                 {
  20.                         switch(i)
  21.                         {               
  22.                                 case 0:
  23.                                 LSA1=0;LSA2=1; P2=~(smgduan[1]);break;
  24.                                 case 1:      
  25.                                 LSA1=1;LSA2=0; P2=~(smgduan[4]);break;
  26.                         }
  27.                         delay(10);
  28.                         P2=0xff;
  29.                 }
  30.         }
  31.         if(n==0)
  32.         {
  33.                 LSA1=1;LSA2=1;
  34.                 P2=~(smgduan[8]);
  35.                 delay(10);
  36.         }
  37. }



  38. void exint0() interrupt 0           
  39. {
  40.         n = !n;
  41. }

  42. void main()
  43. {
  44.         TMOD = 0x01;
  45.         TH0 = 0xB8;
  46.         TL0 = 0x00;
  47.         TR0 = 1;
  48.       
  49.   IT0 = 1;                        
  50.   EX0 = 1;                        
  51.   EA = 1;                        

  52.     while(1)
  53.         {      
  54.                 u8 i=0;
  55.                 DigDisplay();  
  56.                 if(TF0 == 1)
  57.                 {
  58.                         TF0 = 0;
  59.                         TH0 = 0xB8;
  60.                         TL0 = 0x00;
  61.                         cnt++;
  62.                         if(cnt >= 50)
  63.                         {
  64.                                 cnt = 0;
  65. //                                LSA1=1;LSA2=
  66.                     P2=0xff;
  67.                                 delay(500);
  68.                               
  69.                         }
  70.                 }
  71.         }
  72.                        
  73. }
复制代码


回复

使用道具 举报

ID:435708 发表于 2019-6-20 22:23 | 显示全部楼层
没接上拉电阻?
回复

使用道具 举报

ID:207421 发表于 2019-6-20 22:51 | 显示全部楼层
把 n = !n; 放到 78行不就可以了么
回复

使用道具 举报

ID:568017 发表于 2019-6-20 22:59 | 显示全部楼层
lwh999995 发表于 2019-6-20 22:51
把 n = !n; 放到 78行不就可以了么

我想的是在显示14时,数码管闪烁,而88不显示
回复

使用道具 举报

ID:568017 发表于 2019-6-28 10:28 | 显示全部楼层

可以不用上拉电阻,单片机可以驱动
回复

使用道具 举报

ID:207421 发表于 2019-6-28 13:34 | 显示全部楼层
寒山寺小生 发表于 2019-6-20 22:59
我想的是在显示14时,数码管闪烁,而88不显示

你的标题实在看不懂,不是14,88轮流显示?
显示14时,数码管闪烁?
显示88时,数码管不闪烁?
回复

使用道具 举报

ID:568017 发表于 2019-6-28 16:23 | 显示全部楼层
lwh999995 发表于 2019-6-28 13:34
你的标题实在看不懂,不是14,88轮流显示?
显示14时,数码管闪烁?
显示88时,数码管不闪烁?

对原先的解决了,我把LSA1=1和LSA2=1改成了都等于0

if(cnt >= 50)
                        {
                                cnt = 0;
//                                LSA1=1;LSA2=
                    P2=0xff;
                                delay(500);
                              
                        }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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