找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11703|回復(fù): 1
收起左側(cè)

單片機(jī)數(shù)碼管與流水燈同時(shí)顯示 很好的學(xué)習(xí)程序

[復(fù)制鏈接]
ID:203304 發(fā)表于 2017-5-21 23:16 | 顯示全部樓層 |閱讀模式
利用動(dòng)態(tài)掃描和定時(shí)器1在數(shù)碼管上顯示出從765432開始以1/10秒的速度往下遞減直至765398并保持顯示此數(shù),與此同時(shí)利用定時(shí)器0以500MS速度進(jìn)行流水燈從上至下移動(dòng),當(dāng)數(shù)碼管上數(shù)減到停止時(shí),實(shí)驗(yàn)板上流水燈也停止然后全部開始閃爍,3秒后(用T0定時(shí))流水燈全部關(guān)閉、數(shù)碼管上顯示出“HELLO”。到此保持住。

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit dula=P2^6;
  6. sbit wela=P2^7;
  7. uchar code table[]={
  8. 0x3f,0x06,0x5b,0x4f,
  9. 0x66,0x6d,0x7d,0x07,
  10. 0x7f,0x6f,0x77,0x7c,
  11. 0x39,0x5e,0x79,0x71,
  12. 0x76,0x79,0x38,0x3f,0};
  13. uchar temp,t0,t1,bai,shi,ge,flag,flag1;
  14. uint shu;
  15. void init();
  16. void display(uchar,uchar,uchar,uchar,uchar,uchar);
  17. void delay(uint z)
  18. {
  19.         uint t1,y;
  20.         for(t1=z;t1>0;t1--)
  21.                 for(y=110;y>0;y--);
  22. }
  23. void main()
  24. {
  25.         init();
  26.         while(1)
  27.         {
  28.                 if(flag1!=1)
  29.                         display(7,6,5,bai,shi,ge);
  30.                 else
  31.                         display(16,17,18,18,19,20);        
  32.         }
  33. }

  34. void init()
  35. {
  36.         shu=432;
  37.         temp=0xfe;
  38.         P1=temp;
  39.         TMOD=0x11;
  40.         TH0=(65536-50000)/256;
  41.         TL0=(65536-50000)%256;
  42.         TH1=(65536-50000)/256;
  43.         TL1=(65536-50000)%256;
  44.         EA=1;
  45.         ET0=1;
  46.         ET1=1;
  47.         TR0=1;
  48.         TR1=1;
  49. }

  50. void timer0() interrupt 1
  51. {
  52.         TH0=(65536-50000)/256;
  53.         TL0=(65536-50000)%256;
  54.         t0++;
  55.         if(flag!=1)
  56.                 {
  57.                 if(t0==10)
  58.                         {
  59.                                 t0=1;
  60.                                 temp=_crol_(temp,1);
  61.                                 P1=temp;
  62.                         }
  63.                 }
  64.         else
  65.                 {
  66.                         if(t0%4==0)
  67.                                 P1=~P1;
  68.                         if(t0==60)
  69.                         {
  70.                                 TR0=0;
  71.                                 P1=0xff;
  72.                                 flag1=1;
  73.                         }
  74.                 }        
  75. }

  76. void timer1() interrupt 3
  77. {
  78.         TH1=(65536-50000)/256;
  79.         TL1=(65536-50000)%256;
  80.         t1++;
  81.         if(t1==2)
  82.                 {
  83.                         t1=0;
  84.                         shu--;
  85.                         bai=shu/100;
  86.                         shi=shu%100/10;
  87.                         ge=shu%10;
  88.                         if(shu==398)
  89.                                 {
  90.                                         TR0=0;
  91.                                         TH0=(65536-50000)/256;
  92.                                         TL0=(65536-50000)%256;
  93.                                         TR0=1;
  94.                                         flag=1;
  95.                                         t0=0;
  96.                                         P1=0xff;
  97.                                         TR1=0;
  98.                                 }        
  99.                 }        
  100. }

  101. void display(uchar aa,uchar bb,uchar cc,uchar ba,uchar sh,uchar g)
  102. {
  103.         dula=1;
  104.                 P0=table[aa];
  105.                 dula=0;
  106.                 P0=0xff;
  107.                 wela=1;
  108.                 P0=0xfe;
  109.                 wela=0;
  110.                 delay(1);

  111.                dula=1;
  112.                 P0=table[bb];
  113.                 dula=0;
  114.                 P0=0xff;
  115.                 wela=1;
  116.                 P0=0xfd;
  117.                 wela=0;
  118.                 delay(1);

  119.        dula=1;
  120.                 P0=table[cc];
  121.                 dula=0;
  122.                 P0=0xff;
  123.                 wela=1;
  124.                 P0=0xfb;
  125.                 wela=0;
  126.                 delay(1);
  127.         dula=1;
  128.                 P0=table[ba];
  129.                 dula=0;
  130.                 P0=0xff;
  131.                 wela=1;
  132.                 P0=0xf7;
  133.                 wela=0;
  134.                 delay(1);

  135.         dula=1;
  136.                 P0=table[sh];
  137.                 dula=0;
  138.                 P0=0xff;
  139.                 wela=1;
  140.                 P0=0xef;
  141.                 wela=0;
  142.                 delay(1);

  143.         dula=1;
  144.                 P0=table[g];
  145.                 dula=0;
  146.                 P0=0xff;
  147.                 wela=1;
  148.                 P0=0xdf;
  149.                 wela=0;
  150.                 delay(1);
  151. }
復(fù)制代碼

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:662890 發(fā)表于 2019-12-16 16:04 來自觸屏版 | 顯示全部樓層
單片機(jī)用中段寫流水燈
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表