標(biāo)題: 如何讓數(shù)碼管不關(guān)閉顯示?附單片機(jī)程序 [打印本頁(yè)]

作者: 三極管一樣的人    時(shí)間: 2022-9-27 11:12
標(biāo)題: 如何讓數(shù)碼管不關(guān)閉顯示?附單片機(jī)程序
目前遇到一個(gè)問(wèn)題,求組論壇大神:
要求:

前8個(gè)LED左右來(lái)回一次后,第九個(gè)LED翻轉(zhuǎn)一下,同時(shí)數(shù)碼管顯示循環(huán)次數(shù)
已實(shí)現(xiàn):
8個(gè)LED左右來(lái)回一次后,第九個(gè)LED翻轉(zhuǎn)一下
問(wèn)題:

數(shù)碼管的顯示循環(huán)次數(shù),不能一直保持顯示
【補(bǔ)充說(shuō)明,我的目標(biāo)是:當(dāng)新的一輪LED循環(huán)時(shí),數(shù)碼管能一直保持上一次的數(shù)據(jù)
   只有當(dāng)新的一輪LED循環(huán)結(jié)束后 ,第九個(gè)LED翻轉(zhuǎn),數(shù)碼管再更新數(shù)據(jù)】


如果,保持位選一直開(kāi)著,則會(huì)在顯示當(dāng)前次數(shù)后,變成顯示0;
如果,位選關(guān)閉,則會(huì)出現(xiàn)一閃一閃;

單片機(jī)源程序如下:
  1. /*
  2. * File:   Main.c
  3. * Author: 12618
  4. *
  5. * Created on 2022年9月30日, 上午9:53
  6. */
  7. /* Includes:主函數(shù) ------------------------------------------------------------------*/
  8. #include <Main.h>

  9. /* Private define:個(gè)人定義變量 host變量 (字符常量)-------------------------------------------------------------*/


  10. /* Private variables:個(gè)人綁定變量----------------------------------------------------------*/


  11. /* Public variables:公共綁定變量-----------------------------------------------------------*/


  12. /* Private function prototypes:個(gè)人功能函數(shù)------------------------------------------------*/


  13. /*
  14.     * @name   main
  15.     * @brief  主函數(shù)
  16.     * @param  None   
  17.     * @retval None      
  18. */
  19. int main()
  20. {
  21.    
  22.     Sys.Sys_Init();
  23.    
  24.    
  25.    
  26.     //系統(tǒng)主循環(huán)
  27.     while(1)
  28.     {
  29.         //Isr.Timer0_ISR();中斷查詢(xún)法
  30.         SMG1.SumLed_SMG();
  31.          
  32.     }
  33.    
  34.             
  35.    
  36. }



  37. /********************************************************
  38.   End Of File
  39. ********************************************************/




  40. /*
  41. * File:   SMG.c
  42. * Author: Administrator
  43. *
  44. * Created on 2022年9月20日, 下午4:27
  45. */


  46. #include <Main.h>

  47. /* Private define-------------------------------------------------------------*/

  48. u16_int ge;
  49. u16_int shi;
  50. u16_int bai;
  51. u16_int qian;

  52. const u8_word LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //段碼表

  53. /* Private variables----------------------------------------------------------*/
  54. static   void SMG_SumLed(void);                   //適用輸入輸出端口初始化


  55. /* Public variables-----------------------------------------------------------*/
  56. //結(jié)構(gòu)體定義對(duì)應(yīng).h的結(jié)構(gòu)體類(lèi)型
  57. SMG_t    SMG1 =
  58. {
  59.     0,                        //定義數(shù)碼管計(jì)數(shù)初值為0
  60.     SMG_SumLed,
  61. };

  62. /* Private function prototypes------------------------------------------------*/  

  63. /*
  64.     * @name  SMG_SumLed()
  65.     * @brief  數(shù)碼管函數(shù)
  66.     * @param  None
  67.     * @retval None      
  68. */
  69. ///// 查詢(xún)法,需要放入while(1)//////
  70.   static  void SMG_SumLed()
  71. {     
  72.      Run_LED.LED_Flash();
  73.      COUNT_LED = !COUNT_LED;
  74.      SMG1.Flash_count = ++SMG1.Flash_count;
  75.       
  76.    
  77.      
  78.     ge   =  SMG1.Flash_count % 10;
  79.     shi  =  SMG1.Flash_count % 100 / 10;
  80.     bai  =  SMG1.Flash_count % 1000 / 100;
  81.     qian =  SMG1.Flash_count / 1000;
  82.    
  83.      u16_int i = 2;
  84.    
  85.     while( i--)
  86.     {
  87.           PORTBbits.RB3 = 0;                              //選擇個(gè)位數(shù)碼管
  88.           PORTD = LED[ge];                            //獲取個(gè)位值
  89.           Delay_timer.Delay_1us(5);                       //十延時(shí)
  90.           //PORTD = 0xFF;                                   //清數(shù)碼管顯示
  91.           //PORTBbits.RB3 = 1;                              //關(guān)數(shù)碼管

  92.           PORTBbits.RB2 = 0;                              //選擇十位數(shù)碼管
  93.           PORTD = LED[shi];                         //獲取十位值
  94.          Delay_timer.Delay_1us(5);                       //延時(shí)
  95.          // PORTD = 0xFF;                                   //清數(shù)碼管顯示
  96.           //PORTBbits.RB2 = 1;                              //關(guān)數(shù)碼管*/


  97.           PORTBbits.RB1 = 0;                              //選擇百位數(shù)碼管
  98.           PORTD =LED[bai];                         //獲取百位值
  99.           Delay_timer.Delay_1us(5);                       //延時(shí)
  100.          // PORTD = 0xFF;                                   //清數(shù)碼管顯示
  101.           //PORTBbits.RB1 = 1;                              //關(guān)數(shù)碼管

  102.           PORTBbits.RB0 = 0;                              //選擇千位數(shù)碼管
  103.           PORTD = LED[qian];                          //獲取千位值
  104.           Delay_timer.Delay_1us(5);                      //延時(shí)
  105.           //PORTD = 0xFF;                                   //清數(shù)碼管顯示
  106.           //PORTBbits.RB0 = 1;                              //關(guān)數(shù)碼管
  107.    
  108.      }   
  109.                            
  110. }
復(fù)制代碼

Desktop.zip

1.12 MB, 下載次數(shù): 6

兩種現(xiàn)象


作者: heropp    時(shí)間: 2022-9-27 14:30
這個(gè)問(wèn)題一般是延時(shí)函數(shù)造成的
作者: heropp    時(shí)間: 2022-9-27 14:35
檢查延時(shí)函數(shù)
作者: 人中狼    時(shí)間: 2022-9-27 14:58
如果是掃描方式驅(qū)動(dòng)數(shù)碼管的話(huà)是要關(guān)閉數(shù)碼管的,while(i--)多余了
作者: 三極管一樣的人    時(shí)間: 2022-9-27 15:28
人中狼 發(fā)表于 2022-9-27 14:58
如果是掃描方式驅(qū)動(dòng)數(shù)碼管的話(huà)是要關(guān)閉數(shù)碼管的,while(i--)多余了

如果不while(--)的話(huà),
這個(gè)Delay_timer.Delay_1us( );   不增加就會(huì)一閃而過(guò)
如果這個(gè)Delay_timer.Delay_1us( ); 增加,數(shù)碼管就會(huì)明顯趨于流水從右到左一閃而過(guò)


作者: yzwzfyz    時(shí)間: 2022-9-28 09:59
太簡(jiǎn)單的問(wèn)題了:
在你提出的時(shí)間節(jié)點(diǎn)上,多做幾個(gè)標(biāo)記,不就可以了。
作者: 大漠落日    時(shí)間: 2022-9-28 10:49
小兒科的事情,調(diào)試一下就可以搞定




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