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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2685|回復: 19
打印 上一主題 下一主題
收起左側

STC單片機動態顯示數碼管程序顯示亮度不一致原因是什么?

  [復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. #include "STC8H.h"
  2. #include "intrins.h"

  3. unsigned char NixieTable[]={ 0x03,/*0*/
  4.         0x9F,/*1*/
  5.         0x25,/*2*/
  6.         0x0D,/*3*/
  7.         0x99,/*4*/
  8.         0x49,/*5*/
  9.         0x41,/*6*/
  10.         0x1F,/*7*/
  11.         0x01,/*8*/
  12.         0x09,/*9*/};

  13. void Delay1ms()                //@11.0592MHz
  14. {
  15.         unsigned char i, j;

  16.         i = 15;
  17.         j = 90;
  18.         do
  19.         {
  20.                 while (--j);
  21.         } while (--i);
  22. }

  23. void DelayXms(unsigned int x) //@11.0592MHz
  24. {
  25.         while (--x)
  26.         {
  27.    Delay1ms();
  28.          }

  29. }
  30. /************************************************
  31. * 函數名: void Led_Code(Lint date)  
  32. * 功  能: 數碼管顯示函數
  33. * 參  數: 無符號長整型,要顯示的數字
  34. * 返回值: 無
  35. ***********************************************/
  36. void Led_adc(unsigned int date) //顯示函數
  37. {        
  38.         unsigned int a,b,c,d;
  39.         
  40.           a=date/1000%10;                        //求千位
  41.           b=date/100%10;                        //求百位
  42.           c=date/10%10;                                  //求十位
  43.           d=date%10;                                          //求個位
  44.         
  45.           P10=1;P11=1;P12=1;P13=1;
  46.            P2=NixieTable[a];           //千
  47.           P10=0;P11=1;P12=1;P13=1;
  48.           DelayXms(2);
  49.                           
  50.           P10=1;P11=1;P12=1;P13=1;
  51.       P2=NixieTable[b];          //百
  52.          P11=0;//P12=1;P13=1; P10=1;
  53.           DelayXms(2);
  54.                
  55.                 P10=1;P11=1;P12=1;P13=1;
  56.       P2=NixieTable[c];          //十
  57.           P12=0;P13=1;P10=1;P11=1;
  58.           DelayXms(2);
  59.                
  60.                 P10=1;P11=1;P12=1;P13=1;
  61.       P2=NixieTable[d];               //個
  62.           P13=0;P10=1;P11=1;P12=1;
  63.           DelayXms(2);
  64. }

  65. /************************************************
  66. * 函數名: void Led_Code(Lint date)  
  67. * 功  能: 數碼管顯示函數
  68. * 參  數: 無符號長整型,要顯示的數字
  69. * 返回值: 無
  70. ***********************************************/
  71. void Led_Off(unsigned int date) //顯示函數
  72. {        
  73.         unsigned int a,b,c;
  74.         
  75.           a=date/100%10;                        //求百位
  76.           b=date/10%10;                                  //求十位
  77.           c=date%10;                                          //求個位
  78.         
  79.           P14=1;P15=1;P33=1;
  80.              P2=NixieTable[a];//百位
  81.           P14=0;P15=1;P33=1;
  82.           DelayXms(2);
  83.                
  84.           P14=1;P15=1;P33=1;  
  85.       P2=NixieTable[b];//十位
  86.           P15=0;P33=1;P14=1;
  87.           DelayXms(2);
  88.                
  89.                 P14=1;P15=1;P33=1;  
  90.     P2=NixieTable[c];//個位
  91.           P33=0;P14=1;P15=1;
  92.           DelayXms(2);
  93. }

  94. /************************************************
  95. * 函數名: void Led_Code(Lint date)  
  96. * 功  能: 數碼管顯示函數
  97. * 參  數: 無符號長整型,要顯示的數字
  98. * 返回值: 無
  99. ***********************************************/
  100. void Led_On(unsigned int date) //顯示函數
  101. {        
  102.         unsigned int a,b,c;
  103.         
  104.           a=date/100%10;                        //求百位
  105.           b=date/10%10;                                  //求十位
  106.           c=date%10;                                          //求個位
  107.         
  108.           P00=1;P01=1;P02=1;            
  109.              P2=NixieTable[a];//百位
  110.           P00=0;P01=1;P02=1;
  111.           DelayXms(2);
  112.                
  113.           P00=1;P01=1;P02=1;   
  114.       P2=NixieTable[b];//十位
  115.          P01=0;P02=1;P00=1;
  116.           DelayXms(2);
  117.                
  118.                 P00=1;P01=1;P02=1;  
  119.     P2=NixieTable[c];//個位
  120.           P02=0;P00=1;P01=1;
  121.           DelayXms(2);
  122. }

  123. void main ()
  124. {               P0M0 = 0x07; P0M1 = 0x00;


  125.         P1M0 = 0x00; P1M1 = 0xc0;
  126.         P2M0 = 0xff; P2M1 = 0x00;
  127.         P3M0 = 0x08; P3M1 = 0x00;
  128.         Timer0_init() ;
  129.               Timer2_init();
  130.               Timer3_init();
  131. while(1)
  132.         {                        


  133.         }

  134. }
  135. SMG_SaoMiao()interrupt 1
  136. {      //數碼管掃描定時器0        
  137.         unsigned int s;
  138.         if(++s>1)
  139.   {      s=0;
  140.          Led_adc(temperature) ;         
  141.   }
  142. }        

  143. void TM2_Isr() interrupt 12
  144. {
  145.         unsigned int s;
  146.         kaiji_wendu = 012;
  147.         tingzhi_wendu = 055 ;        
  148.         if(++s>1)
  149.   {      s=0;
  150.     Led_On(kaiji_wendu) ;
  151.                     
  152.   }                             
  153. }

  154. void TM3_Isr() interrupt 19
  155. {  
  156.         unsigned int s;
  157.   tingzhi_wendu = 055 ;        
  158.         if(++s>1)
  159.   {      s=0;
  160.                                  Led_Off(tingzhi_wendu);      
  161.   }
  162. }
復制代碼

數碼管亮度顯示不一致,是什么原因?

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2024-1-17 17:17 | 只看該作者
        Timer0_init();
        Timer2_init();
        Timer3_init();
這三個函數呢?
回復

使用道具 舉報

板凳
ID:332444 發表于 2024-1-17 19:12 | 只看該作者
可能同消隱有些關聯
回復

使用道具 舉報

地板
ID:213173 發表于 2024-1-17 20:38 | 只看該作者
如果硬件沒問題數碼管亮度不一致通常是顯示函數中各數碼管點亮時間不均衡所致。從貼圖和代碼看,硬件和軟件設計都不合理。STC8H的IO可以直接驅動數碼管,根本用不著加三極管放大。
回復

使用道具 舉報

5#
ID:72649 發表于 2024-1-17 20:54 | 只看該作者
lkc8210 發表于 2024-1-17 17:17
Timer0_init();
        Timer2_init();
        Timer3_init();

void Timer0_init()  //1ms
{
        AUXR &= 0x7F;                        //定時器時鐘12T模式
        TMOD &= 0xF0;                        //設置定時器模式
                                TL0 = 0xCD;                                //設置定時初始值
                                TH0 = 0xD4;                                //設置定時初始值
        TF0 = 0;                                //清除TF0標志
        TR0 = 1;                                //定時器0開始計時
        ET0 = 1;      //開T0中斷
        EA=1;       
}

void Timer2_init()  //1ms
{
        AUXR &= 0xFB;                        //定時器時鐘12T模式
        T2L = 0x66;                                //設置定時初始值
        T2H = 0xFC;                                //設置定時初始值
        AUXR |= 0x10;                        //定時器2開始計時
    IE2 =  0x04;                                  //使能定時器中斷
    EA = 1;
}

void Timer3_init()  //1ms
{
        T4T3M &= 0xFD;                        //定時器時鐘12T模式
        T3L = 0x66;                                //設置定時初始值
        T3H = 0xFC;                                //設置定時初始值
        T4T3M |= 0x08;                        //定時器3開始計時                              
        IE2 = 0x20;         //使能定時器中斷
    EA = 1;
}
忘記貼上了
回復

使用道具 舉報

6#
ID:72649 發表于 2024-1-17 21:31 | 只看該作者
wulin 發表于 2024-1-17 20:38
如果硬件沒問題數碼管亮度不一致通常是顯示函數中各數碼管點亮時間不均衡所致。從貼圖和代碼看,硬件和軟件 ...

STC實驗箱的原理圖就是這樣
回復

使用道具 舉報

7#
ID:161164 發表于 2024-1-17 22:13 | 只看該作者
hjx5548 發表于 2024-1-17 20:54
void Timer0_init()  //1ms
{
        AUXR &= 0x7F;                        //定時器時鐘12T模式

你定時1ms
但Led_adc耗時8ms
Led_On和Led_Off各耗時6ms
????????
回復

使用道具 舉報

8#
ID:72649 發表于 2024-1-18 05:02 來自手機 | 只看該作者
lkc8210 發表于 2024-1-17 22:13
你定時1ms
但Led_adc耗時8ms
Led_On和Led_Off各耗時6ms

我不用定時器,把三個顯示放在主函數的大循環里面,也是這個情況。
回復

使用道具 舉報

9#
ID:161164 發表于 2024-1-18 09:21 | 只看該作者
hjx5548 發表于 2024-1-18 05:02
我不用定時器,把三個顯示放在主函數的大循環里面,也是這個情況。

消影順序問題
第1,2,3位數碼管的亮光時間都是2ms
但第4位數碼管的亮光時間都是2+6+6=14ms
另外兩組數碼管同上
你把關燈代碼放到延時后試試



另外
中斷里不要用延時!
中斷里不要用延時!中斷里不要用延時!
回復

使用道具 舉報

10#
ID:192020 發表于 2024-1-18 09:23 | 只看該作者
可以看出都是數碼管最后一位比較亮,因為最后一位亮的時間最長,前一二位是亮2毫秒,最后一位是等所有程序執行一輪后才開始繼續亮,估計得亮十幾個毫秒。軟件需要改動,把延時去掉,顯示邏輯改一下
回復

使用道具 舉報

11#
ID:72649 發表于 2024-1-18 09:47 | 只看該作者
qq475878026 發表于 2024-1-18 09:23
可以看出都是數碼管最后一位比較亮,因為最后一位亮的時間最長,前一二位是亮2毫秒,最后一位是等所有程序 ...

顯示邏輯應該怎么修改?
回復

使用道具 舉報

12#
ID:192020 發表于 2024-1-18 10:01 | 只看該作者
hjx5548 發表于 2024-1-18 09:47
顯示邏輯應該怎么修改?

延時肯定是要去掉的了,可以把三個顯示函數放在同一個中斷,反正定時時間一樣,沒必要搞三個定時器。然后定義個全局變量來替代延時,每進一次中斷就+1,在中斷里判斷這個全局變量,判斷到比之前大1說明就延時1毫秒,用這個邏輯來替代之前用的延時函數,其他也沒什么了
回復

使用道具 舉報

13#
ID:213173 發表于 2024-1-18 15:38 | 只看該作者
hjx5548 發表于 2024-1-17 21:31
STC實驗箱的原理圖就是這樣

STC實驗箱有好幾款,你參照的是哪款。最好把你制作PCB的原理圖貼出來,圖片中有兩處筆段只隱約顯示一半,確實匪夷所思。

回復

使用道具 舉報

14#
ID:72649 發表于 2024-1-21 21:47 | 只看該作者
wulin 發表于 2024-1-18 15:38
STC實驗箱有好幾款,你參照的是哪款。最好把你制作PCB的原理圖貼出來,圖片中有兩處筆段只隱約顯示一半, ...

找到原因了。非常感謝
回復

使用道具 舉報

15#
ID:1102070 發表于 2024-1-22 08:25 來自手機 | 只看該作者
加電源,獨立供電。
回復

使用道具 舉報

16#
ID:161164 發表于 2024-1-22 09:04 | 只看該作者
hjx5548 發表于 2024-1-21 21:47
找到原因了。非常感謝

不說一下原因是啥?
回復

使用道具 舉報

17#
ID:384109 發表于 2024-1-22 11:10 | 只看該作者
原因估計是三個數碼管模塊是一起顯示的,做掃描顯示時是三個數碼管模塊單獨控制的,應該把三個數碼管模塊當作一個整體來考慮
回復

使用道具 舉報

18#
ID:849913 發表于 2024-2-9 22:45 | 只看該作者
第57行 P11=0;//P12=1;P13=1; P10=1; "//"為何要注釋掉這樣會導致P11和P10都是0,顯示會亂的
回復

使用道具 舉報

19#
ID:1109793 發表于 2024-2-10 19:00 | 只看該作者
第50行挪到第68行后面試試
回復

使用道具 舉報

20#
ID:111875 發表于 2024-2-11 14:55 | 只看該作者
電容加的少了吧
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久免费 | 国产成人精品999在线观看 | 亚洲国产成人在线 | 亚洲精品视频观看 | 特黄色毛片| 九九热免费看 | 国内自拍视频在线观看 | 日韩在线视频一区二区三区 | 四虎最新视频 | 亚洲一区在线日韩在线深爱 | 国产成人午夜精品影院游乐网 | 久久999| 欧美性区| 久久精品亚洲 | 欧美高清视频一区 | 亚洲精品日韩一区二区电影 | 精品久久久久久久久亚洲 | 亚洲欧美一区二区三区在线 | 国产精品福利网站 | 欧美精品综合在线 | wwww.xxxx免费 | 99精品福利视频 | 天天草天天干天天 | 国产精品高潮呻吟久久aⅴ码 | 中文字幕一区在线 | 国产成人精品一区二区三区四区 | 雨宫琴音一区二区在线 | 免费h视频| 本地毛片 | 日韩成人| 欧美中文字幕在线 | a毛片视频网站 | 久久久久国产一区二区三区 | 亚洲精品成人网 | 亚洲欧美在线一区 | 国产精品黄 | 男人的天堂在线视频 | 亚洲一区二区av | 国产91亚洲精品 | 亚洲国产精品视频 | 韩国毛片一区二区三区 |