久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 為什么我的單片機(jī)數(shù)碼管常顯8 不倒計(jì)時(shí)啊? [打印本頁(yè)]

作者: 今已亭亭如蓋    時(shí)間: 2023-12-15 16:14
標(biāo)題: 為什么我的單片機(jī)數(shù)碼管常顯8 不倒計(jì)時(shí)啊?

單片機(jī)源程序如下:

  1. #include<reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define DIG0 0x01                 // 定義數(shù)碼管1
  6. #define DIG1 0x02                 // 定義數(shù)碼管2
  7. #define DIG2 0x03                 // 定義數(shù)碼管3
  8. #define DIG3 0x04                 // 定義數(shù)碼管4
  9. void delay(uint i);
  10. void T0_init();
  11. void MAX7219(uchar addr,uchar num);
  12. void MAX7219_init();                        //MAX7219初始化
  13. void display();
  14. sbit DIN=P3^0;                                         //連接MAX7219 DIN引腳
  15. sbit LOAD=P3^1;                                        //連接MAX7219 LOAD 引腳
  16. sbit CLK=P3^2;                                         //連接MAX7219 CLK 引腳
  17. sbit G1=P0^0;                                        //南北紅綠燈
  18. sbit Y1=P0^1;
  19. sbit R1=P0^2;
  20.                                                                  
  21. sbit G2=P1^0;                                        //東西紅綠燈
  22. sbit Y2=P1^1;
  23. sbit R2=P1^2;
  24. uchar NS_S,NS_G,EW_S,EW_G;
  25. uchar NS,EW;
  26. uchar temp=0,i;
  27. uchar code table[10]= {0x7e,0x30,0x6d,0x79,0x33,
  28.                                           0x5b,0x5f,0x70,0x7f,0x7b};                //共陰級(jí)數(shù)碼管數(shù)組
  29.                                                          
  30. void delay(uint i)
  31. {
  32.         uint j;
  33.         for(j=0;j<i;j++);
  34. }
  35. void T0_init()
  36. {                                                                 //裝初值10MS
  37.         TMOD=0X01;
  38.         TH0=0XD8;
  39.         TL0=0XF0;
  40.         ET0=1;
  41.         TR0=1;
  42. }
  43. void MAX_write(uchar ch)                 //以8位一個(gè)字節(jié)進(jìn)行寫(xiě)值
  44. {
  45.         uchar j,ads;
  46.     for(j=0;j<8;j++)                            //8位
  47.         {
  48.       ads=ch&0x80;                        //取最高位
  49.       CLK = 0;                        //時(shí)鐘線置低
  50.       if(ads)  DIN = 1;
  51.       else      DIN = 0;
  52.       ch=ch<<1;                         //左移一位
  53.       CLK=1;                                     //上升沿,DIN的數(shù)據(jù)寫(xiě)入到7219
  54.     }
  55. }
  56. void MAX7219(uchar addr, uchar num)                //寫(xiě)地址,寫(xiě)數(shù)據(jù)
  57. {
  58.     LOAD = 0;         
  59.         _nop_();
  60.     MAX_write(addr);
  61.          _nop_();
  62.     MAX_write(num);  
  63.          _nop_();
  64.     LOAD = 1;                                  //鎖存
  65. }                                                                          
  66. void MAX7219_init()
  67. {
  68.     MAX7219(0x0c,0x01);                                        //正常狀態(tài)
  69.     MAX7219(0x0b,0x03);                                        //設(shè)置掃描范圍DIG0-3
  70.     MAX7219(0x0a,0x05);                                        //設(shè)置亮度11/32
  71.     MAX7219(0x09,0x00);                                        //采用譯碼方式 ,不譯碼
  72. }
  73. void display()
  74. {
  75.         NS_S=NS/10;                                                         //南北十位,個(gè)位
  76.         NS_G=NS%10;
  77.         EW_S=EW/10;                                                         //東西十位,個(gè)位
  78.         EW_G=EW%10;
  79.         MAX7219(DIG0,table[NS_S]);                                //南北十位,個(gè)位      
  80.     MAX7219(DIG1,table[NS_G]);                                       
  81.     MAX7219(DIG2,table[EW_S]);                                //東西十位,個(gè)位
  82.     MAX7219(DIG3,table[EW_G]);
  83. }
  84. void T0_(void)interrupt 1
  85. {
  86.   temp++;
  87.   TH0=0XD8;
  88.   TL0=0XF0;
  89.   if(temp==100)
  90.     {
  91.       temp=0;
  92.       NS--;
  93.       EW--;
  94.           if((NS==0)&&(EW==3))
  95.          {
  96.           NS=3;
  97.           EW=3;
  98.           i=1;
  99.          }
  100.       if((NS==0)&&(EW==0)&&(i==1))
  101.          {
  102.           NS=83;
  103.           EW=80;
  104.           i=2;
  105.          }
  106.      if((NS==3)&&(EW==0))
  107.          {
  108.           NS=3;
  109.           EW=3;
  110.           i=3;
  111.          }
  112.      if((NS==0)&&(EW==0)&&(i==3))
  113.          {
  114.           NS=60;
  115.           EW=63;
  116.           i=4;
  117.          }
  118.         }
  119.         display();
  120. }
  121. void main()
  122. {
  123.         T0_init();
  124.         MAX7219_init();
  125.         EA=1;
  126.         NS=60;                                                                   //初始南北通行60秒
  127.         EW=63;                                                                  
  128.    R2=0,G1=0;                                                             //南北綠燈亮,東西紅燈亮
  129. while (1)
  130.         {
  131.                 uint k;
  132.                 display();        
  133.       switch(i)
  134.                {
  135.               case 1:         R2=1,G1=1;                        //關(guān)閉南北綠燈,東西紅燈
  136.                                                   Y1=0,Y2=0;                        //黃燈閃爍
  137.                       for(k=0;k<3;k++)
  138.                         {
  139.                               Y1=~Y1;
  140.                                                           Y2=~Y2;
  141.                               delay(10000);
  142.                            }        
  143.                                   break;
  144.               case 2: G2=0,R1=0;                         //東西綠燈亮,南北紅燈亮
  145.                       break;
  146.               case 3: G2=1,R1=1;
  147.                                             Y1=0,Y2=0;                        //黃燈閃爍
  148.                       for(k=0;k<3;k++)                //循環(huán)三次進(jìn)行延時(shí)閃爍
  149.                         {
  150.                               Y1=~Y1;
  151.                                                           Y2=~Y2;
  152.                               delay(10000);
  153.                             }
  154.                                   break;
  155.               case 4: R2=0,G1=0;                         //東西紅燈亮,南北綠燈亮
  156.                           break;
  157.              }                        
  158.          }
  159. }
復(fù)制代碼

作者: csmyldl    時(shí)間: 2023-12-15 20:34
因?yàn)槟阌玫墓碴?yáng)數(shù)碼管,而MAX7219的A-P各段輸出為低電平,就造成數(shù)碼管各段全亮
作者: Hephaestus    時(shí)間: 2023-12-17 15:32
方向也不對(duì),NS共用一套N,EW共用一套E,分不清楚東南西北。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧洲一区二区三区 | 国产a级毛片 | 男女免费视频网站 | aaaaaa大片免费看最大的 | 国产一区二区精品在线观看 | 草久久久 | 日韩免费电影 | 国产精品一区二区av | 黄视频国产 | 国产高清一区二区 | 中文字幕精品视频 | 欧美精品片| 久久国产精品视频 | 国产精品二区三区在线观看 | 国产精品久久久久久婷婷天堂 | 在线日韩 | 日本三级全黄三级三级三级口周 | 欧美精品一区二区三区在线 | 亚洲区一区二 | 99热视 | 国产ts人妖一区二区三区 | www操操 | 亚洲欧洲一区 | 日韩精品1区2区3区 国产精品国产成人国产三级 | 亚洲乱码国产乱码精品精98午夜 | 国产 日韩 欧美 制服 另类 | 一区二区三区欧美 | 亚洲一级黄色 | 国内精品久久精品 | 国产传媒在线观看 | 欧美欧美欧美 | 欧美一卡二卡在线观看 | 81精品国产乱码久久久久久 | 精品成人佐山爱一区二区 | 亚洲视频在线观看 | 日日日操 | 午夜久久久久久久久久一区二区 | 一区二区三区欧美 | 亚洲一区二区在线视频 | 午夜色婷婷 | 久久99一区二区 |