找回密码
 立即注册

QQ登录

只需一步,快速开始

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

流水灯,数码管同时工作

[复制链接]
跳转到指定楼层
楼主
ID:198493 发表于 2017-5-13 22:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教怎么让流水灯和数码管同时工作,我弄的总只能显示其中一个…刚刚入门的小白,最好能推荐些有相关的详细教程的,谢谢谢谢!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2017-5-14 00:40 | 只看该作者
这是我八年前写的程序,你可以参考一下:http://www.51hei.com/bbs/dpj-3011-1.html
回复

使用道具 举报

板凳
ID:198493 发表于 2017-5-18 20:37 | 只看该作者
admin 发表于 2017-5-14 00:40
这是我八年前写的程序,你可以参考一下:http://www.51hei.com/bbs/dpj-3011-1.html

这是我的程序,如果是想要在定时器定义一个变量用来延时 ,也可以的吗  大概要怎么弄啊
  1.   #include<reg52.h>
  2. #include <intrins.h>
  3. sbit key1=P1^0;        
  4. sbit key2=P1^1        ;
  5. sbit key3=P1^2;
  6. sbit key4=P1^3;
  7. sbit key5=P1^4;                  //第五个键盘调节分
  8. sbit key6=P1^5;
  9. typedef unsigned char u8;
  10. typedef unsigned int u16;
  11. u8 smgduan[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
  12.                       0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71,};// 段选
  13. u8 smgduan1[16]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,};

  14. u8 smgwei[8]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c}; //位选
  15. u8 a[4];//保存时钟的数据
  16. u8 sec,min;
  17. void delay(u16 i)
  18. {
  19. while(i--);
  20. }
  21. void time0init()  //定时器0初始化
  22. {
  23. TMOD=0X01;
  24. TH0=0Xfc;
  25. TL0=0X18;  //1ms
  26. TR0=1;
  27. EA=1;
  28. ET0=1;
  29. }
  30. void display()
  31. {
  32. u8 i;
  33. a[0]=smgduan[sec%10];
  34. a[1]=smgduan[sec/10];

  35. a[2]=smgduan1[min%10];
  36. a[3]=smgduan[min/10];


  37. for(i=0;i<4;i++)        
  38. {
  39. P0=a[i];
  40. P2=smgwei[4-i];
  41. delay(300);          //不同的延时时间对数码管显示亮度会产生很大的影响,时间越短影响越大
  42. }
  43. }
  44. //--声明全局函数--//
  45. void Delay10ms(unsigned int c);   //延时10ms            

  46. /*******************************************************************************
  47. * 函 数 名         : abc
  48. * 函数功能                   : 主函数
  49. * 输    入         : 无
  50. * 输    出         : 无
  51. *******************************************************************************/

  52. abc()
  53. {
  54.         if(min==40)
  55. {
  56.         unsigned char LED;

  57.         LED = 0x01;          //0xfe = 1111 1110

  58.          while (1)
  59.         {

  60.              P0 = LED;
  61.                  Delay10ms(50);
  62.                  LED = LED << 1;    //循环右移1位,点亮下一个LED "<<"为左移位
  63.                   if (P0 == 0x00)        //当它全灭的时候,重新赋值
  64.                  {
  65.                          LED = 0x01;          // 0xfe = 1111 1110
  66.                  }
  67.                                     
  68.         }
  69. }
  70. }
  71. /*******************************************************************************
  72. * 函 数 名         : Delay10ms
  73. * 函数功能                   : 延时函数,延时10ms
  74. * 输    入         : 无
  75. * 输    出         : 无
  76. *******************************************************************************/

  77. void Delay10ms(unsigned int c)   //误差 0us
  78. {
  79.     unsigned char a, b;

  80.         //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
  81.     for (;c>0;c--)
  82.         {
  83.                 for (b=38;b>0;b--)
  84.                 {
  85.                         for (a=130;a>0;a--);
  86.                 }
  87.            
  88.         }      
  89. }

  90. void keyscan()
  91. {
  92. if(key2==0)
  93. {
  94. delay(200);
  95. if(key2==0)
  96. {
  97. delay(200);
  98. min=0;
  99. sec=0;
  100. while (!key2);}
  101. }
  102. if(key1==0)
  103. {
  104. delay(200);
  105. if(key1==0)
  106. {
  107. delay(200);
  108. while (!key1);
  109. TR0=~TR0;
  110. }
  111. }
  112.   if(key3==0)
  113. {
  114. delay(200);
  115. if(key3==0)
  116. {
  117. delay(200);
  118. sec +=10;
  119. while(!key3);
  120. }
  121. }
  122. if(key5==0)
  123.   {
  124.   delay(200);
  125.   if(key5==0)
  126.   {
  127.   delay(200);
  128.   min+=10;
  129.   while(!key5);}
  130.   if(min>=60)
  131.   {delay(200);
  132.   min=0;
  133.   sec=0;
  134.   while(!key5);}}
  135.   if(key6==0)
  136.   {
  137.   delay(200);
  138.   if(key6==0)
  139.   {
  140.   delay(200);
  141.   if(min>=10)
  142.   min-=10;
  143.   while(!key6);}
  144.   else
  145.   {delay(200);
  146.   min=0
  147.   sec=0;
  148.   while(!key6);}
  149.   }
  150. if(key4==0)
  151. {
  152. delay(200);
  153. if(key4==0)
  154. {
  155. delay(200);
  156. if(sec>=10)
  157. {delay(200);
  158. sec-=10;
  159. while(!key4);
  160.   }
  161.   else if(min>=1&&sec<=10)
  162.   {delay(200);
  163.   min-=1;
  164.   sec+=50;
  165.   while(!key4);
  166.   }
  167.   else if(min==0&&sec<=10)
  168.   {delay(200);
  169.   min=0;
  170.   sec=0;
  171.   while(!key4);
  172.   }
  173.   }
  174.   
  175. }
  176. }
  177.                
  178. void main()
  179. {
  180. time0init();
  181. while(1)
  182. { abc();
  183. keyscan();
  184. display();
  185. }        
  186. }
  187. void time0() interrupt 1
  188. {
  189. static u16 j;
  190. TH0=0Xfc;
  191. TL0=0X18;  //1ms
  192. j++;
  193. if(j==1000) //1s
  194. {
  195. j=0;
  196. sec++;
  197. if(sec>=60)        
  198. {
  199. sec=0;
  200. min++;
  201. if(min>=60)
  202. {
  203. min=0;
  204. }
  205. }
  206. }
  207. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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