找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何让数码管以0.5秒闪烁显示

[复制链接]
跳转到指定楼层
楼主
ID:322939 发表于 2019-12-22 17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个很弱的问题,四位数码管由单片机直接驱动,计时到99分停止计时并作0.5秒闪烁提示。现在就差闪烁功能如何设置,虽然网上一大堆资料,但别人的思路看不懂,特在这里向各位大神讨教。谢谢!
  1. #include<SC92F725X_C.H>
  2. #include"intrins.h"
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. #define ulong unsigned long
  6. void LED_Data(uchar da);
  7. void KeyScan(void);

  8. void DisplayScan(void);
  9. void Timer0();
  10. void t1_sim();
  11. void time_Init();

  12. sbit Rese=P1^3;        //复位键
  13. sbit STAT_PAS=P1^2;//启动/暂停
  14. sbit q_wei=P1^0;
  15. sbit Bia_wei=P1^1;
  16. sbit shi_wei=P1^6;
  17. sbit ge_wei=P1^7;
  18. sbit Px0= P0^0;
  19. sbit Px1= P0^1;
  20. sbit Px2= P0^2;
  21. sbit Px3= P0^3;
  22. sbit Px4= P2^0;
  23. sbit Px5= P2^1;
  24. sbit Px6= P2^4;
  25. sbit Px7= P2^5;
  26. uint stemp_1=0,stemp_2=0,stemp_3=0,stemp_4=0,cont=0,t=0,flash_acc=0,flash_500ms;
  27. uchar fen=0,sec=0,num=1;
  28. bit flag=0,flag1=0,shan_flag=0,T_4ms_flag=0;
  29. uchar code wei[]={0x00,0xc2,0xc1,0x83,0x43,0xc3};//位
  30. uchar code LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0-9,段
  31. /************定时器初始化&macr;**********/
  32. void time_Init()
  33. {
  34.   TMCON=0x07;    //
  35.         TMOD|=0x01;
  36.   TL0=(65536-12000)%256;    //1ms;
  37.         TH0=(65536-12000)/256;
  38.         TR0=0;
  39.         TF0=0;
  40.         ET0=1;
  41.         TR0=0;
  42. //        EA=1;
  43.          TMOD|=0x01;                   
  44.         TL1=(65536-48000)%256;   //4ms;
  45.         TH1=(65536-48000)/256;
  46.         TR1=0;
  47.         TF1=0;
  48.         ET1=1;
  49.         TR1=1;
  50.         EA=1;
  51. /* T2MOD = 0x00;
  52.         T2CON = 0x00;         
  53.         RCAP2H = (65536-240)/256;     //????:???Fsys,?48000*(1/Fsys)=4ms;
  54.         RCAP2L = (65536-240)%256;
  55.         TR2 = 0;
  56.         ET2 = 1;//
  57.         TR2 = 0;//               
  58.         EA = 1;        */
  59.          
  60.         }
  61. /**************定时器0*************/
  62. void Timer0() interrupt 1
  63. {
  64.    TL0=(65536-12000)%256;    //1ms;
  65.          TH0=(65536-12000)/256;
  66.          
  67.           
  68.             cont++;
  69.          if(cont==1000)
  70.          {
  71.                   cont=0;
  72.             sec++;
  73.           
  74.          if(sec>59)
  75.          {
  76.                  sec=0;
  77.            fen++;
  78.          if(fen==1)
  79.          {
  80.                   fen=1;
  81.       flag=1;
  82.            }
  83.          }
  84. }
  85. }

  86. /************定时器1******************/
  87.         void t1_sim() interrupt 3
  88.         {
  89.                 TL1=(65536-48000)%256;   //4ms;
  90.           TH1=(65536-48000)/256;
  91.        
  92.           DisplayScan();
  93.                
  94.           KeyScan();
  95.                
  96. }
  97. void DisplayScan(void)//四位数码管扫描
  98. {
  99.   stemp_4=fen/10;
  100.   stemp_3=fen%10;
  101.   stemp_2=sec/10;
  102.   stemp_1=sec%10;
  103.    P0=0x00;
  104.          q_wei=1;
  105.    Bia_wei=1;
  106.    shi_wei=1;
  107.    ge_wei=1;
  108.        
  109.                     
  110.     switch(num)
  111.    {
  112.   case 1:
  113.                      LED_Data(LED[stemp_1]);
  114.                   
  115.                      q_wei=0;
  116.          Bia_wei=1;
  117.          shi_wei=1;
  118.          ge_wei=1;
  119.                          
  120.           break;
  121.    case 2:
  122.                     LED_Data(LED[stemp_2]);
  123.                   
  124.                     q_wei=1;
  125.          Bia_wei=0;
  126.          shi_wei=1;
  127.          ge_wei=1;
  128.                          
  129.           break;
  130.    case 3:
  131.                   LED_Data(LED[stemp_3]);
  132.                     
  133.                                  
  134.          P1=wei[3];                               
  135.                                          q_wei=1;
  136.          Bia_wei=1;
  137.          shi_wei=0;
  138.          ge_wei=1;
  139.                          
  140.           break;
  141.    case 4:
  142.                    LED_Data(LED[stemp_4]);

  143.                       q_wei=1;
  144.          Bia_wei=1;
  145.          shi_wei=1;
  146.          ge_wei=0;
  147.                          
  148.           break;
  149.     }
  150.                 num++;
  151.         if(num>4)
  152.         {
  153.                 num=1;
  154.         }  
  155. }
  156. /***************按键扫描**************/
  157. void KeyScan(void)
  158. {
  159.   static uchar key_lock1;
  160.   static uchar key_cnt1;
  161.   static uchar key_lock2;
  162.   static uchar key_cnt2;
  163.    
  164. if(0!=Rese)         //归零/复位键
  165. {
  166. key_lock1=0;
  167. key_cnt1=0;
  168. }
  169. else  
  170.          if(0==key_lock1)
  171. {
  172.   key_cnt1++;
  173.   if(key_lock1>=250&&TR0==0)//长按1秒触发
  174.   {
  175.     key_lock1=1;
  176.     fen=0;
  177.                 sec=0;
  178.    }
  179.   }
  180. if(0!=STAT_PAS)   //启动/暂停键
  181. {
  182.   key_lock2=0;
  183.   key_cnt2=0;
  184.   }
  185.   else if(0==key_lock2)
  186.   {
  187.     key_cnt2++;
  188.         if(key_cnt2>5) //消抖并触发
  189.         {
  190.          key_lock2=1;
  191.         TR0=~TR0;
  192.          }
  193.         }
  194. }
  195. /****************&Ouml;÷&sup3;&Igrave;&ETH;ò*****************/
  196. void main( )
  197. {
  198. IO_Init();
  199. time_Init();

  200. while(1)
  201. {


  202. if((fen==1)&&(sec==0)&&(TR0==1)&&(flag==1))//&frac14;&AElig;&Ecirc;±&micro;&frac12;&Iacute;&pound;&Ouml;&sup1;
  203. {
  204.           TR0=0;
  205.           flag=0;
  206.           TR2=1;
  207.   
  208.    }
  209.   }
  210. }
复制代码

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

使用道具 举报

沙发
ID:653072 发表于 2019-12-23 07:43 来自手机 | 只看该作者
keil调试窗口
回复

使用道具 举报

板凳
ID:653072 发表于 2019-12-23 07:48 来自手机 | 只看该作者
看keil调试窗口“sec”前后差值就是时间间隔,详细看这位大神的http://www.51hei.com/bbs/dpj-51343-1.html
回复

使用道具 举报

地板
ID:322939 发表于 2019-12-23 09:43 | 只看该作者
已经搞掂了。
回复

使用道具 举报

5#
ID:322939 发表于 2019-12-24 09:04 | 只看该作者
51zx笔记 发表于 2019-12-23 07:48
看keil调试窗口“sec”前后差值就是时间间隔,详细看这位大神的http://www.51hei.com/bbs/dpj-51343-1.html

谢谢!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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