標(biāo)題: 流水燈,數(shù)碼管同時(shí)工作 [打印本頁(yè)]

作者: 瀟瀟123    時(shí)間: 2017-5-13 22:44
標(biāo)題: 流水燈,數(shù)碼管同時(shí)工作
請(qǐng)教怎么讓流水燈和數(shù)碼管同時(shí)工作,我弄的總只能顯示其中一個(gè)…剛剛?cè)腴T(mén)的小白,最好能推薦些有相關(guān)的詳細(xì)教程的,謝謝謝謝。

作者: admin    時(shí)間: 2017-5-14 00:40
這是我八年前寫(xiě)的程序,你可以參考一下:http://www.torrancerestoration.com/bbs/dpj-3011-1.html
作者: 瀟瀟123    時(shí)間: 2017-5-18 20:37
admin 發(fā)表于 2017-5-14 00:40
這是我八年前寫(xiě)的程序,你可以參考一下:http://www.torrancerestoration.com/bbs/dpj-3011-1.html

這是我的程序,如果是想要在定時(shí)器定義一個(gè)變量用來(lái)延時(shí) ,也可以的嗎  大概要怎么弄啊
  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;                  //第五個(gè)鍵盤(pán)調(diào)節(jié)分
  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];//保存時(shí)鐘的數(shù)據(jù)
  16. u8 sec,min;
  17. void delay(u16 i)
  18. {
  19. while(i--);
  20. }
  21. void time0init()  //定時(shí)器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);          //不同的延時(shí)時(shí)間對(duì)數(shù)碼管顯示亮度會(huì)產(chǎn)生很大的影響,時(shí)間越短影響越大
  42. }
  43. }
  44. //--聲明全局函數(shù)--//
  45. void Delay10ms(unsigned int c);   //延時(shí)10ms            

  46. /*******************************************************************************
  47. * 函 數(shù) 名         : abc
  48. * 函數(shù)功能                   : 主函數(shù)
  49. * 輸    入         : 無(wú)
  50. * 輸    出         : 無(wú)
  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;    //循環(huán)右移1位,點(diǎn)亮下一個(gè)LED "<<"為左移位
  63.                   if (P0 == 0x00)        //當(dāng)它全滅的時(shí)候,重新賦值
  64.                  {
  65.                          LED = 0x01;          // 0xfe = 1111 1110
  66.                  }
  67.                                     
  68.         }
  69. }
  70. }
  71. /*******************************************************************************
  72. * 函 數(shù) 名         : Delay10ms
  73. * 函數(shù)功能                   : 延時(shí)函數(shù),延時(shí)10ms
  74. * 輸    入         : 無(wú)
  75. * 輸    出         : 無(wú)
  76. *******************************************************************************/

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

  80.         //--c已經(jīng)在傳遞過(guò)來(lái)的時(shí)候已經(jīng)賦值了,所以在for語(yǔ)句第一句就不用賦值了--//
  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. }
復(fù)制代碼





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1